|
Размещение констант по фиксированным адресам, IAR,AVR,C |
|
|
|
 |
Ответов
(1 - 9)
|
Jan 30 2009, 12:53
|

Местный
  
Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423

|
Цитата(Сергей Борщ @ Jan 30 2009, 15:46)  В скрипте линкера создаете свой сегмент (там много похожих строчек, разберетесь). В коде на С указываете #pragma location = имя сегмента. В коде на ассемблере - RSEG имя сегмента
Примеры - в документации, описании #pragma location и RSEG в файле cfg3s.xcl в пункте ////////////////////////////////////////////////////////////////////////////// // Code (flash) segments ... ... ... ... пишу следущее -Z(CODE)MAIN_DATA_F=0x3FF0-0x3FFF потом в файде маин #pragma location = MAIN_DATA_F; в итоге Код Error[Pe020]: identifier "MAIN_DATA_F" is undefined E:\RADIO\IAR4.21A\avr\tutor\eth_rem_dev_tcp-2.11\main.c 142 ------
|
|
|
|
|
Jan 30 2009, 14:25
|

Местный
  
Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423

|
пробовал так, данные при этом размещаюся в ОЗУ
#pragma constseg=MAIN_DATA_F const unsigned char my1[] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88, 0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,0x11}; #pragma constseg=default
-Z(CONST)MAIN_DATA_F=700-7FF
|
|
|
|
|
Jan 30 2009, 18:29
|

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

|
Ну документацию-то надо было почитать... Код #pragma segment = "MAIN_DATA_F" #pragma location = "MAIN_DATA_F"
const __flash unsigned char my1[] = { 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88, 0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,0x11 };
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 30 2009, 20:51
|

Местный
  
Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423

|
Цитата(Сергей Борщ @ Jan 30 2009, 21:29)  Ну документацию-то надо было почитать... Код #pragma segment = "MAIN_DATA_F" #pragma location = "MAIN_DATA_F"
const __flash unsigned char my1[] = { 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88, 0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,0x11 }; Благодарю за помощь всё получилось. Праввда надо было ещё -Z(CODE)MAIN_DATA_F=700-7FF вместо -Z(CONST)MAIN_DATA_F=700-7FF. А как компилятор будет реагировать если посреди программы будут стоять мои константы, как ход выполнения программы ? джампы, ? будут перепрыгивать через мой сегмент. Интересуюсь, в реалии константы размещу после прошивки в конце флеш.
|
|
|
|
|
Jan 31 2009, 21:09
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(west329_ @ Jan 30 2009, 23:51)  А как компилятор будет реагировать если посреди программы будут стоять мои константы, как ход выполнения программы ? джампы, ? будут перепрыгивать через мой сегмент. Интересуюсь, в реалии константы размещу после прошивки в конце флеш.  Не компилятор, а линкер. Вот никогда не пробовал. А зачем ему дополнительные сложности создавать? Скорее всего нормально. Но если вы хотите просто разместить константы в конце текста программы, то вы можете просто пододвинуть левую границу сегмента, ближе к началу. Например 100-7FF.
|
|
|
|
|
Feb 1 2009, 22:06
|
Частый гость
 
Группа: Участник
Сообщений: 99
Регистрация: 14-12-05
Пользователь №: 12 191

|
Цитата(west329_ @ Jan 30 2009, 13:23)  Ув. подскажите как правильно прописывается массив констант на С в ИАР, только по фиксированному адрессу, хочу разместить его в конце флеш памяти, чтоб потом подручными средствами можно было прочесть прошивку и изманить нужные константы, не копаясь в самой прошивке. Код __root __flash unsigned char my1[] @ 0x0700 = { 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88, 0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,0x11 };
|
|
|
|
|
Feb 2 2009, 07:57
|

Местный
  
Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423

|
Цитата(plombir @ Feb 2 2009, 02:06)  Код __root __flash unsigned char my1[] @ 0x0700 = { 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88, 0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,0x11 }; интересный вариант, даже линковщик нетрогал все с первого раза заработало
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|