реклама на сайте
подробности

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> Мой первый блин), Перехожу на Си
SysRq
сообщение Dec 4 2009, 16:36
Сообщение #46


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



http://www.nongnu.org/avr-libc/user-manual...#faq_reloc_code
Go to the top of the page
 
+Quote Post
novlev
сообщение Dec 11 2009, 12:31
Сообщение #47


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645



Спасибо, я таким образом указывал адрес для кода программы, т к бутлоадер писал. А как таким же образом переместить просто несколько строковых констант?
Go to the top of the page
 
+Quote Post
SysRq
сообщение Dec 11 2009, 13:35
Сообщение #48


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(novlev @ Dec 11 2009, 15:31) *
А как таким же образом переместить просто несколько строковых констант?
Так же. Давать вместо .bootloader свои имена (.mystring1), со своими адресами, и использовать в программе.
Go to the top of the page
 
+Quote Post
novlev
сообщение Dec 11 2009, 13:41
Сообщение #49


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645



Спасибо, получилось. В программе это выглядит следующим образом - volatile unsigned char bar[] __attribute__ ((section (".myInfo"))) = "Это должно жить по адресу 0xDEAD";, а для линкера указал - LDFLAGS += -Wl,--section-start=.myInfo=0x1DEAD -Wl,-Map=gcc_tst.map.
В хексе имеем:
Код
:10DEAD00DDF2EE20E4EEEBE6EDEE20E6E8F2FC200E
:10DEBD00EFEE20E0E4F0E5F1F32030784445414405

Огромное спасибо.

Сообщение отредактировал Omen_13 - Dec 12 2009, 01:48
Причина редактирования: Оформление
Go to the top of the page
 
+Quote Post
SysRq
сообщение Dec 11 2009, 14:51
Сообщение #50


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Если:
Цитата(novlev @ Dec 11 2009, 16:41) *
char bar[] __attribute__ ((section (".myInfo"))) = "Это должно жить по адресу 0xDEAD";
Но:
Цитата(novlev @ Dec 11 2009, 16:41) *
LDFLAGS += -Wl,--section-start=.myInfo=0x1DEAD
поселит строку по дресу однако 0x1DEAD.

Не срастается у увас что-то желание с действительностью rolleyes.gif
Go to the top of the page
 
+Quote Post
novlev
сообщение Dec 14 2009, 06:13
Сообщение #51


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645



А учитываются только 4 младших, в хексе больше и не отведено под адрес, все что перед DEAD(взято просто для наглядности) игнорируется. Поэкспериментировал - результат тот же.

DEAD:
:10DEAD00DDF2EE20E4EEEBE6EDEE20E6E8F2FC200E
:10DEBD00EFEE20E0E4F0E5F1F32030784445414405
:01DECD000054

10DEAD:
:10DEAD00DDF2EE20E4EEEBE6EDEE20E6E8F2FC200E
:10DEBD00EFEE20E0E4F0E5F1F32030784445414405
:01DECD000054

Сообщение отредактировал novlev - Dec 14 2009, 06:19
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 14 2009, 07:55
Сообщение #52


Гуру
******

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



Цитата(novlev @ Dec 14 2009, 08:13) *
А учитываются только 4 младших, в хексе больше и не отведено под адрес
Вообще-то в Intel-HEX под адрес отведено 32 бита. 16 бит отведено под смещение.
Цитата(novlev @ Dec 14 2009, 08:13) *
, все что перед DEAD(взято просто для наглядности) игнорируется.
Вами - возможно и игнорируется. Но любая программа, корректно читающая IntelHEX не должна игнорировать записи типа "Extended segment address" и "Extended linear address". Именно в эти записи и попадают старшие биты.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
novlev
сообщение Dec 14 2009, 11:49
Сообщение #53


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645



Я просто пользовался описанием из pdf на контроллер ADuC, видимо там просто упрощенно была описана структура. Просто обозначена последовательность и под адрес загрузки было выделено 2 байта. Хм.. вот в файле map указано верно - Address of section .myInfo set to 0x10dead
(я и указывал 0х10dead), и далее
.myInfo 0x0010dead 0x21
.myInfo 0x0010dead 0x21 gcc_tst.o
0x0010dead bar
Так а почему в самом хексе всегда одинаково? Просто мне важен сам факт наличия информации по конкретному адресу ,просто для технических целей. Мой прошивальщик может ее и не записывать, но хочется по человечески уже сделать все.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 14 2009, 13:08
Сообщение #54


Гуру
******

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



Цитата(novlev @ Dec 14 2009, 13:49) *
Так а почему в самом хексе всегда одинаково?
А в нем точно нет строчек, начинающихся с :02000004 или :02000002?
Тогда показывайте команду, которой avr-objcopy делает из вашего .elf этот .hex


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
novlev
сообщение Dec 14 2009, 13:46
Сообщение #55


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645



Цитата(Сергей Борщ @ Dec 14 2009, 16:08) *
А в нем точно нет строчек, начинающихся с :02000004 или :02000002?


есть строчки, протупил я серьезно...
:0A070E00101234567890000000002D
:020000040010EA
:10DEAD00DDF2EE20E4EEEBE6EDEE20E6E8F2FC200E
:10DEBD00EFEE20E0E4F0E5F1F32030784445414405
:01DECD000054
:00000001FF

Нашел норм документацию на интел хекс формат, спасибо что надоумили)

Сообщение отредактировал novlev - Dec 14 2009, 14:02
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 14 2009, 13:58
Сообщение #56


Гуру
******

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



Цитата(novlev @ Dec 14 2009, 15:46) *
А можете поделиться полной спецификацией формата интел хекс, чтоб впредь я так не лажал...
google.com -> Intel hex format


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
novlev
сообщение Jan 11 2010, 13:23
Сообщение #57


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645



Столкнулся со следующей особенностью программы PONYPROG2000, она не понимает формат хекса типа

:02000004AAAAA6 - тут максимум то 1 для 64К
:10DEAD00DDF2EE20E4EEEBE6EDEE20E6E8F2FC200E
:10DEBD00EFEE20E0E4F0E5F1F3203078414141410F
:05DECD00444541440042

Программа действительно не понимает записи расширенного линейного адреса, или это я чот не то сделал? Она рассчитана только на запись адреса сегмента?
Решено.
То я туплю)))жестко... сложно на разных языках для разных платформ одновременно ваять))))

Сообщение отредактировал novlev - Jan 11 2010, 13:47
Go to the top of the page
 
+Quote Post
uriy
сообщение Jan 11 2010, 13:39
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Хоть бы написали как это проявляется
Go to the top of the page
 
+Quote Post
novlev
сообщение Jan 11 2010, 14:38
Сообщение #59


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645



Проявлялось забавно -
Это если вбить -Wl,--section-start=.myInfo=0xAF700. Код должен начинаться с 0хЕ000, т к -Wl,-section-start=.text=0xE000 (бутлоадер).

Сообщение отредактировал novlev - Jan 11 2010, 14:45
Go to the top of the page
 
+Quote Post

4 страниц V  « < 2 3 4
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 16:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01474 секунд с 7
ELECTRONIX ©2004-2016