Électronique Numérique

Électronique Numérique

Electronique´ num´erique J.-M Friedt Electronique´ num´erique J.-M Friedt FEMTO-ST/d´epartement temps-fr´equence [email protected] transparents `a jmfriedt.free.fr 22 novembre 2020 1 / 25 Electronique´ num´erique J.-M Friedt Plan des interventions : 7 cours/TP d'introduction au STM32 en C baremetal : 1 Electronique´ num´eriqueet conception du circuit L3 : aspects analogiques, consommation ´electrique,lecture de datasheet Survol des divers p´eriph´eriquesqui seront abord´es(RS232, SPI, timer, ADC) repr´esentationdes donn´ees(tailles/encodage), masques, architecture Rappels sur Atmega32U4 (Makefile, compilation, masques ...) 2 Premiers pas sur le STM32, adresses des p´eriph´eriques,architecture 3 Fonctionnement de gcc et optimisations : pr´eprocess{compilateur{assembleur{linker, passage C `aassembleur, pointeurs 4 biblioth`equeset s´eparation algorithme/mat´eriel,simulateurs libopencm3, newlib & stubs, ressources requises par les biblioth`eques 5 Bus de communication s´erie,synchrone/asynchrone 6 arithm´etiquesur syst`emesembarqu´es entiers, flottants, convertir un algorithme exprim´een nombres `avirgules vers des entiers, timers 7 interruptions et acquisition de donn´eesanalogiques, fr´equence d'´echantillonnage vecteurs d'interruption, gestion des horloges du STM32, ADC 2 / 25 Electronique´ num´erique J.-M Friedt Compiler son compilateur Une cha^ınede compilation n´ecessite 1 le compilateur (gcc) 2 les outils pour convertir les divers formats de fichiers (binutils) 3 les biblioth`eques (newlib) + debugger (gdb) + outils de programmation du microcontr^oleur (avrdude, stm32flash, dfu-programmer ...) configure --target=arm-none-eabi --prefix=$fHOMEg/sat Automatiser ce processus dans un script pour g´en´ererun ensemble \coh´erent"d'outils 1. 1. explication de son utilisation `a http://jmfriedt.free.fr/summon_arm.pdf 3 / 25 Electronique´ num´erique J.-M Friedt newlib Implication de la biblioth`equede calculs flottants : sans stdio, avec une division flottante 12950 sans stdio, avec atan sur flottant 17090 toujours en thumb : avec stdio, avec une division flottante 80397 avec stdio, avec atan sur flottant 80397 Thumb est un sous-ensemble d'instructions pour processeur ARM cod´esur 16 bits au lieu de 32 bits 2 Diverses impl´ementations libres des biblioth`equesstandard du C : • glibc (http://www.gnu.org/software/libc/, utilis´eepar le noyau Linux) ... • ... et eglibc (embedded glibc, http://www.eglibc.org/home) ont fusionn´e, • uClibc (http://www.uclibc.org/, utilis´eepar uClinux), 2. J.-M Friedt, E.´ Carry, D´eveloppement sur processeur `abase de cœur ARM7 sous GNU/Linux, GNU/Linux Magazine France 117 (Juin 2009), pp.40-59 4 / 25 Electronique´ num´erique J.-M Friedt Le probl`eme... Dans un programme en C, l'appel `a malloc() se traduit par une erreur `al'´editionde liens arm-none-eabi/lib/thumb/cortex-m3/libc.a(lib_a-sbrkr.o): In function `_sbrk_r': newlib/libc/reent/sbrkr.c:58: undefined reference to `_sbrk' Idem pour printf() arm-none-eabi/lib/thumb/cortex-m3/libc.a(lib_a-sbrkr.o): In function `_sbrk_r': newlib/libc/reent/sbrkr.c:58: undefined reference to `_sbrk' arm-none-eabi/lib/thumb/cortex-m3/libc.a(lib_a-writer.o): In function `_write_r': newlib/libc/reent/writer.c:58: undefined reference to `_write' arm-none-eabi/lib/thumb/cortex-m3/libc.a(lib_a-closer.o): In function `_close_r': newlib/libc/reent/closer.c:53: undefined reference to `_close' arm-none-eabi/lib/thumb/cortex-m3/libc.a(lib_a-fstatr.o): In function `_fstat_r': newlib/libc/reent/fstatr.c:62: undefined reference to `_fstat' arm-none-eabi/lib/thumb/cortex-m3/libc.a(lib_a-isattyr.o): In function `_isatty_r': newlib/libc/reent/isattyr.c:58: undefined reference to `_isatty' arm-none-eabi/lib/thumb/cortex-m3/libc.a(lib_a-lseekr.o): In function `_lseek_r': newlib/libc/reent/lseekr.c:58: undefined reference to `_lseek' arm-none-eabi/lib/thumb/cortex-m3/libc.a(lib_a-readr.o): In function `_read_r': newlib/libc/reent/readr.c:58: undefined reference to `_read' 5 / 25 Electronique´ num´erique J.-M Friedt Exploitation d'une biblioth`eque{ newlib https://sourceware.org/newlib/libc.html#Stubs : 17 stubs, colle entre newlib et nos programmes 3. • exit : quitter un programme • lseek : sans fermer les fichiers ouverts • open : • environ : • read : lire depuis un fichier • execve : • sbrk : utilis´epar malloc • fork : • stat : • fstat : • times : • getpid : • unlink : • isatty : • wait : • kill : • write : ´ecriredans un fichier, • link : incluant stdout 3. http://wiki.osdev.org/Porting_Newlib 6 / 25 Electronique´ num´erique J.-M Friedt Exploitation d'une biblioth`eque{ newlib Exemple d'impl´ementation (envoyer stdio sur port s´erie) s s i z e t r e a d r (struct r e e n t ∗r , int file, void ∗ptr , s i z e t l e n ) fc h a r c; int i; unsigned char ∗p ; p = (unsigned char ∗) p t r ; f o r (i=0; i < l e n ; i ++) fw h i l e ( global i n d e x == 0) fg //!uart0 k b h i t()); c = g l o b a l tab [0]; global i n d e x =0; //(char) uart0 g e t c(); i f (c == 0x0D) f∗p='\0' ;break; g ∗p++ = c ; j m f putchar(c,NULL,0 ,0) ; g r e t u r n len − i ; g s s i z e t w r i t e r ( struct r e e n t ∗r , int file, const void ∗ptr , s i z e t l e n ) f i n t i; const unsigned char ∗p ; p = (const unsigned char ∗) p t r ; f o r (i=0; i < l e n ; i ++) f i f( ∗p == '\n' ) j m f p u t c h a r ( '\r' ,NULL,0 ,0) ; j m f p u t c h a r (∗p++,NULL , 0 , 0 ) ; g r e t u r n len; g v o i d jmf p u t c h a r (int a,char ∗chaine , int ∗ c h a i n e i n d e x ,int USARTx) f i f (chaine != NULL) fc h a i n e [∗ c h a i n e i n d e x ]=a ;∗ c h a i n e i n d e x=∗c h a i n e i n d e x +1;g e l s e f i f (usart p o r t ==1) fUSART SendData (USART1, a); w h i l e(USART GetFlagStatus(USART1, USART FLAG TC) == RESET) f ; g g e l s e fUSART SendData (USART2, a); w h i l e(USART GetFlagStatus(USART2, USART FLAG TC) == RESET) f ; g g g g 7 / 25 Electronique´ num´erique J.-M Friedt D´emonstration #ifdef use s t d i o f o r (tempe=1;tempe <10;tempe++) fmf=mf∗ l f ; g p r i n t f ( "\n+mf=%d\n" ,(int)mf); t =(char ∗)malloc(200); // malloc requiert s b r k p r i n t f ( "^%x\n^%x\n" ,(int)t[0],t[199]); memset(t ,0x55,200) ; p r i n t f ( "^%x\n^%x\n" ,(int)t[0],t[199]); #endif w h i l e (1) f #ifndef use s t d i o p u t chars(welcome); #else p r i n t f ( "%s" , welcome ) ; #endif i f (i <10) p u t c h a r (USART1 , i+'0' ); e l s e put c h a r (USART1 , i+'A' −10) ; i ++;if (i==16) i=0; ... 8 / 25 Electronique´ num´erique J.-M Friedt D´emonstration Compromis entre temps de d´eveloppement, fonctionnalit´eset occupation de ressources 3240 main.bin 31824 main_stdio.bin Ici, affichage par printf(), allocation de m´emoirepar malloc(), calculs flottants Un ´emulateurpour tester ses programmes en l'absence du mat´eriel: https://github.com/beckus/qemu_stm32 qemu-system-arm -M stm32-p103 -serial stdio -serial stdio -kernel main.bin suppose n´eanmoinsune impl´ementation\correcte" des p´eriph´eriques. simavr pour Atmega32U2 9 / 25 Electronique´ num´erique J.-M Friedt Stubs • Un programme principal contient toute l'\intelligence" du code : algorithmique • Ce programme fait exclusivement appel `ades fonctions g´en´eriques ind´ependantes du mat´eriel: stubs • L'acc`esde ces fonctions au mat´eriel est impl´ement´edans des fichiers s´epar´es • Algorithmique est li´eaux appels mat´erielpar le compilation (compilation s´epar´ee) • Possibilit´ede passer des arguments par Makefile : variables et tests conditionnels • Edition´ de lien g´en`ereun ex´ecutable algorithmique matériel1 matériel2, bibliothèque1 matériel2, bibliothèque2 led_on() GP3DAT |= 0x00070000; GPIO_SetBits(GPIOC,GPIO_Pin_2); gpio_set (GPIOA, GPIO4); led_off() GP3DAT |&= (~0x00070000); GPIO_ResetBits(GPIOC,GPIO_Pin_1); gpio_clear(GPIOA, GPIO4); communique() COMTX = a; USART_SendData (USART1, a); usart_send_blocking (USART1,a) Makefile MODBUS = 0 #include makefile.cortex_AD9958 #include makefile.cortex_XE1203 include makefile.aduc ifeq ($(MODBUS),1) ... endif Edition de liens −> exécutable ! remplacement \ais´e"de la plateforme mat´eriellesans modifier l'algorithme (HAL) ! \fausses fonctions" sur PC pour ´emulerles appels : test unitaire 10 / 25 Electronique´ num´erique HAL : Hardware Abstraction Layer J.-M Friedt Android HAL ST Microelectronics development fra- mework https://source.android.com/devices/architecture https://www.st.com/en/embedded-software/x-cube-spn14.html 11 / 25 Electronique´ num´erique J.-M Friedt Conception de logiciels 1 S´eparer le code li´eau mat´eriel(initialisation et acc`esaux ressources mat´erielles)de l'algorithmique 2 Compilation s´epar´ee: choisir une impl´ementationdu mat´erielou une ´emulationlogicielle (gcc supporte une multitude de plateformes) 3 Permet de tester son code sur PC avant de le porter au microcontr^oleur(simulation de diverses conditions mat´erielles){ test automatique, en particulier de cas pathologiques 4 Exploitation d'un simulateur pour conna^ıtrel'´etatinterne de la machine qui s´equencele code 5 qemu pour grand nombre de plateformes, simavr pour Atmega32U2 unsigned short interroge (unsigned short puissance, unsigned int freq,unsigned int offset,unsigned char chan) { unsigned int v12; FTW0[1] = (freq & 0xFF000000) >> 24; FTW0[2] = (freq & 0xFF0000) >> 16; FTW0[3] = (freq & 0xFF00) >> 8; FTW0[4] = (freq & 0xFF); [...] v12 = readADC12 (); readerF2_CLR; // coupe reception TIM_ITConfig (TIM3, TIM_IT_Update, ENABLE); return (v&0x03F); } 12 / 25 Electronique´ num´erique J.-M Friedt Conception de logiciels 1 S´eparer le code li´eau mat´eriel(initialisation et acc`esaux ressources mat´erielles)de l'algorithmique 2 Compilation s´epar´ee:

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    25 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us