Цитата(Paramon @ Mar 22 2007, 12:59)

У меня подобное вчера как раз и не получилось!
Формат талицы на асме из примера мой компилятор отказался понимать, а каков он должен быть я пока незнаю! Стал обходить другим путём - вышло то, что я описал.
os_tsk_create - "генерим" функцию появляется task
os_tsk_delete_self - удаляем task и функции нет.
Сегодня попробую испытать с вашим кодом - он намного красивей!
Кажется получилось:
#include <ARTX.H>
OS_TID t_Func1; //
OS_TID t_Task2; //
OS_TID t_Task3;
//unsigned int counter;
void Func2 (int par) __swi(8);
void Func3 (void) __swi(9);
void Task2 (int par) __task;
void Task3 (void) __task;
// * Func 2
void Func2 (int par) __swi(8)
{
t_Task2 = os_tsk_create_ex(Task2,2,par);
}
// * Task 2
void Task2 (int par) __task
{
while (par<0xFFFFFFFF)
{
os_dly_wait (5);
par++;
};
os_tsk_delete_self();
}
// * Func 3
void Func3(void) __swi(9)
{
t_Task2 = os_tsk_create(Task3,2);
}
// * Task 3
void Task3 () __task
{
while(1)
{
os_itv_set(50);
os_itv_wait();
};
}
// * Func 1
void Func1 (void) __task {
t_Func1 = os_tsk_self ();
while (1) {
Func2(200);
os_dly_wait (1);
Func3();
os_dly_wait (1);
};
}
void init(void) __task
{
t_Func1=os_tsk_create(Func1,0);
os_itv_set(5);
os_itv_wait();
//
os_tsk_delete_self(); //
}
//
void main(void)
{
os_sys_init(init); //
}
Func2 и Func3 как и положено в асме:
49: Func2(200);
0x000805F8 20C8 MOV R0,#0xC8
0x000805FA DF08 SWI 0x08
50: os_dly_wait (1);
0x000805FC 2001 MOV R0,#0x01
0x000805FE F000 BL os_dly_wait(0x00080DC4) - Part #1
0x00080600 FBE1 BL os_dly_wait(0x00080DC4) - Part #2
51: Func3();
0x00080602 DF09 SWI 0x09
52: os_dly_wait (1);
0x00080604 2001 MOV R0,#0x01
0x00080606 F000 BL os_dly_wait(0x00080DC4) - Part #1
0x00080608 FBDD BL os_dly_wait(0x00080DC4) - Part #2
све TASKи вазываются и работают.
и с режимом ядра ничего ненадо делать!
SWI короткий!!!
передать параметр в ф-ю удалось! Вернуть некому, SWI давно завершён!
Наверное проще будет передавать
указатель!
Спасибо вам огромное!!!
С уважением PARAMON!