Freertos Vendredi Freertos
Total Page:16
File Type:pdf, Size:1020Kb
FreeRTOS 1 FreeRTOS Lez Concept Vendredi 27 septembre Lez Concept 15 chemin neuf 34 980 Montferrier Concept septembre Lez 27 [email protected] Vendredi FreeRTOS 04 67 59 92 53 2 Free RTOS • Free Libre «Gratuit» Concept septembre • RT Real Time Temps réel Lez 27 Vendredi FreeRTOS • OS Operating System System Exploitation 3 Free RTOS • Définition (http://www.freertos.org) : « FreeRTOS is a portable, open source, royalty free, mini Real Time Kernel ‐ a free to download and free to deploy RTOS that can be used in commercial Concept septembre applications without any requirement to expose your Lez 27 proprietary source code. » Vendredi FreeRTOS 4 FreeRTOS • Obligations (licence GPL modifiée) : • Indiquer que le produit utilise FreeRTOS (un lien vers www.freertos.org est suffisant) • Indiquer la version de FreeRTOS • Proposer de fournir le code source de FreeRTOS aux Concept utilisateurs de son application septembre Lez 27 • Les changements dans le noyau sont open source • L'application doit être une vraie application «métier». Vendredi FreeRTOS 5 Principales fonctionnalités • Temps réel : préemption, coopération • Petit (noyau 4Ko à 9Ko) • Facile à utiliser (globalement écrit en C) • Nombre « illimité » de tâches et de niveau de priorité • Gestion flexible des priorités • Communication entre tâches ou entre interruptions et tâches : Concept septembre • Queues (échange de donnée) Lez 27 • Sémaphores (synchronisation) • Mutexes (sémaphore avec héritage de priorité, partage de ressources) Vendredi FreeRTOS • Software timer • Détection de dépassement de la pile • Fonction Idle (priorité la plus basse) 6 • Trace Ce qui est livré (free) • Le noyau complet sans librairie de I/O • Certaines fonctionnalités spécifique Concept septembre Lez 27 Vendredi FreeRTOS 7 Ce qui n’est pas livré (free) • Aucun driver spécifique • Usart • I2C • SPI Concept • Bus CAN septembre Lez 27 • CAN • Flash… Vendredi FreeRTOS 8 Ce qui existe (payant) • Des librairies d’I/O • Des versions non free du noyaux (pas de licence GPL) • Des versions « durcis » et certifié du noyaux • Des livres, • Concept De la formations….. septembre Lez 27 Vendredi FreeRTOS 9 Dimensionnement • FreeRTOS est conçu pour des microcontrôleurs pas pour des gros systèmes : • Aucun interface graphique prévu • Petit noyaux (quelques kilo octets) • Pas de gestion de I/O disque (ATA,SCSI,SATA…) Concept • Pas de gestion des formatages (FAT, FS…) septembre Lez 27 • … Vendredi FreeRTOS 10 Plateforme opérationnelles • Altera • NEC • Atmel • Microsemi (formally Actel) • Cortus • NXP • Cypress • Renesas • Energy Micro • Silicon Labs Concept septembre • Freescale • ST Microelectronics Lez 27 • Fujitsu • Texas Instruments • Infineon • Xilinx Vendredi FreeRTOS • Luminary Micro • x86 (real mode) • Microchip 11 ARM • Architecture d’unité centrale • Une constante évolution depuis 1987 • En 32 bits depuis 1987 • Bientôt des versions 64 bits Concept septembre Lez 27 Vendredi FreeRTOS 12 2 familles d’architectures • Version microcontrôleur • Version microprocesseur • Préfixe M (M0 à M4) • Préfixe…A15Mp • I2C • MMU • SPI • FPU • ADC • GPU Concept • … • … septembre Lez 27 Vendredi FreeRTOS 13 STM32Mxxx • Chez ST on trouve : • Des versions M0 à M4 référencées STM32F0xx à STM32F4xx • Les M0 à 48Mhz à M4 @ 180Mhz • De 32Ko à 1Mo de Flash • De 4Ko à 256k de RAM Concept • De TSSOP 20 pins (M0) à BGA 176 (M4) septembre Lez 27 • De 18 I/O (M0) à 168 I/O (M4) • … Vendredi FreeRTOS 14 Outils de développement ARM • Eclipse • OpenOCD • GNU debugger Concept • GCC septembre • Compilateur Lez 27 • C • ASM • C++ Vendredi • Link FreeRTOS • Make • Lib 15 • jtag Génération de code Solution Libre • GCC • Solution payante • • Mentor IAR http://www.mentor.com/embedded‐ software/sourcery‐tools/sourcery‐ • KEIL Concept codebench/editions/lite‐edition/ septembre • …. Lez 27 • Yagartoo http://www.yagarto.org/ • … Vendredi FreeRTOS 16 Debug • Eclipse • Environnement de développement • Super console • Gestion multi‐projet • OpenOCD Concept • Open On Chip Debugger septembre Lez • Plugin Eclipse 27 • GNU debugger • Code sur la cible de gestion de debug Vendredi FreeRTOS 17 JTAG • Le JTAG pour Joint Test Action Group est le nom de la norme IEEE 1149.1 intitulé « Standard Test Access Port and Boundary‐ Scan Architecture ». Le JTAG a été normalisé en 1990. • Connectique standard: Concept • ICE 20 point (2x10) au pas de 2,54 septembre Lez 27 • Micro 10 point (2x5) au pas de 1,27 • Custom possible Vendredi • Config minimum FreeRTOS • GND • NRST • SWDIO • SWCLK 18 Sonde JTAG • Le standard de l’industrie : FTDI2232C • 1 Port Jtag • 1 Port série Concept septembre Lez 27 Vendredi FreeRTOS 19 • Version propriétaire Sonde JTAG STM 20 FreeRTOS Lez Concept Vendredi 27 septembre Carte eval 21 FreeRTOS Lez Concept Vendredi 27 septembre Connectiques 22 FreeRTOS Lez Concept Vendredi 27 septembre Libraires • Chez ST (st.com) • STM32FxxxStandard periph.lib • Drivers • CMSI • Exemples • … Concept septembre Lez 27 • Drivers et couches d’abstraction matériel Vendredi FreeRTOS 23 Principe du multitâche • (1) La tâche 1 est en cours d'exécution. • (2) Le noyau suspend la tâche 1 ... • ... et réactive (3) la tâche 2. • Pendant son exécution (4), la tâche 2 se réserve un périphérique pour son accès exclusif. Concept • (5) Le noyau suspend la tâche 2 ... septembre • ... et réactive (6) la tâche 3. Lez 27 • La tâche 3 essaie d'accéder au même périphérique. Elle voit qu'il est déjà réservé. Elle ne peut pas continuer et se • suspend (7). • (8) le noyau réactive la tâche 1. Vendredi • Etc FreeRTOS • Le tick OS d'après la tâche 2 est en cours d'exécution (9). Elle termine son utilisation du périphérique et le • débloque. • Le tick OS d'après la tâche 3 est en cours d'exécution (10). Elle voit que le périphérique peut être accédé et l'utilise 24 • avant d'être suspendue par le noyau. • Lancement du noyau FreeRTOS 25 FreeRTOS Lez Concept Vendredi 27 septembre return vTaskStartScheduler(); { int main(void) } 0; Lancement du noyau 26 FreeRTOS Lez Concept Vendredi 27 septembre • Lancement du noyau FreeRTOS 27 FreeRTOS Lez Concept Vendredi 27 septembre Lancement de tache int main(void) { PPMOutputs_init(); xTaskCreate( LEDTask, (signed char *)"LED", Concept septembre configMINIMAL_STACK_SIZE, Lez 27 NULL, tskIDLE_PRIORITY, NULL); Vendredi FreeRTOS vTaskStartScheduler(); return 0; 28 } Lancement de tache • http://www.freertos.org/a00125.html portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, const portCHAR * const pcName, unsigned portSHORT usStackDepth, void *pvParameters, Concept septembre unsigned portBASE_TYPE uxPriority, Lez 27 xTaskHandle *pvCreatedTask ); Vendredi FreeRTOS 29 Lancement de tache • pvTaskCode Pointer to the task entry function. Tasks must be implemented to never return (i.e. continuous loop). • pcName A descriptive name for the task. This is mainly used to facilitate debugging. Max length defined by configMAX_TASK_NAME_LEN. • usStackDepth The size of the task stack specified as the number of variables the stack can hold ‐ not the number of bytes. For example, if the stack is 16 bits wide and usStackDepth is defined Concept as 100, 200 bytes will be allocated for stack storage. The stack depth multiplied by the stack septembre width must not exceed the maximum value that can be contained in a variable of type size_t. Lez 27 • pvParameters Pointer that will be used as the parameter for the task being created. • uxPriority Vendredi The priority at which the task should run. Systems that include MPU support can optionally create tasks in a privileged (system) mode by setting bit portPRIVILEGE_BIT of the FreeRTOS priority parameter. For example, to create a privileged task at priority 2 the uxPriority parameter should be set to ( 2 | portPRIVILEGE_BIT ). • pvCreatedTask Used to pass back a handle by which the created task can be referenced. 30 FreeRTOS • Lancement du noyau • Lancement de tache Concept septembre Lez 27 Vendredi FreeRTOS 31 Tuer une tache • vTaskDelete • task. h • void vTaskDelete( xTaskHandle xTask ); Concept septembre xTask The handle of the task to be deleted. Lez 27 Passing NULL will cause the calling task to be deleted. Vendredi FreeRTOS 32 Tuer une tache void vOtherFunction( void ) { xTaskHandle xHandle; // Create the task, storing the handle. Concept septembre xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, Lez 27 tskIDLE_PRIORITY, &xHandle ); Vendredi FreeRTOS // Use the handle to delete the task. vTaskDelete( xHandle ); } 33 Une tache void LEDTask(void * pvArg) { //déclaration & initialisation RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); GPIO_InitTypeDef led; uint8_t test = 1; led.GPIO_Mode = GPIO_Mode_OUT; led.GPIO_OType = GPIO_OType_PP; led.GPIO_Pin = GPIO_Pin_4; Concept septembre GPIO_Init(GPIOA, &led); Lez 27 while(1) { Vendredi if(test) GPIO_ResetBits(GPIOA, GPIO_Pin_4); FreeRTOS else GPIO_SetBits(GPIOA, GPIO_Pin_4); test ^= 1; vTaskDelay(100); //point de retour du scheduler dans 100ms } 34 } Une tache • Cette structure en deux blocs permet: • Un premier bloc : • Il fait office de déclaration réservation mémoire avec un compilateur standard, et sans appel système • Il fait office d’initialisation, des variable et périphériques nécessaires • Le second bloc une boucle infinie Concept • C’est la partie de code utilisé à chaque appel du scheduler septembre Lez 27 • vTaskDelay(xxxx) permet un retour au scheduler dans xxxx tic • Le rappel par le scheduler sera fait à la suite de cette ligne de code Vendredi • Cette simplicité de concept permet : FreeRTOS • L’utilisation de compilateur standard • Aucune connaissance