|
|
  |
__segmein_end() __segment_begin(), размещение возвращаемого указателя во флеш |
|
|
|
Apr 25 2010, 17:44
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422

|
Цитата(zltigo @ Apr 25 2010, 21:40)  Вы чего спрашиваете-то? Это не функция, это он самый и есть, и его не надо никуда размещать, им надо пользоваться. Не могу разместить его как константу во флеш памяти. Но не в сегменте "CODE", а например в DATA16_C.
|
|
|
|
|
Apr 25 2010, 18:10
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422

|
Цитата(zltigo @ Apr 25 2010, 22:02)  Зачем? Хочу прочитать ее из *.hex файла и узнать карту размещения сегментов.
|
|
|
|
|
Apr 26 2010, 05:21
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422

|
Цитата(zltigo @ Apr 25 2010, 22:15)  Еще дальше в лес  Затем послать ее в bootloader, чтоб он перегрузился в не используемое новой прошивкой пространство и принял ее.
Сообщение отредактировал ih_ - Apr 26 2010, 05:50
|
|
|
|
|
Apr 26 2010, 07:28
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422

|
Цитата(zltigo @ Apr 26 2010, 11:07)  Ну так и посылайте сразу сие значение, благо оно известно. Оно известно изнури, но не снаружи. Перед передачей прошивки в контроллер, хотел ему сообщить, карту размещения новой прошивки.
|
|
|
|
|
Apr 26 2010, 08:23
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422

|
Цитата(zltigo @ Apr 26 2010, 11:32)  Ну находясь ВНУТРИ и сообщите ему. Какие проблемы? О задаче: - есть файл прошивки; - есть устройство куда прошивку нужно записать; - есть программа на ПК, которая передает файл с прошивкой в устройство; - в устройстве есть bootLoader, который принимает новую прошивку; Под задача: - разместить адреса границ сегментов в виде констант во флеш; Алгоритм снаружи: - анализируем файл с прошивкой, получам карту распределения сегментов; - передаем в bootLoader адрес, куда ему нужно переписаться, чтоб его не стерла новая прошивка; - принимаем ответ о готовности bootLoader принять прошивку; - передаем прошивку; Алгоритм внутри: - ждем комадну на принятие новой прошивки; - переписываем bootLoader по новому адресу; - исправляем вектора прерываний; - передаем управление bootLoader; - принимаем новую прошивку; - сброс устройства;
|
|
|
|
|
Apr 26 2010, 08:34
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(ih_ @ Apr 26 2010, 10:23)  Под задача: - разместить адреса границ сегментов в виде констант во флеш; зачем, если для поставленной задачи этого совершенно не требуется. Цитата Алгоритм снаружи: - анализируем файл с прошивкой, получам карту распределения сегментов; Зачем, если единственно, что надо знать о прошивке это ее размер и начальный адрес загрузки на который она слинкована, ну возможно адрес запуска. Эта информация есть в HEX файле. Цитата - передаем в bootLoader адрес, куда ему нужно переписаться, чтоб его не стерла новая прошивка; Да пусть бедняга остается на своем месте, а прошивка шьется всегда за ним. К чему лишние проблемы себе создавать.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 26 2010, 09:26
|
Частый гость
 
Группа: Свой
Сообщений: 77
Регистрация: 2-04-08
Из: Россия, Киров
Пользователь №: 36 422

|
Под задача решена. Тему можно закрыть. Прошу прощения у модераторов, много флуда из ничего. Решение: - *.xcl файл: Код // RAM -Z(DATA)bootData=0200-03FF
// ROM -Z(CODE)beginCode=C000-FFDF -P(CODE)CODE=C000-FFDF -Z(CODE)endCode=C000-FFDF -Z(CODE)bootCode#C000-FFDF
// *.hex file -Ointel-extended - *.c файл: Код __root void segmentationMap(void){ // segmentation text id asm("DB 'Segmentaion:'"); // RAM asm("DC16 SFB(DATA16_I)");asm("DC16 SFE(DATA16_I)"); asm("DC16 SFB(DATA16_Z)");asm("DC16 SFE(DATA16_Z)"); asm("DC16 SFB(DATA16_N)");asm("DC16 SFE(DATA16_N)"); // asm("DC16 SFB(CSTACK)");asm("DC16 SFE(CSTACK)"); asm("DC16 SFB(bootData)");asm("DC16 SFE(bootData)"); // ROM asm("DC16 SFB(DATA16_C)");asm("DC16 SFE(DATA16_C)"); asm("DC16 SFB(DATA16_ID)");asm("DC16 SFE(DATA16_ID)"); asm("DC16 SFB(beginCode)");asm("DC16 SFB(endCode)"); asm("DC16 SFB(bootCode)");asm("DC16 SFE(bootCode)"); asm("DC16 SFB(INTVEC)");asm("DC16 SFE(INTVEC)");
}; - *.map файл: Код DATA16_I 0200 dse 0 bootData 0200 dse 0 DATA16_Z 0200 - 029F A0 rel 1 DATA16_N 02A0 - 02D7 38 rel 1 CSTACK 03F6 - 03FF A stk 1 beginCode C000 dse 0 <CODE> 1 C000 - D341 1342 rel 1 endCode D342 dse 0 DATA16_C D400 - D9FF 600 rel 9 DATA16_ID DA00 - DDFF 400 rel 9 bootCode FD78 - FFDF 268 rel 1 INTVEC FFE0 - FFFF 20 rel 1 - *.hex файл: Код :10D1600030415365676D656E7461696F6E3A000298 :10D1700000020002A002A002D8020002000200D4B5 :10D1800000DA00DA00DE00C042D378FDE0FFE0FF05 :10D19000000030410A12023CB012E2D18293A80290
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|