concept freertos
TRANSCRIPT
FreeRTOS
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
1
Lez Concept15 chemin neuf
34 980 Montferrier
04 67 59 92 53
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
2
FreeRTOS
• Free Libre « Gratuit »
• RT Real Time Temps réel
• OS Operating System System Exploitation
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
3
FreeRTOS• 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 commercialapplications without any requirement to expose your
proprietary source code. »
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
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 utilisateurs de son application
• Les changements dans le noyau sont open source• L'application doit être une vraie application « métier ».
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
5
Principalesfonctionnalité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 :
• Queues (échange de donnée)• Sémaphores (synchronisation)• Mutexes (sémaphore avec héritage de priorité, partage de ressources)
• Software timer• Détection de dépassement de la pile• Fonction Idle (priorité la plus basse)• Trace
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
6
Cequiestlivré(free)• Le noyau complet sans librairie de I/O• Certaines fonctionnalités spécifique
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
7
Cequin’estpaslivré(free)
• Aucun driver spécifique• Usart• I2C• SPI• Bus CAN• CAN• Flash…
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
8
Cequiexiste(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,• De la formations…..
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
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…)• Pas de gestion des formatages (FAT, FS…)• …
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
10
Plateformeopérationnelles• Altera• Atmel• Cortus• Cypress• Energy Micro• Freescale• Fujitsu• Infineon• Luminary Micro• Microchip
• NEC• Microsemi (formally Actel)• NXP• Renesas• Silicon Labs• ST Microelectronics• Texas Instruments• Xilinx• x86 (real mode)
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
11
ARM• Architecture d’unité centrale• Une constante évolution depuis 1987• En 32 bits depuis 1987• Bientôt des versions 64 bits
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
12
2famillesd’architectures• Version microcontrôleur• Préfixe M (M0 à M4)• I2C• SPI• ADC• …
• Version microprocesseur• Préfixe…A15Mp• MMU• FPU• GPU• …
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
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• De TSSOP 20 pins (M0) à BGA 176 (M4)• De 18 I/O (M0) à 168 I/O (M4)• …
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
14
Outilsdedéveloppement
ARM• Eclipse• OpenOCD• GNU debugger
• GCC• Compilateur
• C• ASM• C++
• Link
• Make• Lib• jtag
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
15
Générationdecode
Solution Libre• GCC
• Mentorhttp://www.mentor.com/embedded‐software/sourcery‐tools/sourcery‐codebench/editions/lite‐edition/
• Yagartoohttp://www.yagarto.org/
• …
• Solution payante• IAR• KEIL• ….
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
16
Debug• Eclipse
• Environnement de développement• Super console• Gestion multi‐projet
• OpenOCD• Open On Chip Debugger• Plugin Eclipse
• GNU debugger• Code sur la cible de gestion de debug
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
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:• ICE 20 point (2x10) au pas de 2,54• Micro 10 point (2x5) au pas de 1,27• Custom possible
• Config minimum• GND• NRST• SWDIO• SWCLK
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
18
SondeJTAG• Le standard de l’industrie : FTDI2232C
• 1 Port Jtag• 1 Port série
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
19
SondeJTAG• Version propriétaire STM
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
20
Carteeval
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
21
Connectiques
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
22
Libraires• Chez ST (st.com)
• STM32FxxxStandard periph.lib• Drivers• CMSI• Exemples• …
• Drivers et couches d’abstraction matériel
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
23
Principedumultitâ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.• (5) Le noyau suspend la tâche 2 ...• ... et réactive (6) la tâche 3.• 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.• Etc• 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• avant d'être suspendue par le noyau.
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
24
FreeRTOS• Lancement du noyau
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
25
Lancementdunoyauint main(void){vTaskStartScheduler();
return 0;}
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
26
FreeRTOS• Lancement du noyau
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
27
Lancementdetacheint main(void){PPMOutputs_init();
xTaskCreate(LEDTask,(signed char *)"LED", configMINIMAL_STACK_SIZE, NULL,tskIDLE_PRIORITY,NULL);
vTaskStartScheduler();
return 0;}
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
28
Lancementdetache• http://www.freertos.org/a00125.html
portBASE_TYPE xTaskCreate(pdTASK_CODE pvTaskCode,const portCHAR * const pcName,unsigned portSHORT usStackDepth,void *pvParameters,unsigned portBASE_TYPE uxPriority,xTaskHandle *pvCreatedTask );
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
29
Lancementdetache• 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 as 100, 200 bytes will be allocated for stack storage. The stack depth multiplied by the stack width must not exceed the maximum value that can be contained in a variable of type size_t.• pvParameters
Pointer that will be used as the parameter for the task being created.• uxPriority
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 priority parameter. For example, to create a privileged task at priority 2 the uxPriorityparameter should be set to ( 2 | portPRIVILEGE_BIT ).• pvCreatedTask
Used to pass back a handle by which the created task can be referenced.
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
30
FreeRTOS• Lancement du noyau• Lancement de tache
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
31
Tuerunetache• vTaskDelete
• task. h • void vTaskDelete( xTaskHandle xTask );
xTask The handle of the task to be deleted. Passing NULL will cause the calling task to be deleted.
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
32
Tuerunetachevoid vOtherFunction( void ){xTaskHandle xHandle;
// Create the task, storing the handle. xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
// Use the handle to delete the task. vTaskDelete( xHandle );}
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
33
Unetachevoid 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;GPIO_Init(GPIOA, &led);
while(1) {if(test) GPIO_ResetBits(GPIOA, GPIO_Pin_4);else GPIO_SetBits(GPIOA, GPIO_Pin_4);test ^= 1;vTaskDelay(100); //point de retour du scheduler dans 100ms}
}
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
34
Unetache• 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
• C’est la partie de code utilisé à chaque appel du scheduler• vTaskDelay(xxxx) permet un retour au scheduler dans xxxx tic• Le rappel par le scheduler sera fait à la suite de cette ligne de code
• Cette simplicité de concept permet :• L’utilisation de compilateur standard• Aucune connaissance complexe de la programmation système n’est nécessaire
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
35
FreeRTOS• Lancement du noyau• Lancement de tache• Tuer une tache
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
36
Priorités?• Le niveau de priorité permet de définir qui a accès aux
• CPU• Ressources partagées
• Le noyau (ou kernel, ou tick OS…) à la plus haute priorité• L’idle à la priorité la plus basse, normalement zéro
• En direct de FreeRTOS.com:• Each task is assigned a priority from 0 to (configMAX_PRIORITIES ‐1 ), where configMAX_PRIORITIES is defined within FreeRTOSConfig.h and can be set on an application by application basis.
• Low priority numbers denote low priority tasks. The idle task has priority zero (tskIDLE_PRIORITY).
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
37
Priorités?
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
38
FreeRTOS• Lancement du noyau• Lancement de tache• Tuer une tache• Priorité?
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
39
Lamémoire• FreeRTOS Sait gérer la mémoire
• On peut (doit) définir la taille de la pile lors du lancement d’une tache.
• Des fonctionnalités de gestion de dépassement de piles existent• Des possibilités de gestion d’allocations sont aussi implémentées
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
40
FreeRTOS• Lancement du noyau• Lancement de tache• Tuer une tache• Priorité?• Gestion de la mémoire
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
41
Lesinterruptions• Gestion des priorités du contrôleur matériel (NVIC)
• Possibilité de masque en direct par niveau de priorité
• Masquage de TOUTES les IT pour un cours instant • Test d’une variable interprocessus et set ou clear
• Fonctions spécifiques (xxxxFromISR) appelable d’un routine itmatériel
• Gestion de l’it timer pour le tic system
• Toute la gestion des it est TRES dépendante du chip utilisé
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
42
FreeRTOS• Lancement du noyau• Lancement de tache• Tuer une tache• Priorité?• Gestion de la mémoire• Gestion des interruptions
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
43
binarysemaphores• Un binary semaphore est mis à 1 par une tache• Il sera mis à 0 par une autre tache ou par le noyau
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
44
binarysemaphores• A la création un binarysemaphore est disponible.
xSemaphoreHandle xSemaphore;void vATask( void * pvParameters ){// Semaphore cannot be used before a call to vSemaphoreCreateBinary (). // This is a macro so pass the variable in directly. vSemaphoreCreateBinary( xSemaphore );
if( xSemaphore != NULL ) { // The semaphore was created successfully. // The semaphore can now be used.}
}
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
45
binarysemaphores• Prise d’un binarysemaphore…if( xSemaphore != NULL ) {// See if we can obtain the semaphore. If the semaphore is not available// wait 10 ticks to see if it becomes free.
if( xSemaphoreTake( xSemaphore, ( portTickType ) 10 ) == pdTRUE ){// on a obtenu xSemaphore}else{ // time overflow, xSemaphore n’est pas disponible}
}
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
46
binarysemaphores• Libération d’un binarysemaphore…if( xSemaphoreGive( xSemaphore ) != pdTRUE )
{// nous sommes ici sans avoir à liberer xSemaphore….}
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
47
binarysemaphores• Libération d’un binarysemaphore sous it
xSemaphoreGiveFromISR( xSemaphoreHandle xSemaphore,signed portBASE_TYPE *pxHigherPriorityTaskWoken)
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
48
FreeRTOS• Lancement du noyau• Lancement de tache• Tuer une tache• Priorité?• Gestion de la mémoire• Gestion des interruptions• Semaphore Fr
eeRTOS Lez C
oncept
Vend
redi 27 septem
bre
49
Mutex• Outils de partage de ressource
• Une tache a besoin d’une ressource elle tente de prendre le mutex, elle l’obtient
• Une seconde tache a besoin de la ressource, elle tente de prendre la ressource, elle ne l’obtient pas
• S’utilise comme un semaphore
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
50
Mutex héritagedepriorité• Si la seconde tache est plus prioritaire :
• Elle reste en attente• Elle fait hériter la ressource de son niveau de priorité pour moins attendre
• La tache en attente garde son niveau de priorité initial
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
51
MutexxSemaphoreHandle xSemaphore;void vATask( void * pvParameters )
{// Mutex semaphores cannot be used before a call to // xSemaphoreCreateMutex(). The created mutex is returned.
xSemaphore = xSemaphoreCreateMutex();if( xSemaphore != NULL )
{// The semaphore was created successfully.// The semaphore can now be used. }}
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
52
FreeRTOS• Lancement du noyau• Lancement de tache• Tuer une tache• Priorité?• Gestion de la mémoire• Gestion des interruptions• Semaphore• Mutex
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
53
FATSL• http://www.freertos.org/FreeRTOS‐Plus/FreeRTOS_Plus_FAT_SL/FreeRTOS_Plus_FAT_SL.shtml
• sous licence GPL V2
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
54
Standard File System API f_initvolume() f_delvolume() f_format()f_getfreespace() f_findfirst() f_findnext()f_getserial() f_mkdir() f_chdir()f_rmdir() f_getcwd() f_open()f_close() f_flush() f_write()f_read() f_seek() f_tell()f_rewind() f_putc() f_getc()f_seteof() f_truncate() f_eof()f_delete() f_filelength()
FATfs• http://elm‐chan.org/fsw/ff/00index_e.html• 100% libre• Non spécifique FreeRTOS• Non spécifique à une plateforme matériel
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
55
FAT
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
56
TACHE 1 TACHE 2 TACHE 3
Gestion de la ressource
Système FAT
Gestion protocole SPI
Gestion hard SPI
Carte SD
FreeRTOS• Lancement du noyau• Lancement de tache• Tuer une tache• Priorité?• Gestion de la mémoire• Gestion des interruptions• Semaphore• Mutex• Mémoire de masse
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
57
Ethernet
• De très (trop) nombreuses solutions
• La bonne solution dépend du projet et de l’environnement Fr
eeRTOS Lez C
oncept
Vend
redi 27 septem
bre
58
Questions?
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
59
Questions?
Lez Concept15 chemin neuf
34 980 Montferrier
04 67 59 92 53
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
60
FreeRTOS Lez C
oncept
Vend
redi 27 septem
bre
61