OT gcc inline assembler mimo tela fcie; was: AC Load Analyzer
Miroslav Mraz
mraz na seznam.cz
Neděle Listopad 9 23:06:55 CET 2014
Ano, problém byl asi v tom Extended, tedy v propojení s C. Protože jak
jsem tak koukal, tak asm mimo tělo funkce používám už dost dlouho -
třeba na string descriptory pro USB např.:
// Index 0x00: LANGID Codes
"USB_StringDescriptor:\n\t"
".byte (label_1 - .)\n\t" // <- délka následujícího pole, v C problém
".byte USB_STRING_DESCRIPTOR_TYPE\n\t"
".byte 0x09, 0x04\n"
// Index 0x01: Manufacturer string
"label_1:\n\t" // počítá se za překladu k této značce
".byte (label_2 - .)\n\t"
".byte USB_STRING_DESCRIPTOR_TYPE\n\t"
".byte 'M,0,'r,0,'a,0,'z,0,'i,0,'k,0,' ,0,'l,0,'a,0,'b,0,'s,0,'.,0\n"
// Index 0x02: Product
"label_2:\n\t"
...
Protože neumím dostat tu délku nějak rozumně v C do konstanty a nechci
kvůli tomu dělat kopii do RAM. Možná někdo přijde na to, jak udělat
čistě v C, ale mě nic nenapadá.
Mrazík
Dne 9.11.2014 v 22:33 Jan Waclawek napsal(a):
>> tak už vím, kde byla chyba. Kdysi jsem se o to pokoušel a nešlo mi to,
>> tak jsem to napsal èistì v assembleru. Ale mám takový dojem, že problém
>> byl v té direktivì .incbin, ne v tom, že by to bylo mimo tìlo funkce.
>> Ale už je to dlouho, tak se mùžu mýlit.
>
> Mozem sa mylit aj ja. Mne to totiz tiez neslo, a nedavno mi ktosi ukazal
> cosi, co malo asm() mimo tela funkcie, tak som si to v hlave zrejme chybne
> dal dokopy s novou verziou gcc.
>
> V aktualnej dokumentacii
> (https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html) sa pise:
>
> Note that Extended asm statements must be inside a function. Only Basic asm
> may be outside functions (see Basic Asm).
>
> Ale vsetky tie kapitoly o inline asm vyzeraju byt prekopane, nic taketo v
> starsich verziach dokumentacie (vratane 4.9.2) nenachadzam... Ono to tam
> ale tato vlastnost mohla byt odjakziva, a ja som mozno stale skusal len
> to, co nazyvaju extended asm, t.j. ze som tam pchal tie parametre; tak
> preto som mozno nadobudol ten pocit...
>
> Je neskoro a nechce sa mi to skusat s tymi starsimi verziami.
>
> wek
>
>
Další informace o konferenci Hw-list