Подскажите всё ли правильно делаю,чтобы зашить в LPC2134 число:
1) в кейле Options for Target задаю два раздела IROM1 от 0х0 до 0x17FFF IROM2 от 0х18000 до 0x20000, тоесть планирую писать в последний сектор,для этого создаю раздел IROM2.
2) в прогу определяю переменную как
const unsigned int i __attribute__((at(0x18000)));3) следующей функцией стираю последний сектор и записываю туда какой-то массив, в первом элементе которого хранится будущее значение i
Код
typedef void (*IAP)(unsigned int *in, unsigned int *result);
#define iap_entry ((IAP) 0x7FFFFFF1)
unsigned int program (unsigned int * data) {
unsigned int command[5];
unsigned int result[5];
unsigned int save_VicInt;
save_VicInt = VICIntEnable;
VICIntEnClr = 0xFFFFFFFF; //запрет прерываний
command[0] = 50;//подготовка
command[1] = 10;
command[2] = 10;
iap_entry (command, result);
if (result[0])goto exit;
command[0] = 52;//стирание
command[1] = 10; // начало
command[2] = 10;// конец
command[3] = 60000;// частота проца
iap_entry (command, result);
if (result[0])goto exit;
command[0] = 50;//подготовка
command[1] = 10;
command[2] = 10;
iap_entry (command, result);
if (result[0])goto exit;
command[0] = 51;//запись
command[1] = (unsigned int) 0x0018000; // куда пишется
command[2] = (unsigned int) data;//что пишется
command[3] = 256;// число байт
command[4] = 60000;
iap_entry (command, result);
if (result[0])goto exit;
exit:
VICIntEnable = save_VicInt;
return (result[0]);
}
Проблема состоит в том, что в таком случае на команде стирания проц вылетает в PAbt_Handler. Если не объявлять раздел IROM2,тогда всё нормально проходит,но тогда как проконтролировать не залезет ли прога в область,где предполагается перезапись.