Цитата(gosha @ Jun 2 2011, 09:20)

Внутрисхемная отладка не работает?
Я не знаю, как её реализовать. Если есть возможность по шагам выполнять программу прямо на аппаратуре, то было бы проще. Очень нужно что бы эта программа заработала. Мучаюсь не могу разобраться.
Моё последнее достижение - проверка того, что возвращает функция os_wait (K_TMO, 1000, 0), здесь K_TMO-таймаут (задержка) на 1 секунду. В зависимости от возвращаемого значения загорается тот или иной диод. У меня загорается VD4. Пробовал на разных контроллерах. Проверил, что VD4 загорается в тему, менял VD4 (на другие порты). То есть os_wait () срабатывает с ошибкой и возвращает не то что нужно.
Ещё оно наблюдение. Если раскомментировать настройку последовательного канала передачи, то диод вообще не загорится. И я не могу проверить какое число возвращает функция os_wait().
Лазал в исходный код этой операционной систеты (RTX-166 Tiny). Там есть реализация os_wait() на ассемблере, буду разбираться, может пойму. Может внутрисхемная отладка выручит?
Код:
Код
#include <reg166.h> /* special function registers 80C166 */
#include <rtx166t.h> /* RTX-166 tiny functions & defines */
#define BLINKING 0 /* task number of task: blinking */
sbit vd1 = P2^1; /* I/O Pin: vd lamp output */
sbit vd2 = P2^2; /* I/O Pin: vd lamp output */
sbit vd3 = P2^3; /* I/O Pin: vd lamp output */
sbit vd4 = P2^0; /* I/O Pin: vd lamp output */
int idata event;
/******************************************************************************/
/* Task 3 'blinking': */
/******************************************************************************/
void blinking (void) _task_ BLINKING { /* blink vd */
// P3 |= 0x0400; /* set PORT 3.10 output latch (TXD) */
// DP3 |= 0x0400; /* set PORT 3.10 direction control (TXD output) */
// DP3 &= 0xF7FF; /* reset PORT 3.11 direction control (RXD input) */
// S0TIC = 0x45; /* transmit interrupt enable; ILVL = 1; GLVL = 1 */
// S0RIC = 0x46; /* receive interrupt enable; ILVL = 1; GLVL = 2 */
// S0BG = 15; /* set baudrate to 57600 BAUD */
// S0CON = 0x8011; /* set serial mode */
DP2 = 0xFFFF; /* data direction register */
vd1 = 0; /* all lights off */
vd2 = 0; /* all lights off */
vd3 = 0; /* all lights off */
vd4 = 0; /* all lights off */
event = os_wait (K_TMO, 1000, 0); /* wait for timeout: 1000 ticks */
switch (event)
{
case NOT_OK:
vd1 = 1;
break;
case TMO_EVENT:
vd2 = 1;
break;
case SIG_EVENT:
vd3 = 1;
break;
default:
vd4 = 1;
break;
}
while (1) { /* endless loop */
}
}