Добрый день, коллеги!
Мучаю пример от Keil конфигурации ОСРВ RL-ARM для USB Device класса HID на отладочной плате MCB1700. Как только добавляю еще один процесс в ОСРВ, она сразу же перестает работать. А конкретнее, только разкомментирую строчки, где создается task KEYREAD и само описание KEYREAD, на дисплее даже надписи не высвечиваются, а также компьютер не видит USB устройство. Подскажите, с чем это может быть связано?
/*----------------------------------------------------------------------------
* RL-ARM - USB
*----------------------------------------------------------------------------
* Name: USBD_Demo.c
* Purpose: USB Device Demonstration
* Rev.: V4.20
*----------------------------------------------------------------------------
* This code is part of the RealView Run-Time Library.
* Copyright © 2004-2011 KEIL - An ARM Company. All rights reserved.
*---------------------------------------------------------------------------*/
#include <RTL.h>
#include <rl_usb.h>
#include "GLCD.h"
#include <LPC17xx.h>
#include "KBD.h"
#include "stdio.h"
OS_TID t_keyread; /* assigned task id of task: keyread */
__task void keyread (void);
/*----------------------------------------------------------------------------
* Task 1 'init': Initialize
*---------------------------------------------------------------------------*/
__task void init (void) {
GLCD_Init ();
GLCD_Clear (Blue);
GLCD_SetBackColor (Blue);
GLCD_SetTextColor (White);
GLCD_DisplayString (4, 0, 1, " USB HID ");
GLCD_DisplayString (5, 0, 1, " DRM Manage ");
KBD_Init ();
os_tsk_prio_self(100);
usbd_init(); /* USB Device Initialization */
usbd_connect(__TRUE); /* USB Device Connect */
// t_keyread = os_tsk_create (keyread,0); /* start keyread task */
os_tsk_delete_self(); /* Terminate Task */
}
int main (void) {
os_sys_init(init); /* Init RTX and start 'init' */
}
///*----------------------------------------------------------------------------
// * Task 6 'keyread'
// *---------------------------------------------------------------------------*/
__task void keyread (void) {
uint32_t kbd_val;
short AD_value;
kbd_val = (LPC_GPIO1->FIOPIN >> 20) & KBD_MASK;
while (1) { /* endless loop */
if (KBD_Get () !=0x079) {
AD_value = kbd_val;
printf ("AD value = 0x%03x\n\r",AD_value);
}
// os_dly_wait (5); /* wait for timeout: 5 ticks */
}
}