Kde najdu konkrétní řetězce pro BFDNAME a BFDARCH?

xdtgj

Kde najdu konkrétní řetězce pro BFDNAME a BFDARCH?
« kdy: 30. 12. 2017, 19:53:47 »
Zdravím, potřeboval bych si vyjasnit jednu věc, kterou se mi nedaří dohledat. U gcc, objcopy a dalších se potýkám s pojmy jako bfd, popřípadě bfdname a bfdarch. Ale nikde se mi pořádně nepodařilo najít, co přesně znamenají, ale především ani konkrétní podporované řetězce a jejich využití. V manuálových stránkách jsem toho moc nenašel a na internetu spíše info o tom, jak se obejít bez příslušných přepínačů. Využíváte to někdo? Víte, kde najít seznam podporovaných hodnot pro příslušné přepínače? Předem díky.


mhi_

Re:Kde najdu konkrétní řetězce pro BFDNAME a BFDARCH?
« Odpověď #1 kdy: 31. 12. 2017, 01:27:23 »
Otazka jake jsou vsechny moznosti mi prijde uplne zbytecna, chtelo by to spis opacne napsat co ma binutils/prekladac delat a na to se da odpovedet jak jej sestavit. Driv jsem prekladal crosscompiler pro ruzne embedded platformy, radove slo tak mozna o 20 gcc-cek.

xdtgj

Re:Kde najdu konkrétní řetězce pro BFDNAME a BFDARCH?
« Odpověď #2 kdy: 31. 12. 2017, 02:37:24 »
Otazka jake jsou vsechny moznosti mi prijde uplne zbytecna, chtelo by to spis opacne napsat co ma binutils/prekladac delat a na to se da odpovedet jak jej sestavit. Driv jsem prekladal crosscompiler pro ruzne embedded platformy, radove slo tak mozna o 20 gcc-cek.

Tak to bude trošku těžší, ale zkusím to.

Nedávno jsem založil vlákno, ve kterém jsem měl problém s programem pro AVR.
https://forum.root.cz/index.php?topic=17158.msg242120#msg242120

Ve finále mi tam pár lidí pomohlo najít některé chyby, které jsem dělal při programování, ale ve výsledku jsem skončil v situaci, kdy mi vývojové prostředí Arduino IDE program překládalo, ale když jsem použil postupy, které jsem našel na internetu, tak jsem se nemohl dostat ke kloudnému výsledku. Po prohlédnutí programu jsem se rozhodl nahrát program z Arduina do pc a disasemblovat jej. Výsledek jsem moc nepobral, ale zřejmá je jedna věc. Program je celý zapsaný v oblasti pro vektory přerušení, takže když se vyvolá přerušení, tak pravděpodobně zabloudí. Bohužel to nemám jak odsimulovat, takže si nejsem jistý, jestli tam není nějaká optimalizace, kterou jsem přehlédl (v asembleru taky nejsem zrovna expert). Pokud ale program dostanu do stavu, kdy jej přeloží Arduino, které nejspíše avr-gcc spolu s dalšími utilitami používá, měl bych se být schopný dostat do stavu, kdy přinutím avr-gcc a další utility, aby mi to přeložily obdobným způsobem. Tak jsem začal zkoumat přepínače a chtěl jsem zadat buď avr-gcc nebo avr-objcopy informaci, pro jaký mikrokontrolér to má přeložit. Zadání architektury AVR totiž pravděpodobně stačit nebude, protože různé mikrokontroléry mají různě velkou oblast pro vektory přerušení (podle velikosti FLASH). Takže jsem začal hledat přepínače, kterými by to mohlo jít a zastavil jsem se na tomhle. Navíc jsem právě zjistil, že program z Arduino IDE má oblast přerušení v asembleru upravenou na jedničku. Nechtěl jsem s tím jít do diskuse teď, protože zatím nemám tuhle hypotézu úplně ověřenou, ale až se mi ručně podaří zajistit, aby příslušný soubor v intelhex formátu odpovídal tomu, co by podle mého úsudku pravděpodobně mělo být v uPC, tak bych věděl více, ale když už mám popsat konkrétní problém, tak tady je...   ...prostě takový jednoduchý program v C od jednoho začátečníka. :-)

Disasemblované obrazy FLASH mikrokontroléru přikládám níže:
Předem se omlouvám za možné chyby, už jsem docela unavený...

xdtgj

Re:Kde najdu konkrétní řetězce pro BFDNAME a BFDARCH?
« Odpověď #3 kdy: 31. 12. 2017, 02:38:12 »
Program zkompilovaný ručně pomocí gcc
Kód: [Vybrat]
Blinking_LED.hex:     file format ihex


Disassembly of section .sec1:

00000000 <.sec1>:
   0: cf 93        push r28
   2: df 93        push r29
   4: cd b7        in r28, 0x3d ; 61
   6: de b7        in r29, 0x3e ; 62
   8: f8 94        cli
   a: 87 e2        ldi r24, 0x27 ; 39
   c: 90 e0        ldi r25, 0x00 ; 0
   e: 2f ef        ldi r18, 0xFF ; 255
  10: fc 01        movw r30, r24
  12: 20 83        st Z, r18
  14: 88 e2        ldi r24, 0x28 ; 40
  16: 90 e0        ldi r25, 0x00 ; 0
  18: fc 01        movw r30, r24
  1a: 10 82        st Z, r1
  1c: 84 e2        ldi r24, 0x24 ; 36
  1e: 90 e0        ldi r25, 0x00 ; 0
  20: 2f ef        ldi r18, 0xFF ; 255
  22: fc 01        movw r30, r24
  24: 20 83        st Z, r18
  26: 85 e2        ldi r24, 0x25 ; 37
  28: 90 e0        ldi r25, 0x00 ; 0
  2a: fc 01        movw r30, r24
  2c: 10 82        st Z, r1
  2e: 80 e8        ldi r24, 0x80 ; 128
  30: 90 e0        ldi r25, 0x00 ; 0
  32: fc 01        movw r30, r24
  34: 10 82        st Z, r1
  36: 81 e8        ldi r24, 0x81 ; 129
  38: 90 e0        ldi r25, 0x00 ; 0
  3a: fc 01        movw r30, r24
  3c: 10 82        st Z, r1
  3e: 88 e8        ldi r24, 0x88 ; 136
  40: 90 e0        ldi r25, 0x00 ; 0
  42: 28 e0        ldi r18, 0x08 ; 8
  44: 3d e3        ldi r19, 0x3D ; 61
  46: fc 01        movw r30, r24
  48: 31 83        std Z+1, r19 ; 0x01
  4a: 20 83        st Z, r18
  4c: 81 e8        ldi r24, 0x81 ; 129
  4e: 90 e0        ldi r25, 0x00 ; 0
  50: 21 e8        ldi r18, 0x81 ; 129
  52: 30 e0        ldi r19, 0x00 ; 0
  54: f9 01        movw r30, r18
  56: 20 81        ld r18, Z
  58: 28 60        ori r18, 0x08 ; 8
  5a: fc 01        movw r30, r24
  5c: 20 83        st Z, r18
  5e: 81 e8        ldi r24, 0x81 ; 129
  60: 90 e0        ldi r25, 0x00 ; 0
  62: 21 e8        ldi r18, 0x81 ; 129
  64: 30 e0        ldi r19, 0x00 ; 0
  66: f9 01        movw r30, r18
  68: 20 81        ld r18, Z
  6a: 21 60        ori r18, 0x01 ; 1
  6c: fc 01        movw r30, r24
  6e: 20 83        st Z, r18
  70: 81 e8        ldi r24, 0x81 ; 129
  72: 90 e0        ldi r25, 0x00 ; 0
  74: 21 e8        ldi r18, 0x81 ; 129
  76: 30 e0        ldi r19, 0x00 ; 0
  78: f9 01        movw r30, r18
  7a: 20 81        ld r18, Z
  7c: 24 60        ori r18, 0x04 ; 4
  7e: fc 01        movw r30, r24
  80: 20 83        st Z, r18
  82: 8f e6        ldi r24, 0x6F ; 111
  84: 90 e0        ldi r25, 0x00 ; 0
  86: 2f e6        ldi r18, 0x6F ; 111
  88: 30 e0        ldi r19, 0x00 ; 0
  8a: f9 01        movw r30, r18
  8c: 20 81        ld r18, Z
  8e: 22 60        ori r18, 0x02 ; 2
  90: fc 01        movw r30, r24
  92: 20 83        st Z, r18
  94: 78 94        sei
  96: ff cf        rjmp .-2      ;  0x96
  98: 1f 92        push r1
  9a: 0f 92        push r0
  9c: 00 90 5f 00 lds r0, 0x005F
  a0: 0f 92        push r0
  a2: 11 24        eor r1, r1
  a4: 2f 93        push r18
  a6: 3f 93        push r19
  a8: 8f 93        push r24
  aa: 9f 93        push r25
  ac: ef 93        push r30
  ae: ff 93        push r31
  b0: cf 93        push r28
  b2: df 93        push r29
  b4: cd b7        in r28, 0x3d ; 61
  b6: de b7        in r29, 0x3e ; 62
  b8: 88 e2        ldi r24, 0x28 ; 40
  ba: 90 e0        ldi r25, 0x00 ; 0
  bc: 28 e2        ldi r18, 0x28 ; 40
  be: 30 e0        ldi r19, 0x00 ; 0
  c0: f9 01        movw r30, r18
  c2: 30 81        ld r19, Z
  c4: 24 e0        ldi r18, 0x04 ; 4
  c6: 23 27        eor r18, r19
  c8: fc 01        movw r30, r24
  ca: 20 83        st Z, r18
  cc: df 91        pop r29
  ce: cf 91        pop r28
  d0: ff 91        pop r31
  d2: ef 91        pop r30
  d4: 9f 91        pop r25
  d6: 8f 91        pop r24
  d8: 3f 91        pop r19
  da: 2f 91        pop r18
  dc: 0f 90        pop r0
  de: 00 92 5f 00 sts 0x005F, r0
  e2: 0f 90        pop r0
  e4: 1f 90        pop r1
  e6: 18 95        reti


xdtgj

Re:Kde najdu konkrétní řetězce pro BFDNAME a BFDARCH?
« Odpověď #4 kdy: 31. 12. 2017, 02:41:02 »
Program zkompilovaný s pomocí Arduino IDE
Kód: [Vybrat]

ArduinoIDEIntelHex.hex:     file format ihex


Disassembly of section .sec1:

00000000 <.sec1>:
       0: 0c 94 34 00 jmp 0x68 ;  0x68
       4: 0c 94 46 00 jmp 0x8c ;  0x8c
       8: 0c 94 46 00 jmp 0x8c ;  0x8c
       c: 0c 94 46 00 jmp 0x8c ;  0x8c
      10: 0c 94 46 00 jmp 0x8c ;  0x8c
      14: 0c 94 46 00 jmp 0x8c ;  0x8c
      18: 0c 94 46 00 jmp 0x8c ;  0x8c
      1c: 0c 94 46 00 jmp 0x8c ;  0x8c
      20: 0c 94 46 00 jmp 0x8c ;  0x8c
      24: 0c 94 46 00 jmp 0x8c ;  0x8c
      28: 0c 94 46 00 jmp 0x8c ;  0x8c
      2c: 0c 94 92 00 jmp 0x124 ;  0x124
      30: 0c 94 46 00 jmp 0x8c ;  0x8c
      34: 0c 94 46 00 jmp 0x8c ;  0x8c
      38: 0c 94 46 00 jmp 0x8c ;  0x8c
      3c: 0c 94 46 00 jmp 0x8c ;  0x8c
      40: 0c 94 48 00 jmp 0x90 ;  0x90
      44: 0c 94 46 00 jmp 0x8c ;  0x8c
      48: 0c 94 46 00 jmp 0x8c ;  0x8c
      4c: 0c 94 46 00 jmp 0x8c ;  0x8c
      50: 0c 94 46 00 jmp 0x8c ;  0x8c
      54: 0c 94 46 00 jmp 0x8c ;  0x8c
      58: 0c 94 46 00 jmp 0x8c ;  0x8c
      5c: 0c 94 46 00 jmp 0x8c ;  0x8c
      60: 0c 94 46 00 jmp 0x8c ;  0x8c
      64: 0c 94 46 00 jmp 0x8c ;  0x8c
      68: 11 24        eor r1, r1
      6a: 1f be        out 0x3f, r1 ; 63
      6c: cf ef        ldi r28, 0xFF ; 255
      6e: d8 e0        ldi r29, 0x08 ; 8
      70: de bf        out 0x3e, r29 ; 62
      72: cd bf        out 0x3d, r28 ; 61
      74: 21 e0        ldi r18, 0x01 ; 1
      76: a0 e0        ldi r26, 0x00 ; 0
      78: b1 e0        ldi r27, 0x01 ; 1
      7a: 01 c0        rjmp .+2      ;  0x7e
      7c: 1d 92        st X+, r1
      7e: a9 30        cpi r26, 0x09 ; 9
      80: b2 07        cpc r27, r18
      82: e1 f7        brne .-8      ;  0x7c
      84: 0e 94 a4 00 call 0x148 ;  0x148
      88: 0c 94 17 01 jmp 0x22e ;  0x22e
      8c: 0c 94 00 00 jmp 0 ;  0x0
      90: 1f 92        push r1
      92: 0f 92        push r0
      94: 0f b6        in r0, 0x3f ; 63
      96: 0f 92        push r0
      98: 11 24        eor r1, r1
      9a: 2f 93        push r18
      9c: 3f 93        push r19
      9e: 8f 93        push r24
      a0: 9f 93        push r25
      a2: af 93        push r26
      a4: bf 93        push r27
      a6: 80 91 05 01 lds r24, 0x0105
      aa: 90 91 06 01 lds r25, 0x0106
      ae: a0 91 07 01 lds r26, 0x0107
      b2: b0 91 08 01 lds r27, 0x0108
 


 ...Více kódu mě to bohužel nenechá vložit, ale obecně pro ilustraci problému by to mělo stačit...


Jenda

Re:Kde najdu konkrétní řetězce pro BFDNAME a BFDARCH?
« Odpověď #5 kdy: 31. 12. 2017, 08:36:50 »
Jdeš na to nějak strašně složitě.

ale ve výsledku jsem skončil v situaci, kdy mi vývojové prostředí Arduino IDE program překládalo, ale když jsem použil postupy, které jsem našel na internetu, tak jsem se nemohl dostat ke kloudnému výsledku. Po prohlédnutí programu jsem se rozhodl nahrát program z Arduina do pc a disasemblovat jej.

arduino-makefile, případně se dá v nastavení zaškrtnout, aby vypisoval, co dělá

Tak jsem začal zkoumat přepínače a chtěl jsem zadat buď avr-gcc nebo avr-objcopy informaci, pro jaký mikrokontrolér to má přeložit.

-mmcu=

Program je celý zapsaný v oblasti pro vektory přerušení, takže když se vyvolá přerušení, tak pravděpodobně zabloudí.

Právě naopak, co, co sem dáváš jako ukázku kódu z Arduina, je přesně to, co je v kapitole 16.3. manuálu k AtMega 48/88/168PA.

Nevím, posledně jsem psal pro tyhle věci bootloader a prostě jsem si vygooglil makefile.

xdtgj

Re:Kde najdu konkrétní řetězce pro BFDNAME a BFDARCH?
« Odpověď #6 kdy: 31. 12. 2017, 11:17:25 »
Program je celý zapsaný v oblasti pro vektory přerušení, takže když se vyvolá přerušení, tak pravděpodobně zabloudí.

Právě naopak, co, co sem dáváš jako ukázku kódu z Arduina, je přesně to, co je v kapitole 16.3. manuálu k AtMega 48/88/168PA.

Nevím, posledně jsem psal pro tyhle věci bootloader a prostě jsem si vygooglil makefile.
[/quote]

Omlouvám se, špatně jsem se ráno vyjádřil. Programuji Arduino více méně s pomocí dvou způsobů. Přes avr-gcc a s pomocí arduina. Avr-gcc nefunguje, Arduino IDE bez problému. Přepínač mmcu jsem zkoušel s položkou avr5, ale beze změny. Při zadání atmega328p mi to vyhodilo warning, tak jsem ani nepokračoval, ale určitě se na to ještě jednou mrknu.

xdtgj

Re:Kde najdu konkrétní řetězce pro BFDNAME a BFDARCH?
« Odpověď #7 kdy: 31. 12. 2017, 11:23:55 »
Tak ten přepínač s položkou atmega328p nakonec funguje. Nevím, proč to nefunguje s hodnotou avr5, obzvlášť, když musím definovat uPC v programu, ale jsem rád, že mi to v C konečně bliká.

Díky za radu!!!