[EFS] blue pill, C, et compilation de libopencm3 avec erreurs sur des notations de fréquences au format 'scientifique'
mac_call
mac at maccall.fr
Dim 10 Juil 15:02:51 CEST 2022
### le compilateur du site arm.com (récupéré hier
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/downloads)
### et préconisé par le bouquin (bouquin qui date de 2017 je crois) ⇒
version de gcc-arm au taquet
╰─ /opt/gcc-arm/bin/arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=/opt/gcc-arm/bin/arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/opt/gcc-arm/bin/../libexec/gcc/arm-none-eabi/11.2.1/lto-wrapper
Target: arm-none-eabi
Configured with:
/data/jenkins/workspace/GNU-toolchain/arm-11/src/gcc/configure
--target=arm-none-eabi
--prefix=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-eabi/install//
--with-gmp=/data/jenkins/workspace/GNU-to
olchain/arm-11/build-arm-none-eabi/host-tools
--with-mpfr=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-eabi/host-tools
--with-mpc=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-eabi/host-tools
--with-
isl=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-eabi/host-tools
--disable-shared --disable-nls --disable-threads --disable-tls
--enable-checking=release --enable-languages=c,c++,fortran --with-newlib
--with-multi
lib-list=aprofile,rmprofile --with-pkgversion='GNU Toolchain for the Arm
Architecture 11.2-2022.02 (arm-11.14)'
--with-bugurl=https://bugs.linaro.org/
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 11.2.1 20220111 (GNU Toolchain for the Arm Architecture
11.2-2022.02 (arm-11.14))
### le compilateur de ma distrib linux précedemment installé sur ma
machine avec un apt-get ⇒ version de gcc-arm plus ancienne
╰─ /usr/bin/arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=/usr/bin/arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-none-eabi/9.2.1/lto-wrapper
Target: arm-none-eabi
Configured with: ../configure --build=x86_64-linux-gnu --prefix=/usr
--includedir='/usr/lib/include' --mandir='/usr/lib/share/man'
--infodir='/usr/lib/share/info' --sysconfdir=/etc --localstatedir=/var
--disable-silent-rules --l
ibdir='/usr/lib/lib/x86_64-linux-gnu'
--libexecdir='/usr/lib/lib/x86_64-linux-gnu' --disable-maintainer-mode
--disable-dependency-tracking --mandir=/usr/share/man
--enable-languages=c,c++,lto --enable-multilib --disable-decimal-
float --disable-libffi --disable-libgomp --disable-libmudflap
--disable-libquadmath --disable-libssp --disable-libstdcxx-pch
--disable-nls --disable-shared --disable-threads --enable-tls
--build=x86_64-linux-gnu --target=arm-non
e-eabi --with-system-zlib --with-gnu-as --with-gnu-ld
--with-pkgversion=15:9-2019-q4-0ubuntu1 --without-included-gettext
--prefix=/usr/lib --infodir=/usr/share/doc/gcc-arm-none-eabi/info
--htmldir=/usr/share/doc/gcc-arm-none-eab
i/html --pdfdir=/usr/share/doc/gcc-arm-none-eabi/pdf --bindir=/usr/bin
--libexecdir=/usr/lib --libdir=/usr/lib --disable-libstdc++-v3
--host=x86_64-linux-gnu --with-headers=no --without-newlib
--with-multilib-list=rmprofile CFLA
GS='-g -O2
-fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=.
-fstack-protector-strong' CPPFLAGS='-Wdate-time -D_FORTIFY_SOURCE=2'
CXXFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9
/gcc-arm-none-eabi-9-2019-q4=. -fstack-protector-strong' FCFLAGS='-g -O2
-fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=.
-fstack-protector-strong' FFLAGS='-g -O2 -fdebug-prefix-map=/build/gcc-arm
-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=.
-fstack-protector-strong' GCJFLAGS='-g -O2
-fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=.
-fstack-protector-strong' LDFLAGS='-Wl,-Bsymbolic-functi
ons -Wl,-z,relro' OBJCFLAGS='-g -O2
-fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-eabi-9-2019-q4=.
-fstack-protector-strong' OBJCXXFLAGS='-g -O2
-fdebug-prefix-map=/build/gcc-arm-none-eabi-Gl9kT9/gcc-arm-none-e
abi-9-2019-q4=. -fstack-protector-strong'
INHIBIT_LIBC_CFLAGS=-DUSE_TM_CLONE_REGISTRY=0
AR_FOR_TARGET=arm-none-eabi-ar AS_FOR_TARGET=arm-none-eabi-as
LD_FOR_TARGET=arm-none-eabi-ld NM_FOR_TARGET=arm-none-eabi-nm
OBJDUMP_FOR_TARG
ET=arm-none-eabi-objdump RANLIB_FOR_TARGET=arm-none-eabi-ranlib
READELF_FOR_TARGET=arm-none-eabi-readelf
STRIP_FOR_TARGET=arm-none-eabi-strip
Thread model: single
gcc version 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599]
(15:9-2019-q4-0ubuntu1)
Par ailleurs il y a une option -std=c99 dans le makefile fourni par le
projet github du bouquin
En utilisant le compilateur de la distrinb linux, tout est passé avec la
notation des fréquences en 72e6 (sans toucher au -std=c99 )
Avec le compilateur venant du site "officiel" ça ne passe pas.
Conclusion : Ne pas faire confiance aux bouquins, et utiliser les
paquages de sa distribution en premier lieu :D
Merci bien !
Mac
Le 10/07/2022 à 12:38, Rancune a écrit :
> Hello,
>
> C'est assez curieux ... "Illegal Instruction", c'est vraiment une
> erreur du compilateur lui-même.
>
> La compréhension d'un literal est purement du ressort du compilateur
> donc ça ne peut pas être un problème de librairie ou autre.
>
> Je viens de tester rapidement : sur gcc 10.3.0, pour x86_64, pas de
> souci. Ca passe pour un int ou un double sans même un warning.
>
> Cependant, je sais que les anciennes versions du C ne supportaient pas
> ce type de notation : Je pencherais donc pour la version du C
> utilisée par ton compilo.
>
> ( est-ce que cela a été introduit dans une version de C tardive ? C11 ? )
>
> Tu peux nous faire un petit gcc -v et nous donner aussi la ligne de
> compilation que tu utilises ?
>
> Si tu compiles avec une option du style -std=c11, ca ameliore les
> choses ?
>
> Autre possibilité : la chaine de compilation a un souci. Tu peux
> installer gcc-arm par le système d'installation de ta distribution :
> il est en général packagé dans toutes les distros. La toute dernière
> version n'est absolument pas nécessaire :)
>
> Rancune
>
>
>
>
> Le 10/07/2022 à 11:53, mac_call a écrit :
>> Hello les maîtres du C et du stm32.
>>
>>
>> Ayant reçus quelques blue pills, j'ai commencé à regarder "Beginning
>> STM32: Developing with FreeRTOS, libopencm3 and GCC"
>> (
>> http://bookszlibb74ugqojhzhg2a63w5i2atv5bqarulgczawnbmsb6s6qead.onion/book/3705292/5504c6
>> par TOR pour le pdf sur z-lib, il est pas accessible sur le site
>> "normal"
>>
>> Ça demande de compiler libopencm3 avec un cross-compilateur arm (tout
>> est bien expliqué) mais j'ai eu des erreurs :
>>
>> rcc.c:86:17: internal compiler error: Illegal instruction
>>
>>
>> 86 | .ahb_frequency = 72e6,
>>
>> sur des définitions de fréquences...
>>
>> J'ai remplacé la valeur un peu au pif par 72000000 au lieu de 72e6
>> et hop, c'est passé...
>>
>>
>> La compréhension de e6 comme 10⁶ c'est le compilateur qui sait faire
>> ça ? De quoi ça peut dépendre ?
>>
>> j'ai récupéré la dernière version de gcc-arm sur
>> https://developer.arm.com comme indiqué par le bouquin...
>>
>>
>> Alors j'ai l'impression d'être un gros hackerZ pour avoir corrigé un
>> truc sans rien comprendre, mais je suis un peu perplexe sur cette
>> notation scientique qui devrait être comprise mais qui ne l'ai pas
>> chez moi :)
>>
>> Si vous avez des infos la dessus ça m'intéresse !
>>
>>
>> Mac
>>
>>
>> _______________________________________________
>> EFS mailing list
>> EFS at ramix.org
>> http://listes.lautre.net/cgi-bin/mailman/listinfo/efs
> _______________________________________________
> EFS mailing list
> EFS at ramix.org
> http://listes.lautre.net/cgi-bin/mailman/listinfo/efs
Plus d'informations sur la liste de diffusion EFS