|
|
 |
Ответов
|
Sep 14 2015, 06:17
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 3-09-11
Из: Минск
Пользователь №: 66 982

|
Цитата(Сергей Борщ @ Sep 11 2015, 17:53)  Это ошибка в линкере. По-хорошему надо писать сообщение об ошибке его авторам. Я на такое не нарывлася. Приложите весь проект в архиве. Я тут поигрался немного с форматом строчки, о точнее с содержимым строки name_fw[]. И заметил такую закономерность. Что если в строке четное количество символов, то проект соберется и выдаст Warning на вектора прерываний. А если в строке не четное количество символов, то все соберется без предупреждений.
|
|
|
|
|
Sep 14 2015, 07:55
|

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

|
Цитата(Twin_by @ Sep 14 2015, 09:17)  А если в строке не четное количество символов, то все соберется без предупреждений. Попробуйте тогда сделать так: Код *(.text) /*тут где-то еще должно быть*/ *(.text.*) KEEP(*(.fw_version)) . = ALIGN(2);
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 14 2015, 11:30
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 3-09-11
Из: Минск
Пользователь №: 66 982

|
Цитата(Сергей Борщ @ Sep 14 2015, 10:55)  Попробуйте тогда сделать так: Код *(.text) /*тут где-то еще должно быть*/ *(.text.*) KEEP(*(.fw_version)) . = ALIGN(2); Помогло. Сейчас собирается без предупреждений. И создается два пустых байта после строки содержащей четное количество символов, и один байт если строка содержит не четное количество символов. Но была другая большая проблема. После прошивки микроконтроллера, он отказывался обрабатывать прерывания. Поэтому Код *(.fw_version) KEEP(*(.fw_version)) . = ALIGN(2); перенес из начала секции .text чуть ниже после *(.vectors) KEEP(*(.vectors)). И вроде работает, прерывания и АЦП обрабатывает. Сейчас секция .text приняла следующий вид CODE .text : { *(.vectors) KEEP(*(.vectors)) *(.fw_version) KEEP(*(.fw_version)) . = ALIGN(2); /* 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 = .; *(.ctors) __ctors_end = .; __dtors_start = .; *(.dtors) __dtors_end = .; KEEP(SORT(*)(.ctors)) KEEP(SORT(*)(.dtors)) /* From this point on, we don't bother about wether the insns are below or above the 16 bits boundary. */ *(.init0) /* Start here after reset. */ KEEP (*(.init0)) *(.init1) KEEP (*(.init1)) *(.init2) /* Clear __zero_reg__, set up stack pointer. */ KEEP (*(.init2)) *(.init3) KEEP (*(.init3)) *(.init4) /* Initialize data and BSS. */ KEEP (*(.init4)) *(.init5) KEEP (*(.init5)) *(.init6) /* C++ constructors. */ KEEP (*(.init6)) *(.init7) KEEP (*(.init7)) *(.init8) KEEP (*(.init8)) *(.init9) /* Call main(). */ KEEP (*(.init9)) *(.text) . = ALIGN(2); *(.text.*) . = ALIGN(2); *(.fini9) /* _exit() starts here. */ KEEP (*(.fini9)) *(.fini8) KEEP (*(.fini8)) *(.fini7) KEEP (*(.fini7)) *(.fini6) /* C++ destructors. */ KEEP (*(.fini6)) *(.fini5) KEEP (*(.fini5)) *(.fini4) KEEP (*(.fini4)) *(.fini3) KEEP (*(.fini3)) *(.fini2) KEEP (*(.fini2)) *(.fini1) KEEP (*(.fini1)) *(.fini0) /* Infinite loop after program termination. */ KEEP (*(.fini0)) _etext = .; } > text
Сообщение отредактировал IgorKossak - Sep 14 2015, 13:51
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
|
|
|
|
Сообщений в этой теме
Twin_by Прописывание версии ПО (прошивки) Sep 7 2015, 08:04 KSN Попробуйте объявить через __root Sep 7 2015, 08:05 V_G Пишу в AVRStudio на ассемблере.
Вот такая строка в... Sep 7 2015, 08:24  Kovrov Цитата(V_G @ Sep 7 2015, 12:24) Пишу в AV... Sep 9 2015, 08:58 pyzhman /* Turn optimization off, for testing purposes */
... Sep 7 2015, 08:33 ЯadiatoR Да что вы мучаетесь? напишите const volatile и буд... Sep 7 2015, 08:45 Spider Цитата(ЯadiatoR @ Sep 7 2015, 11:45) Да ч... Sep 7 2015, 08:53 Twin_by Цитата(ЯadiatoR @ Sep 7 2015, 11:45) Да ч... Sep 7 2015, 10:05  Jury093 Цитата(Twin_by @ Sep 7 2015, 13:05) Попро... Sep 7 2015, 13:10 EvgenWL Twin_by, а как Вы на работающем устройстве определ... Sep 7 2015, 09:18 esaulenka Компилятор-то какой?
Для gcc можно использовать
... Sep 7 2015, 13:27 Twin_by Вроде получилось. И получилось двумя способами: сп... Sep 8 2015, 10:57 Сергей Борщ Цитата(Twin_by @ Sep 8 2015, 13:57) Поэто... Sep 9 2015, 12:00  Twin_by Цитата(Сергей Борщ @ Sep 9 2015, 15:00) И... Sep 10 2015, 12:37   demiurg_spb Вы собственно не применили атрибут.
Кодconst char ... Sep 10 2015, 12:55    Twin_by Цитата(demiurg_spb @ Sep 10 2015, 15:55) ... Sep 10 2015, 13:47     Сергей Борщ Цитата(Twin_by @ Sep 10 2015, 16:47) Тепе... Sep 10 2015, 19:05      Twin_by Цитата(Сергей Борщ @ Sep 10 2015, 22:05) ... Sep 11 2015, 06:43       Сергей Борщ Цитата(Twin_by @ Sep 11 2015, 09:43) А ка... Sep 11 2015, 07:16        Twin_by Цитата(Сергей Борщ @ Sep 11 2015, 10:16) ... Sep 11 2015, 13:05         Сергей Борщ Цитата(Twin_by @ Sep 11 2015, 16:05) Код*... Sep 11 2015, 13:32          Twin_by Цитата(Сергей Борщ @ Sep 11 2015, 16:32) ... Sep 11 2015, 14:03 V_G Уже не помню. Лет 15 назад, когда начинал работать... Sep 9 2015, 11:27 Spider Раз уж такая пьянка, а не расскажете как заставить... Sep 9 2015, 13:04 demiurg_spb Цитата(Spider @ Sep 9 2015, 16:04) Раз уж... Sep 9 2015, 13:38  msalov Цитата(demiurg_spb @ Sep 9 2015, 16:38) Ц... Sep 10 2015, 14:00    Сергей Борщ Цитата(Twin_by @ Sep 14 2015, 14:30) Помо... Sep 14 2015, 12:05     Twin_by Цитата(Сергей Борщ @ Sep 14 2015, 15:05) ... Sep 14 2015, 12:53      Сергей Борщ Цитата(Twin_by @ Sep 14 2015, 15:53) А я ... Sep 14 2015, 14:11
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|