Взял пример "Работа с SD/MMC", добавил туда команду RUN.
Получилось следующее:
этим запускаю/объявляю уже загруженный из SD в озу модуль как TASK:
Код
void ram_run(unsigned int addr) __swi(10)
{
TASK10 = os_tsk_create(addr,0);
}
этим загружаю модуль (код) из SD в озу:
Код
/*run*/ else if(strcmp(cmdwork,scmd_run) == 0)
{
if(flag1 & flag1_sd_mmc)
{
if(file_fopen( &filer,&(efs.myFs), cmdparam, 'r') == 0)
{
addr_run = ram_addr_end;
while((e = file_read(&filer,512,buf)))
{
memCpy(&buf,ram_addr_end,e);
ram_addr_end += e;
};
file_fclose(&filer);
fs_umount(&(efs.myFs));
//
if((ram_addr_end & 0x00000011) > 0)
{
ram_addr_end &= 0xFFFFFFFC;
ram_addr_end += 0x00000004;
};
ram_run(addr_run);
//
};
};
}
терминал:
Код
SD_MMC/>dir
UPR EXE ( 764416 bytes )
IGNORE~1 ( 0 bytes )
UPR~1 SET ( 1144 bytes )
UPR ( 0 bytes )
TEST ( 0 bytes )
SD_MMC/>cd test
SD_MMC/test>dir
MOD BIN ( 84 bytes )
SD_MMC/test>run /test/mod.bin
SD_MMC/test>
Запустил MOD.BIN несколько раз, все они работают параллельно.
Вроде всё в порядке, но никак немогу получить полноценные запускаемые и загружаемые коды
MOD.BIN получил издеваясь(короче зациклил) над стандартным(в КЕЙЛ) STARTUPом, а как положено откомпилить не выходит. Вообще то это и есть вопрос к этой теме