Цитата(Галстук @ Nov 17 2010, 18:27)

Есть PIC24FJ256 , используется C30, хочется выделить в памяти программ место под данные (100Кбайт), которые будут генерироваться постепенно в процессе работы устройства, записываться и затем использоваться. Цеплять внешнюю память конечно можно, но нецелесообразно. Как сделать это на С30? Для PIC18 на PICC удавалось.
Есть AN1095, но уж больно там накручено. Ресурс перезаписи не беспокоит, так как перезапись будет только в единичных количествах.
Спасибо.
Держи. Вместо структуры (как у меня) можешь задать массив, только как const.
__attribute__((space(psv),address (0x1400))) //(у Вас адрес начала размещения может отличаться!)
volatile struct Programm_Data My_Data; // size = 2048 - это размер моей структуры (у Вас размер может отличаться!)
//---------------------------------------------------
int main(void)
{
CORCONbits.PSV = 1;
PSVPAG = __builtin_psvpage(&My_Data);
Oscillator_init() ;
.....
.....
.....
Переделал под массив для ясности.
_attribute__((space(psv),address (0x1400)))
const unsigned char My_Array[1024 * 100];
//---------------------------------------------------
int main(void)
{
CORCONbits.PSV = 1;
PSVPAG = __builtin_psvpage(&My_Array[0]);
Oscillator_init() ;
………………….
………………….
………………….
………………….
return 0;
}
Off.
В свое время работал с таким контроллером. У него (и PIC24FJ**GA и PIC24FJ**GB) один баг нехороший есть. Если установить бит защиты от R/W кода, то нельзя бутлодером прошить его 1-й килобайт. Поэтому пришлось править линкер скрипт и использовать таблицу альтернативных векторов прерываний.