{"id":13,"date":"2025-03-30T15:55:14","date_gmt":"2025-03-30T13:55:14","guid":{"rendered":"https:\/\/stm32.elec-core.fr\/?p=13"},"modified":"2025-03-30T15:55:14","modified_gmt":"2025-03-30T13:55:14","slug":"chapitre-4-creation-dun-systeme-temps-reel-rtos-avec-freertos","status":"publish","type":"post","link":"https:\/\/stm32.elec-core.fr\/index.php\/2025\/03\/30\/chapitre-4-creation-dun-systeme-temps-reel-rtos-avec-freertos\/","title":{"rendered":"Chapitre 4 : Cr\u00e9ation d&#8217;un Syst\u00e8me Temps R\u00e9el (RTOS) avec FreeRTOS"},"content":{"rendered":"\n<p>Bienvenue dans le Chapitre 4 de notre guide sur la programmation des microcontr\u00f4leurs STM32. Dans ce chapitre, nous allons explorer comment int\u00e9grer et utiliser FreeRTOS, un syst\u00e8me d&#8217;exploitation temps r\u00e9el (RTOS), pour g\u00e9rer efficacement les t\u00e2ches sur votre STM32. FreeRTOS est largement utilis\u00e9 dans les applications embarqu\u00e9es n\u00e9cessitant une gestion pr\u00e9cise du temps et des ressources.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Introduction \u00e0 FreeRTOS<\/strong><\/h3>\n\n\n\n<p>FreeRTOS est un RTOS l\u00e9ger et portable con\u00e7u pour les microcontr\u00f4leurs. Il permet de g\u00e9rer plusieurs t\u00e2ches simultan\u00e9ment, chacune ayant sa propre priorit\u00e9, ce qui est essentiel pour les applications temps r\u00e9el.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Avantages de FreeRTOS<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Gestion des T\u00e2ches<\/strong>\u00a0: Permet de cr\u00e9er et de g\u00e9rer plusieurs t\u00e2ches avec diff\u00e9rentes priorit\u00e9s.<\/li>\n\n\n\n<li><strong>Synchronisation<\/strong>\u00a0: Fournit des m\u00e9canismes pour synchroniser les t\u00e2ches, tels que les s\u00e9maphores, les mutex et les files d&#8217;attente.<\/li>\n\n\n\n<li><strong>Portabilit\u00e9<\/strong>\u00a0: Supporte une large gamme de microcontr\u00f4leurs, y compris les STM32.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Configuration de FreeRTOS avec STM32<\/strong><\/h3>\n\n\n\n<p>Pour utiliser FreeRTOS avec votre microcontr\u00f4leur STM32, suivez ces \u00e9tapes de configuration :<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Utilisation de STM32CubeMX<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Lancer STM32CubeMX<\/strong>\n<ul class=\"wp-block-list\">\n<li>Ouvrez STM32CubeMX et chargez votre projet existant ou cr\u00e9ez-en un nouveau.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Activer FreeRTOS<\/strong>\n<ul class=\"wp-block-list\">\n<li>Allez dans l&#8217;onglet &#8220;Pinout &amp; Configuration&#8221;.<\/li>\n\n\n\n<li>Dans le menu de gauche, s\u00e9lectionnez &#8220;Middleware&#8221; et activez FreeRTOS.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Configurer les Param\u00e8tres de Base<\/strong>\n<ul class=\"wp-block-list\">\n<li>D\u00e9finissez la taille de la pile pour chaque t\u00e2che.<\/li>\n\n\n\n<li>Configurez les priorit\u00e9s des t\u00e2ches en fonction de vos besoins.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>G\u00e9n\u00e9rer le Code<\/strong>\n<ul class=\"wp-block-list\">\n<li>G\u00e9n\u00e9rez le code d&#8217;initialisation avec STM32CubeMX.<\/li>\n\n\n\n<li>Int\u00e9grez les fichiers g\u00e9n\u00e9r\u00e9s dans votre projet PlatformIO.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Cr\u00e9ation et Gestion des T\u00e2ches<\/strong><\/h3>\n\n\n\n<p>Une fois FreeRTOS configur\u00e9, vous pouvez cr\u00e9er et g\u00e9rer des t\u00e2ches dans votre application.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Cr\u00e9er une T\u00e2che<\/strong><\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">Copier<code>void StartDefaultTask(void const * argument)\n{\n    for(;;)\n    {\n        \/\/ Code de la t\u00e2che\n    }\n}\n\n\/\/ Cr\u00e9ation de la t\u00e2che\nosThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);\nosThreadCreate(osThread(defaultTask), NULL);<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>osThreadDef<\/strong>\u00a0: D\u00e9finit une nouvelle t\u00e2che avec une fonction, une priorit\u00e9, et une taille de pile.<\/li>\n\n\n\n<li><strong>osThreadCreate<\/strong>\u00a0: Cr\u00e9e la t\u00e2che et la pr\u00e9pare \u00e0 \u00eatre ex\u00e9cut\u00e9e.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Gestion des Priorit\u00e9s<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Les t\u00e2ches avec une priorit\u00e9 plus \u00e9lev\u00e9e sont ex\u00e9cut\u00e9es avant celles avec une priorit\u00e9 plus basse.<\/li>\n\n\n\n<li>Utilisez les priorit\u00e9s pour garantir que les t\u00e2ches critiques sont ex\u00e9cut\u00e9es en temps voulu.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Synchronisation et Communication entre T\u00e2ches<\/strong><\/h3>\n\n\n\n<p>FreeRTOS fournit plusieurs m\u00e9canismes pour synchroniser les t\u00e2ches et permettre la communication entre elles.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>S\u00e9maphores<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utilis\u00e9s pour contr\u00f4ler l&#8217;acc\u00e8s \u00e0 des ressources partag\u00e9es.<\/li>\n\n\n\n<li>Une t\u00e2che peut attendre qu&#8217;un s\u00e9maphore soit disponible avant de continuer.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">Copier<code>osSemaphoreDef(mySemaphore);\nosSemaphoreId mySemaphoreHandle = osSemaphoreCreate(osSemaphore(mySemaphore), 1);\n\n\/\/ Attendre le s\u00e9maphore\nosSemaphoreWait(mySemaphoreHandle, osWaitForever);\n\n\/\/ Lib\u00e9rer le s\u00e9maphore\nosSemaphoreRelease(mySemaphoreHandle);<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Files d&#8217;Attente<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Permettent aux t\u00e2ches d&#8217;envoyer et de recevoir des messages.<\/li>\n\n\n\n<li>Utiles pour la communication inter-t\u00e2ches.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">Copier<code>osMessageQDef(myQueue, 16, uint16_t);\nosMessageQId myQueueHandle = osMessageCreate(osMessageQ(myQueue), NULL);\n\n\/\/ Envoyer un message\nosMessagePut(myQueueHandle, message, osWaitForever);\n\n\/\/ Recevoir un message\nosEvent event = osMessageGet(myQueueHandle, osWaitForever);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. D\u00e9bogage d&#8217;un Syst\u00e8me RTOS<\/strong><\/h3>\n\n\n\n<p>Le d\u00e9bogage d&#8217;un syst\u00e8me RTOS peut \u00eatre complexe en raison de la nature concurrente des t\u00e2ches. Voici quelques conseils :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Utiliser les Outils de D\u00e9bogage<\/strong>\u00a0: PlatformIO et Cursor offrent des outils pour suivre l&#8217;ex\u00e9cution des t\u00e2ches et identifier les probl\u00e8mes de synchronisation.<\/li>\n\n\n\n<li><strong>V\u00e9rifier les Priorit\u00e9s<\/strong>\u00a0: Assurez-vous que les priorit\u00e9s des t\u00e2ches sont correctement configur\u00e9es pour \u00e9viter les blocages.<\/li>\n\n\n\n<li><strong>Surveiller la Consommation de la Pile<\/strong>\u00a0: Une pile trop petite peut entra\u00eener des d\u00e9bordements et des comportements impr\u00e9visibles.<\/li>\n<\/ul>\n\n\n\n<p>En suivant ces \u00e9tapes, vous serez en mesure d&#8217;int\u00e9grer FreeRTOS dans votre projet STM32 et de d\u00e9velopper des applications temps r\u00e9el robustes et efficaces.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Pr\u00eat \u00e0 passer \u00e0 la pratique ? Explorez des \u00e9tudes de cas et des projets pratiques dans le prochain chapitre !<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bienvenue dans le Chapitre 4 de notre guide sur la programmation des microcontr\u00f4leurs STM32. Dans ce chapitre, nous allons explorer comment int\u00e9grer et utiliser FreeRTOS, un syst\u00e8me d&#8217;exploitation temps r\u00e9el (RTOS), pour g\u00e9rer efficacement les t\u00e2ches sur votre STM32. FreeRTOS est largement utilis\u00e9 dans les applications embarqu\u00e9es n\u00e9cessitant une gestion pr\u00e9cise du temps et des [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-13","post","type-post","status-publish","format-standard","hentry","category-non-classe"],"_links":{"self":[{"href":"https:\/\/stm32.elec-core.fr\/index.php\/wp-json\/wp\/v2\/posts\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stm32.elec-core.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stm32.elec-core.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stm32.elec-core.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stm32.elec-core.fr\/index.php\/wp-json\/wp\/v2\/comments?post=13"}],"version-history":[{"count":1,"href":"https:\/\/stm32.elec-core.fr\/index.php\/wp-json\/wp\/v2\/posts\/13\/revisions"}],"predecessor-version":[{"id":14,"href":"https:\/\/stm32.elec-core.fr\/index.php\/wp-json\/wp\/v2\/posts\/13\/revisions\/14"}],"wp:attachment":[{"href":"https:\/\/stm32.elec-core.fr\/index.php\/wp-json\/wp\/v2\/media?parent=13"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stm32.elec-core.fr\/index.php\/wp-json\/wp\/v2\/categories?post=13"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stm32.elec-core.fr\/index.php\/wp-json\/wp\/v2\/tags?post=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}