Никак не получается стартовать, простейшая программа не работает...
Пробую сделать программу, которая просто мигает светодиодами, подключенными к контроллеру LPC2148.
Идея такая: есть две задачи, в одной светодиоды зажигаются, в другой гаснут.
За основу взял программу, приведенную в описании на RTX, только увеличил длительность пауз - вместо 20 и 50 мс стало по 100 мс, и добавил в начале строку настройки портов, а в функциях, описывающих задачи, добавил две строки - в одной зажигание светодиодов, во второй - их погашение.
Для того, чтобы убедиться в том, что нет ошибки с портами, в самом начале, до инициализации ядра ОС, сделал цикл, в котором светодиоды должны мигнуть 10 раз.
При включении светодиоды мигают, и на этом все останавливается...
Пробовал убирать все из функции main(), кроме инициализации ядра, все равно не работает...
В настройках проекта указал Operating system: RTX kernel
Длительность одного тика не изменял, стоит как по-умолчанию - 10 мс.
Текст программы:
Код
#include <LPC214x.h>
#include <RTL.h> // RTX kernel functions & defines
OS_TID id1, id2; // id1, id2 will contain task identifications at run-time
/* Forward reference */
void task1 (void) __task;
void task2 (void) __task;
//----------------------------------------------------------------------------
// Task 1: RTX Kernel starts this task with os_sys_init (task1)
//---------------------------------------------------------------------------
void task1 (void) __task
{
id1 = os_tsk_self (); // Obtain own system task identification number
id2 = os_tsk_create (task2, 1); // Assign system identification number of task2 to id2
for (;;) // do-this
{
os_evt_set (0x0004, id2); // Indicate to task2 completion of do-this
os_evt_wait_or (0x0004, 0xffff); // Wait for completion of do-that (0xffff means no time-out)
IOSET1 = 0x00ff0000;
os_dly_wait (10); // Wait now for 100 ms
}
}
//----------------------------------------------------------------------------
// Task 2: RTX Kernel starts this task with os_tsk_create (task2, 1)
//---------------------------------------------------------------------------
void task2 (void) __task
{ // do-that
for (;;)
{
os_evt_wait_or (0x0004, 0xffff); // Wait for completion of do-this (0xffff means no time-out)
IOCLR1 = 0x00ff0000;
os_dly_wait (10); // Pause for 100 ms until signaling event to task1
os_evt_set (0x0004, id1); // Indicate to task1 completion of do-that
}
}
//----------------------------------------------------------------------------
// Main: Initialize and start RTX Kernel
//---------------------------------------------------------------------------
int main (void)
{
unsigned long delay, num;
IODIR1 = 0x00ff0000;
for(num=0;num<10;num++)
{
IOSET1 = 0x00ff0000;
for (delay=0;delay<0x70000;delay++);
IOCLR1 = 0x00ff0000;
for (delay=0;delay<0x70000;delay++);
}
os_sys_init (task1);
}
//----------------------------------------------------------------------------
// end of file
//---------------------------------------------------------------------------
#include <RTL.h> // RTX kernel functions & defines
OS_TID id1, id2; // id1, id2 will contain task identifications at run-time
/* Forward reference */
void task1 (void) __task;
void task2 (void) __task;
//----------------------------------------------------------------------------
// Task 1: RTX Kernel starts this task with os_sys_init (task1)
//---------------------------------------------------------------------------
void task1 (void) __task
{
id1 = os_tsk_self (); // Obtain own system task identification number
id2 = os_tsk_create (task2, 1); // Assign system identification number of task2 to id2
for (;;) // do-this
{
os_evt_set (0x0004, id2); // Indicate to task2 completion of do-this
os_evt_wait_or (0x0004, 0xffff); // Wait for completion of do-that (0xffff means no time-out)
IOSET1 = 0x00ff0000;
os_dly_wait (10); // Wait now for 100 ms
}
}
//----------------------------------------------------------------------------
// Task 2: RTX Kernel starts this task with os_tsk_create (task2, 1)
//---------------------------------------------------------------------------
void task2 (void) __task
{ // do-that
for (;;)
{
os_evt_wait_or (0x0004, 0xffff); // Wait for completion of do-this (0xffff means no time-out)
IOCLR1 = 0x00ff0000;
os_dly_wait (10); // Pause for 100 ms until signaling event to task1
os_evt_set (0x0004, id1); // Indicate to task1 completion of do-that
}
}
//----------------------------------------------------------------------------
// Main: Initialize and start RTX Kernel
//---------------------------------------------------------------------------
int main (void)
{
unsigned long delay, num;
IODIR1 = 0x00ff0000;
for(num=0;num<10;num++)
{
IOSET1 = 0x00ff0000;
for (delay=0;delay<0x70000;delay++);
IOCLR1 = 0x00ff0000;
for (delay=0;delay<0x70000;delay++);
}
os_sys_init (task1);
}
//----------------------------------------------------------------------------
// end of file
//---------------------------------------------------------------------------