|
WinAVR-20100110, Пишем отзывы сюда |
|
|
|
 |
Ответов
|
Feb 17 2010, 15:39
|
Знающий
   
Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454

|
Друг спросил как разместить данные во флеш поопределенному адресу. Сделал как по ссылке. http://8515.avrfreaks.net/index.php?name=P...ic&p=589365WinAVR-20100110. Судя по листингу программа обращается к данным как задано Код const uint8_t part_number __attribute__ ((section (".part_number")))='A';
i = pgm_read_byte(&part_number); 2ee: e0 ef ldi r30, 0xF0; 240 2f0: ff e3 ldi r31, 0x3F; 63 2f2: e4 91 lpm r30, Z+ Но ни в HEX ни в bin файле нету данных. Обычное объявление переменных в памяти программ работает. Совместить два аттрибута у меня не получилось.
|
|
|
|
|
Feb 17 2010, 17:50
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(misyachniy @ Feb 17 2010, 17:39)  Но ни в HEX ни в bin файле нету данных. попробйте обозвать секцию .text.partnumber или .progmem.partnumber Я указываю секцию в скрипте линкера, --section-start не пользовался.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 18 2010, 09:49
|
Знающий
   
Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454

|
Цитата(Сергей Борщ @ Feb 17 2010, 19:50)  попробйте обозвать секцию .text.partnumber или .progmem.partnumber Я указываю секцию в скрипте линкера, --section-start не пользовался. Переобъявил, секция попала сразу за таблицей векторов. Как в скрипте линкера без --section-start настраивать я не умею. Код код const uint8_t part_number __attribute__ ((section (".progmem.part_number")))='A'; const unsigned long serial_number __attribute__ ((section (".progmem.serial_number"))) = 0x12345678;
маке LDFLAGS += -Wl,--section-start=.progmem.part_number=$(PART_NUMBER_ADDRESS) LDFLAGS += -Wl,--section-start=.progmem.serial_number=$(SERIAL_NUMBER_ADDRESS)
HEX :100050000C9458 0041 78563412 456E7465722063D2
LST 00000054 <part_number>: 54: 41 A
i = pgm_read_byte(&part_number); 2f4: e4 e5 ldi r30, 0x54; 84 2f6: f0 e0 ldi r31, 0x00; 0 2f8: e4 91 lpm r30, Z+
|
|
|
|
|
Feb 18 2010, 11:32
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(misyachniy @ Feb 18 2010, 11:49)  Переобъявил, секция попала сразу за таблицей векторов. "Ну тогда не знаю  " Цитата(misyachniy @ Feb 18 2010, 11:49)  Как в скрипте линкера без --section-start настраивать я не умею. Идете в WinAVR/avr/lib/ldscripts, берете там скрипт для своего семейства, копируете в проект, правите, добавляете к ключам линкера LDFLAGS += -Wl,-T,<имя скрипта> и получаете полный контроль над адресным пространством. Вот пример для загрузчика m88 (регион и секция serial_no): CODE /* ATmega88 bootloader linker script */ OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr") OUTPUT_ARCH(avr:4) MEMORY { application (rx) : ORIGIN = 0, LENGTH = 7K bootloader (rx) : ORIGIN = 7K, LENGTH = 1K - 4 serial_no (rx) : ORIGIN = 8K-4, LENGTH = 4 ram (rw!x) : ORIGIN = 0x800100, LENGTH = 1K eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 512 } SECTIONS { /* Internal text space or external memory. */ .app : { __app_start = . ; /* reserve space */ . = 7K; __app_end = . ; } > application __app_len = . - __app_start; .text : { KEEP(*(.vectors)) /* For data that needs to reside in the lower 64k of progmem. */ *(.progmem.gcc*) *(.progmem*) . = ALIGN(2); __trampolines_start = . ; /* The jump trampolines for the 16-bit limited relocs will reside here. */ *(.trampolines) *(.trampolines*) __trampolines_end = . ; /* For future tablejump instruction arrays for 3 byte pc devices. We don't relax jump/call instructions within these sections. */ *(.jumptables) *(.jumptables*) /* For code that needs to reside in the lower 128k progmem. */ *(.lowtext) *(.lowtext*) __ctors_start = . ; KEEP(SORT(*)(.ctors)) __ctors_end = . ; __dtors_start = . ; KEEP(SORT(*)(.dtors)) __dtors_end = . ; /* From this point on, we don't bother about wether the insns are below or above the 16 bits boundary. */ KEEP (*(.init0)) /* Start here after reset. */ KEEP (*(.init1)) KEEP (*(.init2)) /* Clear __zero_reg__, set up stack pointer. */ KEEP (*(.init3)) KEEP (*(.init4)) /* Initialize data and BSS. */ KEEP (*(.init5)) KEEP (*(.init6)) /* C++ constructors. */ KEEP (*(.init7)) KEEP (*(.init8)) KEEP (*(.init9)) /* Call main(). */ *(.text) . = ALIGN(2); *(.text.*) . = ALIGN(2); KEEP (*(.fini9)) /* _exit() starts here. */ KEEP (*(.fini8)) KEEP (*(.fini7)) KEEP (*(.fini6)) /* C++ destructors. */ KEEP (*(.fini5)) KEEP (*(.fini4)) KEEP (*(.fini3)) KEEP (*(.fini2)) KEEP (*(.fini1)) KEEP (*(.fini0)) /* Infinite loop after program termination. */ _etext = . ; } > bootloader
.data : { PROVIDE (__data_start = .) ; *(.gnu.linkonce.d*) *(.rodata) *(.rodata*) *(.data) *(.data*) . = ALIGN(2); _edata = . ; PROVIDE (__data_end = .) ; } > ram AT > bootloader
.bss : { PROVIDE (__bss_start = .) ; *(.bss) *(.bss*) *(COMMON) PROVIDE (__bss_end = .) ; } > ram __data_load_start = LOADADDR(.data); __data_load_end = __data_load_start + SIZEOF(.data); .serial_no : { KEEP(*(.serial_no)) } > serial_no
/* Global data not cleared after reset. */ .noinit : { PROVIDE (__noinit_start = .) ; *(.noinit*) PROVIDE (__noinit_end = .) ; _end = . ; PROVIDE (__heap_start = .) ; } > ram
.eeprom : { *(.eeprom*) __eeprom_end = . ; } > eeprom
/* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 : { *(.comment) }
/* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1 */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2 */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2 */ .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } } И еще - мне показалось удобнее хранить не константу серийного номера, а функцию, возвращающую серийный номер. А уже в код самой функции на этапе программирования подставлять коды LDI с серийным номером (avreal умеет). Это позволяет разместить такой серийник в защищенном от чтения по LPM загрузчике и тратить на чтение один ( R )CALL вместо сохранения Z, его загрузки, LPM, восстановления Z: Код __attribute__((section(".serial_no"), noinline)) uint8_t serial_no() { return 0; }
177 .section .serial_no,"ax",@progbits 178 .global serial_no 180 serial_no: 181 .LFB15: 182 .LSM26: 183 /* prologue: function */ 184 /* frame size = 0 */ 185 .LSM27: 186 0000 80E0 ldi r24,lo8(0) 187 /* epilogue start */ 188 0002 0895 ret
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 19 2010, 14:25
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Забавный прикол: Код uint16_t x; .... if ((x&1)==0) {...} // случай 1 if (!(x&1)) {...} // случай 2 Получаем листинг: Код // случай 1: 1fd3c: 20 fd sbrc r18, 0 1fd3e: 03 c0 rjmp .+6 ; 0x1fd46 <main+0x4e4>
// случай 2 1fd40: c9 01 movw r24, r18 1fd42: 81 70 andi r24, 0x01; 1 1fd44: 90 70 andi r25, 0x00; 0 1fd46: 89 2b or r24, r25 1fd48: 19 f4 brne .+6 ; 0x1fd50 <main+0x4ee>
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
Сообщений в этой теме
_Pasha WinAVR-20100110 Jan 16 2010, 00:18 kurtis Цитата(_Pasha @ Jan 16 2010, 02:18) Слито... Jan 16 2010, 10:30 Petka Цитата(_Pasha @ Jan 16 2010, 03:18) ...
A... Jan 16 2010, 10:31 SysRq ЦитатаAVR32 GNU toolchain
Splint 3.1.2 Splint is... Jan 16 2010, 11:26 zltigo Цитата(SysRq @ Jan 16 2010, 14:26) 200812... Jan 16 2010, 11:28  SysRq Цитата(zltigo @ Jan 16 2010, 14:28) А опт... Jan 16 2010, 11:38 ARV я тоже скачал официальный релиз и, как обычно (за ... Jan 16 2010, 14:32 SysRq Цитата(ARV @ Jan 16 2010, 17:32) ...разме... Jan 16 2010, 15:00 demiurg_spb Цитата(_Pasha @ Jan 16 2010, 03:18) Собсн... Jan 16 2010, 19:12 ARV а как вы поступаете: ставите сразу несколько копий... Jan 16 2010, 20:30 Сергей Борщ Цитата(ARV @ Jan 16 2010, 22:30) а как вы... Jan 16 2010, 22:36  Сергей Борщ Цитата(Сергей Борщ @ Jan 17 2010, 00:36) ... Jan 21 2010, 14:34 ReAl Цитата(ARV @ Jan 16 2010, 22:30) а как вы... Jan 17 2010, 08:25 _Pasha Цитата(ARV @ Jan 17 2010, 00:30) а как вы... Jan 17 2010, 05:55 Сергей Борщ Цитата(_Pasha @ Jan 17 2010, 07:55) Непри... Jan 17 2010, 09:19  Petka Цитата(Сергей Борщ @ Jan 17 2010, 12:19) ... Jan 17 2010, 10:00   ReAl Цитата(Petka @ Jan 17 2010, 12:00) Давно ... Jan 17 2010, 15:35   demiurg_spb Цитата(Petka @ Jan 17 2010, 13:00) Давно ... Jan 17 2010, 21:28    ReAl Цитата(demiurg_spb @ Jan 17 2010, 23:28) ... Jan 17 2010, 22:38  demiurg_spb Цитата(Сергей Борщ @ Jan 17 2010, 01:36) ... Jan 18 2010, 10:13   Сергей Борщ По msys - взять с http://sourceforge.net/projects/... Jan 18 2010, 11:54    demiurg_spb Цитата(Сергей Борщ @ Jan 18 2010, 14:54) ... Jan 18 2010, 13:07     Сергей Борщ Проинсталлил "честно".
Оно копирует кучу... Jan 18 2010, 14:54 Genadi Zawidowski Было...
ЦитатаAVR Memory Usage
----------------
De... Jan 18 2010, 01:13 _Diman_ Я так приспособился разные версии проверять. Запу... Jan 19 2010, 10:37 _Pasha Цитата(_Diman_ @ Jan 19 2010, 13:37) http... Jan 19 2010, 11:05 Зайцев Иван А кто нибуть использовал уже avr32-gcc?
Если да то... Jan 19 2010, 11:17 klen Цитата(Зайцев Иван @ Jan 19 2010, 14:17) ... Jan 19 2010, 20:44  Зайцев Иван Цитата(klen @ Jan 20 2010, 01:44) а что т... Jan 20 2010, 03:14 Cyber_RAT http://sourceforge.net/projects/winavr/files/
опят... Jan 20 2010, 21:29 SysRq Цитата(Cyber_RAT @ Jan 21 2010, 00:29) оп... Jan 20 2010, 22:23  _Pasha Цитата(SysRq @ Jan 21 2010, 02:23) убраны... Jan 21 2010, 03:59 Vova75 Ошибку в прологе/эпилоге при использовании ISR(xx... Jan 27 2010, 12:16 ReAl Однако...
То-то я чуйкой какой-то ("шестое ч... Feb 4 2010, 21:24 _Pasha Цитата(ReAl @ Feb 5 2010, 01:24) Однако..... Feb 8 2010, 12:59  _Pasha Цитата(_Pasha @ Feb 8 2010, 16:59) Однако... Feb 12 2010, 17:49   ReAl Цитата(_Pasha @ Feb 12 2010, 19:49) Еще п... Mar 20 2010, 13:24 Genadi Zawidowski ЦитатаCode:
#include <avr/io.h>
volatile ui... Feb 8 2010, 06:04 ReAl Цитата(Genadi Zawidowski @ Feb 8 2010, 08... Feb 8 2010, 10:48 _Pasha Ау, я что, в палате №6? Не спим!
Нашел серьезн... Feb 17 2010, 06:59 ReAl Цитата(_Pasha @ Feb 17 2010, 08:59) Попыт... Feb 17 2010, 19:53  _Pasha Цитата(ReAl @ Feb 17 2010, 22:53) Мне не ... Feb 20 2010, 08:06    _Pasha Цитата(Сергей Борщ @ Feb 18 2010, 15:32) ... Mar 16 2010, 18:05     Сергей Борщ Цитата(_Pasha @ Mar 16 2010, 20:05) т.к. ... Mar 16 2010, 23:25      _Pasha Цитата(Сергей Борщ @ Mar 17 2010, 03:25) ... Mar 17 2010, 05:39 SysRq Цитата(_Pasha @ Feb 17 2010, 09:59) Нашел... Feb 17 2010, 19:45 ZiB аналогично, не удалось воссоздать ошибку.
проверил... Feb 18 2010, 06:48 ARV а я вот не увидел в этой версии компилятора опции ... Mar 25 2010, 08:45 Сергей Борщ Цитата(ARV @ Mar 25 2010, 10:45) или я ку... Mar 25 2010, 08:56 ARV во блин... странно... вчера вроде не получалось об... Mar 25 2010, 09:17 Клим Возможно уже такой вопрос был, сходу не нашел.
WIN... Aug 19 2010, 13:22 SysRq Цитата(Клим @ Aug 19 2010, 17:22) Каким о... Aug 19 2010, 13:46 Клим Цитата(SysRq @ Aug 19 2010, 16:46) Исполь... Aug 19 2010, 14:40  _Pasha Цитата(Клим @ Aug 19 2010, 18:40) call ma... Aug 20 2010, 15:53 _Pasha Кто-нибудь может объяснить феномен. -Os
CODE
#inc... Feb 8 2011, 07:48 SysRq Цитата(_Pasha @ Feb 8 2011, 10:48) Что же... Feb 8 2011, 09:37  _Pasha Цитата(SysRq @ Feb 8 2011, 12:37) Глобаль... Feb 8 2011, 10:55   AHTOXA Цитата(_Pasha @ Feb 8 2011, 15:55) Кого? ... Feb 8 2011, 11:01  demiurg_spb Цитата(SysRq @ Feb 8 2011, 12:37) Глобаль... Feb 8 2011, 11:13   _Pasha Цитата(demiurg_spb @ Feb 8 2011, 14:13) А... Feb 8 2011, 11:19    demiurg_spb Да ладно! Он честно ругнулся - вы игнорировали... Feb 8 2011, 11:41     _Pasha Цитата(demiurg_spb @ Feb 8 2011, 14:32) т... Feb 8 2011, 11:41      demiurg_spb что сказать, переходите на версию посвежее ...
пов... Feb 8 2011, 11:48       _Pasha Цитата(demiurg_spb @ Feb 8 2011, 14:48) н... Feb 8 2011, 11:50        demiurg_spb Цитата(_Pasha @ Feb 8 2011, 14:50) Это кл... Feb 8 2011, 11:57         demiurg_spb Цитата(demiurg_spb @ Feb 8 2011, 14:57) .... Feb 17 2011, 18:56    AHTOXA Цитата(_Pasha @ Feb 8 2011, 16:19) Вот... Feb 8 2011, 12:05 ARV как заставить компилятор помещать в elf-файл полны... Mar 23 2011, 18:30 SysRq Спасите мудрым советом, ибо не знаю куда копать
... Mar 31 2011, 09:31 Сергей Борщ QUOTE (SysRq @ Mar 31 2011, 12:31) WinAVR... Apr 1 2011, 09:03 SysRq Цитата(Сергей Борщ @ Apr 1 2011, 13:03) .... Apr 1 2011, 12:02 halfdoom Попросил заказчик использовать gcc-4.5.1 (тот, что... Aug 5 2012, 07:44 _Pasha Цитата(halfdoom @ Aug 5 2012, 10:44) Попр... Aug 5 2012, 12:56 Genadi Zawidowski Цитата(halfdoom @ Aug 5 2012, 11:44) Попр... Aug 5 2012, 13:57 halfdoom В общем, нашел основной источник роста: излишне ... Aug 5 2012, 15:11 Genadi Zawidowski Цитата(halfdoom @ Aug 5 2012, 19:11) В об... Aug 7 2012, 23:03  halfdoom Цитата(Genadi Zawidowski @ Aug 8 2012, 02... Aug 8 2012, 14:30   demiurg_spb Цитата(halfdoom @ Aug 8 2012, 18:30) Може... Aug 9 2012, 05:10    Genadi Zawidowski Цитата(demiurg_spb @ Aug 9 2012, 09:10) .... Aug 9 2012, 07:53     demiurg_spb думаю что где-то так
Код#define flash const __flas... Aug 9 2012, 08:28      Genadi Zawidowski Цитата(demiurg_spb @ Aug 9 2012, 12:28) C... Aug 9 2012, 08:39       demiurg_spb Цитата(Genadi Zawidowski @ Aug 9 2012, 12... Aug 9 2012, 08:45    halfdoom Цитата(demiurg_spb @ Aug 9 2012, 08:10) Н... Aug 10 2012, 04:45 _Pasha Цитата-mfaster-structs
With -mfaster-structs, the ... Aug 5 2012, 15:46 halfdoom Цитата(_Pasha @ Aug 5 2012, 18:46) Спецом... Aug 5 2012, 16:26  demiurg_spb Цитата(halfdoom @ Aug 5 2012, 20:26) Уже ... Aug 8 2012, 05:50   ReAl Цитата(demiurg_spb @ Aug 8 2012, 08:50) О... Aug 8 2012, 07:35    demiurg_spb Ни чем не могу помочь... Разве только под win:
htt... Aug 8 2012, 07:50 _Pasha Собсна из 8-битов одни АВРки
SDCC чистой культуро... Aug 5 2012, 16:32 ReAl (сверните кто-нибудь строку в 78 сообщении, а то о... Aug 9 2012, 06:23 Genadi Zawidowski Использую вот отсюда
http://electronix.ru/forum/in... Aug 9 2012, 09:04 demiurg_spb Цитата(Genadi Zawidowski @ Aug 9 2012, 13... Aug 9 2012, 09:18  Genadi Zawidowski Это что-то!
На 32-х килобайтном проекте получи... Aug 9 2012, 19:25 Genadi Zawidowski Нашёл ещё одну сборку - уже с инсталлятором -
htt... Aug 10 2012, 07:20 demiurg_spb Я её тоже находил, но и также находил инфу что с н... Aug 10 2012, 07:24
2 страниц
1 2 >
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|