concept freertos

61
FreeRTOS FreeRTOS Lez Concept Vendredi 27 septembre 1

Upload: others

Post on 16-Oct-2021

24 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Concept FreeRTOS

FreeRTOS

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

1

Page 2: Concept FreeRTOS

Lez Concept15 chemin neuf

34 980 Montferrier

[email protected]

04 67 59 92 53

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

2

Page 3: Concept FreeRTOS

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

Page 4: Concept FreeRTOS

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

Page 5: Concept FreeRTOS

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

Page 6: Concept FreeRTOS

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

Page 7: Concept FreeRTOS

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

Page 8: Concept FreeRTOS

Cequin’estpaslivré(free)

• Aucun driver spécifique• Usart• I2C• SPI• Bus CAN• CAN• Flash…

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

8

Page 9: Concept FreeRTOS

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

Page 10: Concept FreeRTOS

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

Page 11: Concept FreeRTOS

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

Page 12: Concept FreeRTOS

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

Page 13: Concept FreeRTOS

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

Page 14: Concept FreeRTOS

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

Page 15: Concept FreeRTOS

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

Page 16: Concept FreeRTOS

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

Page 17: Concept FreeRTOS

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

Page 18: Concept FreeRTOS

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

Page 19: Concept FreeRTOS

SondeJTAG• Le standard de l’industrie  : FTDI2232C

• 1 Port Jtag• 1 Port série 

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

19

Page 20: Concept FreeRTOS

SondeJTAG• Version propriétaire STM

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

20

Page 21: Concept FreeRTOS

Carteeval

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

21

Page 22: Concept FreeRTOS

Connectiques

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

22

Page 23: Concept FreeRTOS

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

Page 24: Concept FreeRTOS

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

Page 25: Concept FreeRTOS

FreeRTOS• Lancement du noyau

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

25

Page 26: Concept FreeRTOS

Lancementdunoyauint main(void){vTaskStartScheduler();

return 0;}

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

26

Page 27: Concept FreeRTOS

FreeRTOS• Lancement du noyau

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

27

Page 28: Concept FreeRTOS

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

Page 29: Concept FreeRTOS

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

Page 30: Concept FreeRTOS

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

Page 31: Concept FreeRTOS

FreeRTOS• Lancement du noyau• Lancement de tache

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

31

Page 32: Concept FreeRTOS

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

Page 33: Concept FreeRTOS

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

Page 34: Concept FreeRTOS

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

Page 35: Concept FreeRTOS

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

Page 36: Concept FreeRTOS

FreeRTOS• Lancement du noyau• Lancement de tache• Tuer une tache

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

36

Page 37: Concept FreeRTOS

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

Page 38: Concept FreeRTOS

Priorités?

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

38

Page 39: Concept FreeRTOS

FreeRTOS• Lancement du noyau• Lancement de tache• Tuer une tache• Priorité?

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

39

Page 40: Concept FreeRTOS

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

Page 41: Concept FreeRTOS

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

Page 42: Concept FreeRTOS

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

Page 43: Concept FreeRTOS

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

Page 44: Concept FreeRTOS

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

Page 45: Concept FreeRTOS

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

Page 46: Concept FreeRTOS

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

Page 47: Concept FreeRTOS

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

Page 48: Concept FreeRTOS

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

Page 49: Concept FreeRTOS

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

Page 50: Concept FreeRTOS

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

Page 51: Concept FreeRTOS

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

Page 52: Concept FreeRTOS

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

Page 53: Concept FreeRTOS

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

Page 54: Concept FreeRTOS

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()

Page 55: Concept FreeRTOS

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

Page 56: Concept FreeRTOS

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

Page 57: Concept FreeRTOS

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

Page 58: Concept FreeRTOS

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

Page 59: Concept FreeRTOS

Questions?

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

59

Page 60: Concept FreeRTOS

Questions?

Lez Concept15 chemin neuf

34 980 Montferrier

[email protected]

04 67 59 92 53

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

60

Page 61: Concept FreeRTOS

FreeRTOS          Lez C

oncept            

Vend

redi 27 septem

bre                   

61