{"id":231,"date":"2024-06-15T10:50:15","date_gmt":"2024-06-15T09:50:15","guid":{"rendered":"https:\/\/www.jelectronique.com\/?p=231"},"modified":"2024-06-23T10:47:24","modified_gmt":"2024-06-23T09:47:24","slug":"pourquoi-utiliser-free-rtos","status":"publish","type":"post","link":"https:\/\/www.jelectronique.com\/?p=231","title":{"rendered":"Pourquoi utiliser Free RTOS ?"},"content":{"rendered":"\n<p>Free RTOS permet d\u2019ex\u00e9cuter plusieurs t\u00e2ches en \u201cparall\u00e8le\u201d<br>Vous souhaitez faire clignoter une LED toutes les x secondes, attendre la r\u00e9ception d&rsquo;une trame sur une liaison s\u00e9rie, lire des valeurs ADC etc \u2026 de nombreuses petites t\u00e2ches qui vont transformer votre code en usine \u00e0 gaz avec des d\u00e9lais parfois m\u00eame bloquant.<\/p>\n\n\n\n<p>Free RTOS va vous permettre de cr\u00e9er des t\u00e2ches ind\u00e9pendantes \u00e0 ex\u00e9cuter \u00e0 intervalle r\u00e9gulier.<\/p>\n\n\n\n<p>Si vous souhaitez faire clignoter une LED \u00e0 1Hz, vous avez la possibilit\u00e9 de faire :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\nwhile(1)\n{\n  digitalWrite(LED, HIGH);\n  delay(500); \/\/ bloqu\u00e9 ici pendant 500ms\n  digitalWrite(LED, LOW); \n  delay(500); \/\/ bloqu\u00e9 ici pendant 500ms\n}\n<\/pre><\/div>\n\n\n<p>delay() est bien souvent une fonction bloquante qui va demander \u00e0 votre micro de tourner en boucle et ne fera rien d&rsquo;autre jusqu&rsquo;\u00e0 que sa boucle soit termin\u00e9e. (Cette m\u00e9thode c&rsquo;est le mal !)<\/p>\n\n\n\n<p>Arduino propose aussi une m\u00e9thode millis() qui renvoie le nombre de millisecondes \u00e9coul\u00e9es depuis le d\u00e9marrage du micro. Il s&rsquo;agit d&rsquo;un compteur qui est incr\u00e9ment\u00e9 par un timer.<br>Il est possible de comparer \u201cl&rsquo;heure\u201d du d\u00e9but de notre tache (previousTime) \u00e0 la valeur de millis() (currentTime) et si la diff\u00e9rence est sup\u00e9rieur \u00e0 X ms, alors X ms se sont \u00e9coul\u00e9es. Le code n&rsquo;est plus bloquant mais cela implique de cr\u00e9er un nombre important de variables et transformer votre code en usine \u00e0 gaz si vous avez plusieurs taches \u00e0 ex\u00e9cuter.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\nunsigned long currentTime=0;\nunsigned long previousTime=0;\nbool ledState=LOW;\n\nwhile(1)\n{\n  currentTime=millis();\n  if((currentTime-previousTime)&gt;500){\n    previousTime=currentTime;\n    ledState=!ledState;\n    digitalWrite(LED,ledState)\n  }\n     \/\/Ici on peut faire d'autres choses sans \u00eatre bloqu\u00e9\n}\n\n<\/pre><\/div>\n\n\n<p>La 3\u00e8me solution utilis\u00e9e dans tous les programmes un peu complexe c&rsquo;est : l&rsquo;OS temps r\u00e9el comme Free RTOS.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\nwhile(1)\n{\n  xTaskCreate(LedBlink,&quot;Toggle LED&quot;,4096,NULL,1,NULL); \/\/Cr\u00e9ation d'une t\u00e2che\n  xTaskCreate(FaireTruc2,&quot;FaireTruc2&quot;,4096,NULL,1,NULL); \/\/d'une 2\u00e8me\n  xTaskCreate(FaireTruc3,&quot;FaireTruc3&quot;,4096,NULL,1,NULL); \/\/d'une 3\u00e8me \n  xTaskCreate(FaireTruc3,&quot;FaireTruc3&quot;,4096,NULL,1,NULL); \/\/d'une 4\u00e8me\n}\n<\/pre><\/div>\n\n\n<p>Contenu de la t\u00e2che :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\nvoid LedBlink(void * parameter)\n{\n    while(1)\n    {\n        digitalWrite(LED, !digitalRead(LED));\n        vTaskDelay(500\/ portTICK_PERIOD_MS); \/\/On redonne la main \u00e0 Free RTOS pour qu'il execute d'autres t\u00e2ches pendant 500ms\n    }\n}\n<\/pre><\/div>\n\n\n<p>Juste pour faire clignoter une LED, c&rsquo;est peut \u00eatre un peu lourd mais d\u00e8s que vous aurez plusieurs t\u00e2ches \u00e0 ex\u00e9cuter \u00e7a vous simplifiera grandement les choses et vous \u00e9vitera de vous soucier du s\u00e9quencement de vos t\u00e2ches.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Free RTOS permet d\u2019ex\u00e9cuter plusieurs t\u00e2ches en \u201cparall\u00e8le\u201dVous souhaitez faire clignoter une LED toutes les x secondes, attendre la r\u00e9ception d&rsquo;une trame sur une liaison s\u00e9rie, lire des valeurs ADC etc \u2026 de nombreuses petites t\u00e2ches qui vont transformer votre&hellip; <a href=\"https:\/\/www.jelectronique.com\/?p=231\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":235,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-231","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-electronique"],"_links":{"self":[{"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/posts\/231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=231"}],"version-history":[{"count":5,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/posts\/231\/revisions"}],"predecessor-version":[{"id":254,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/posts\/231\/revisions\/254"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/media\/235"}],"wp:attachment":[{"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}