При параметре addrw не кратном 4
при выполнении test = *addrw;
вываливаюсь по адресу 0x00000010
Код
//======код во флеш:
OS_TID TASK8;
unsigned int adres;
......
void task1(unsigned int addr) __task
{
unsigned int addr0;
unsigned short test;
unsigned int * addrw;
for(;;)
{
addr0 = 0;
while(addr0 < 7)
{
addrw = addr+(addr0*4);
test = *addrw;
test++;
*addrw = test;
addr0++;
};
};
}
.......
void sys_swi_8(unsigned int adr) __swi(8) //
{
adres = adr;
TASK8 = os_tsk_create_ex(task1,2,adres);
}
........
//======================
//======= Код загруженный в озу
unsigned short buf_swi[32];
.....
sys_swi_8(&buf_swi);
.....
//========================
OS_TID TASK8;
unsigned int adres;
......
void task1(unsigned int addr) __task
{
unsigned int addr0;
unsigned short test;
unsigned int * addrw;
for(;;)
{
addr0 = 0;
while(addr0 < 7)
{
addrw = addr+(addr0*4);
test = *addrw;
test++;
*addrw = test;
addr0++;
};
};
}
.......
void sys_swi_8(unsigned int adr) __swi(8) //
{
adres = adr;
TASK8 = os_tsk_create_ex(task1,2,adres);
}
........
//======================
//======= Код загруженный в озу
unsigned short buf_swi[32];
.....
sys_swi_8(&buf_swi);
.....
//========================
Есть ли какая-нибудь возможность при внешнем вызове __SWI /имеется ввиду вызов __SWI, расположенного во флеш из загруженного в ОЗУ модуля, где процедура от SWI обращалась к данным вызвавшего модуля без выравнивания адресов(параметром обмена является только адрес
данных)/?
(Или придётся делать процедуру чтения/записи невыровненых данных?)
Как обьявить выровненый массив не знаю(надо для загружаемого в озу кода).
Хотелось бы иметь не только INT
Примечание: код для флеш и для озу компилируются отдельно
Загрузка в озу из SD/MMC
Спасибо!