打印
[ARM9、LPC]

关于uc/os操作系统

[复制链接]
1015|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuzhenjie168|  楼主 | 2014-11-17 14:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近刚把uc/os移植到LPC1788上,但当我测试消息队列时,直接进入硬错误。代码如下:
int main(void)
{
  INT8U err;
  SystemInit();
  OSInit();
  Uart();
  UART0_P_Q = OSQCreate(message,5);
  err = OSTaskCreate((void (*)(void *))LED_TASK,( void *) 0,(OS_STK *) &LED_TASK_STAK[TASK_SIZE-1],(INT8U) LED_TASK_PRIO);
  err = OSTaskCreate((void (*)(void *))LED_TASK1,( void *)0,(OS_STK *) &LED_TASK_STAK1[TASK_SIZE1-1],(INT8U) LED_TASK_PRIO1);
  err = OSTaskCreate((void (*)(void *))LED_TASK2,( void *)0,(OS_STK *) &LED_TASK_STAK2[TASK_SIZE2-1],(INT8U) LED_TASK_PRIO2);
  OSStart();

}
/********************TASK_LED1****************************/
static void LED_TASK(void  *para)
{
uint32_t  CLK;
//OSQPost(UART0_P_Q,LED_1_OFF);
CLK = CLKPWR_GetCLK(CLKPWR_CLKTYPE_CPU);
OS_CPU_SysTickInit(CLK/500);
PINSEL_ConfigPin(1,12,0);
GPIO_SetDir(1,1<<12,1);
para = para;
while(1)                                       
{
  GPIO_OutputValue(1,1<<12,0);
  OSQPost(UART0_P_Q,&LED_1_OFF);
  OSTimeDly(10000);
  GPIO_OutputValue(1,1<<12,1);
  OSQPost(UART0_P_Q,&LED_1_ON);
  OSTimeDly(10000);

}
  
}
/********************TASK_LED2****************************/
static void LED_TASK1(void *para)
{
  INT8U        err1;
// OSQPost(UART0_P_Q,&LED_2_ON);
  PINSEL_ConfigPin(1,13,0);
  GPIO_SetDir(1,1<<13,1);
   para = para;
   while(1)
{

  GPIO_OutputValue(1,1<<13,0);
OSQPost(UART0_P_Q,&LED_2_OFF);
  OSTimeDly(50);
  GPIO_OutputValue(1,1<<13,1);
OSQPost(UART0_P_Q,&LED_2_ON);
  OSTimeDly(50);

}

}
/********************TASK_UART****************************/
static void LED_TASK2(void *para)
{
   INT8U err1;
  uint8_t * message;
   
  #if OS_CRITICAL_METHOD == 3u                        
    OS_CPU_SR  cpu_sr = 0u ;
  #endif
    para = para;
  while(1)
  {
          message = OSQPend(UART0_P_Q,0,&err1);
      OS_ENTER_CRITICAL();
      while(*message)
          {
               LPC_UART0->THR =*message++;
            while(!(LPC_UART0->LSR &(1<<5)));
      }
      OS_EXIT_CRITICAL();
      OSTimeDly(20);
   
   }
}
前提单独测试LED没问题,有一个奇怪的现象是当我在task1中的第一个发送消息哪里判断返回值时,当正确返回,则让他死循环while(),不释放CPU控制权,但现象是他自动跳到优先级高的任务,我不知道这和时间管理os_tmr.c有没有关?;

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

8

帖子

0

粉丝