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

 
 
> константы в ПЗУ, в очередной раз
vic481
сообщение Oct 18 2008, 15:04
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 19-10-05
Пользователь №: 9 837



Подскажите, пожалуйста, что я делаю не так:
#pragma constseg=MYSEG1
const unsigned char my1[] = {0x11,0x22,0x33};
#pragma constseg=default
В настройках проекта линкер-екстра опшионс-юс комманд лайн опшионс--Z(CONST)MYSEG1=F400-F402

Этого достаточно, чтобы в выходном хекс файле по адресам f400-f402 появились требуемые мне конмтанты? Или я что-то упустил (версия 4.11B)?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Oct 18 2008, 15:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



"версия 4.11B" это IAR я полагаю? Вам нужно обязательно сегмент выделять или просто разместить константы по определенному адресу? Вы вроде все верно делаете, отчего сомнения возникли? Еще можно другую прагму использовать и даже без выделения отдельного сегмента.
Код
#pragma location=0xF400
const unsigned char my1[] = {0x11,0x22,0x33};
Go to the top of the page
 
+Quote Post
vic481
сообщение Oct 18 2008, 15:31
Сообщение #3





Группа: Участник
Сообщений: 13
Регистрация: 19-10-05
Пользователь №: 9 837



Да, 4.11B это версия IAR. Мне надо просто разместить константы.Я смотрю- для релиза запускаю дебаг, там по требуемым адресам FF, то же самое, когда грузишь файл в программатор. С Вашим вариантом- тоже самое

Сообщение отредактировал vic481 - Oct 18 2008, 15:33
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 18 2008, 16:05
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(vic481 @ Oct 18 2008, 21:31) *
Да, 4.11B это версия IAR. Мне надо просто разместить константы.Я смотрю- для релиза запускаю дебаг, там по требуемым адресам FF, то же самое, когда грузишь файл в программатор. С Вашим вариантом- тоже самое

"Не верю!" (с) Станиславский wink.gif У меня работает. Либо вы что-то не то делаете, либо ваша переменная хоть и объявлена, но не используется в данном модуле и компилятор, оптимизируя, выкидывает ее размещение. Приведите свой код.
Я по-быстрому вот такую тестовую прогу сваял. Выводит в окно терминала C-CPY числа от 1 до 5. Размещение в памяти по указанному адресу имеется, как и положено.
Код
#include <msp430x14x.h>
#include <stdio.h>

#define TICK_VALUE  16 //system tick in ms

#pragma location=0xF400
const unsigned char mes[] = {1,2,3,4,5};

volatile unsigned int time;

void main(void)
{ unsigned int timestump=0, idx=0;
  WDTCTL=WDT_ADLY_16;
  IE1=WDTIE;
  _EINT();
  while(1)
  { if ((time-timestump)>=1000)
    { timestump=time;
      printf("%d\r\n", mes[idx]);
      if (idx<(sizeof(mes)-1))
        idx++;
      else
        idx=0;
    }
  }
}

#pragma vector=WDT_VECTOR
#pragma type_attribute=__interrupt
void WDT_ISR(void)
{ time+=TICK_VALUE;
}
Go to the top of the page
 
+Quote Post
vic481
сообщение Oct 18 2008, 16:20
Сообщение #5





Группа: Участник
Сообщений: 13
Регистрация: 19-10-05
Пользователь №: 9 837



Цитата(rezident @ Oct 18 2008, 21:05) *
"Не верю!" (с) Станиславский wink.gif

У меня тоже Ваш пример работает! .Оптимизация отключена, но обращения напрямую к этим константам нет, копирую их в озу через пойнтер:
#pragma constseg=MYSEG1
const unsigned char my1[] = {0x3d,0x23,0x36};
#pragma constseg=default
....
int main( void )
for(i=0;i<0x3;i++);
*(unsigned char*)(0x0220+i)=*(unsigned char*)(0xF400+i);
(утрированно)
Похоже, что действительно, компиллер просто выкидывает их
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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