реклама на сайте
подробности

 
 
> Помогите начать работать с RTX для ARM в Keil
Mik174
сообщение Jul 15 2008, 14:55
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 357
Регистрация: 6-01-07
Пользователь №: 24 139



Помогите начать работать с RTX для ARM в Keil
Никак не получается стартовать, простейшая программа не работает...

Пробую сделать программу, которая просто мигает светодиодами, подключенными к контроллеру 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
//---------------------------------------------------------------------------
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 14:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01366 секунд с 7
ELECTRONIX ©2004-2016