社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 944|回复: 0

[资料分享] UCOS移植到MSP430过程与心得体会《6》

[复制链接]

3360

TA的帖子

421

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

荣誉会员勋章

发表于 2013-11-29 19:36:17 | 显示全部楼层 |阅读模式
void Task0_Usart (void *pdata)
{
     pdata = pdata;                                         /* Prevent compiler warning                  */
     INT8U err;
     WDTCTL = WDT_MDLY_32;                                   /* Set time tick 32 mS                       */
     IE1    |= 0x01;                                          /* Enable Watchdog timer interrupts          */     
     BSP_CLK_Init();
     BSP_UART_Init();     
      //OSTaskCreate(Task1_Usart, (void *)0, &Task1Stk[TASK_STK_SIZE - 1], 5);
     while (1)
     {
         err=OSSemPost(DispSem);          //发Sem
         switch(err)
         {
         case OS_NO_ERR:
           {
             P4DIR=0XFF;
             P4OUT=0X05;
             TXBUF1 = 0x30;          //成功 发0
           }; break;
         case OS_SEM_OVF:
           {
             P4DIR=0XFF;
             P4OUT=0X0A;
           }; break;               //溢出 LED显示00001010
         case OS_ERR_EVENT_TYPE:
           {
             P4DIR=0XFF;
             P4OUT=0X07;            //不是信号量 00000111

           }; break;
         case OS_ERR_PEVENT_NULL:
           {
             P4DIR=0XFF;            //空指针 00001111
             P4OUT=0X0F;
           }; break;
         }
         OSTimeDly(30);   
     }
}
void Task1_Usart(void *pdata)              //接Sem
{
     pdata = pdata;
     INT16U Value;
     WDTCTL = WDT_MDLY_32;                                   /* Set time tick 32 mS                       */
     IE1    |= 0x01;                                          /* Enable Watchdog timer interrupts          */

        while (1)
        {
           Value = OSSemAccept(DispSem);
           if(Value>0)
           {
           P4DIR=0XFF;
           P4OUT=0X50;
           TXBUF1 = 0x31;     
           }
           OSTimeDly(50);
        }
}
以上输出:1010010.......

OS_EVENT *DispSem;
#define TASK_STK_SIZE                   256        /* Size of each task's stacks (# of OS_STK entries)    */

OS_STK    Task0Stk[TASK_STK_SIZE];
OS_STK    Task1Stk[TASK_STK_SIZE];
OS_STK    Task2Stk[TASK_STK_SIZE];
OS_STK    Task3Stk[TASK_STK_SIZE];


void    Task0_Usart(void *pdata);                     /* Function prototypes of Startup task                 */
void    Task1_Usart(void *pdata);   

void    Task2_Usart(void *pdata);                      /* Led Display */
void    Task3_Usart(void *pdata);
void main (void)
{
     WDTCTL = WDTPW + WDTHOLD;
    // INT8U err;
     OSInit();                                               /* Initialize uC/OS-II                       */
     DispSem = OSSemCreate(1);
     //OSTaskCreate(Task0_Usart, (void *)0, &Task0Stk[TASK_STK_SIZE - 1], 4);
     //OSTaskCreate(Task1_Usart, (void *)0, &Task1Stk[TASK_STK_SIZE - 1], 6);
     //OSTaskCreate(Task2_Usart, (void *)0, &Task2Stk[TASK_STK_SIZE - 1], 8);
     OSTaskCreate(Task3_Usart, (void *)0, &Task3Stk[TASK_STK_SIZE - 1], 10);
     OSStart();                                              /* Start multitasking                        */
}
void Task0_Usart (void *pdata)
{
     pdata = pdata;                                         /* Prevent compiler warning                */
     INT8U err;
     WDTCTL = WDT_MDLY_32;                                   /* Set time tick 32 mS                       */
     IE1    |= 0x01;                                          /* Enable Watchdog timer interrupts          */

     BSP_CLK_Init();
     BSP_UART_Init();     
      //OSTaskCreate(Task1_Usart, (void *)0, &Task1Stk[TASK_STK_SIZE - 1], 5);
     while (1)
     {
         err=OSSemPost(DispSem);          //发Sem
         switch(err)
         {
         case OS_NO_ERR:
           {
             P4DIR=0XFF;
             P4OUT=0X05;
             TXBUF1 = 0x30;          //成功 发0
           }; break;
         case OS_SEM_OVF:
           {
             P4DIR=0XFF;
             P4OUT=0X0A;
           }; break;               //溢出 LED显示00001010
         case OS_ERR_EVENT_TYPE:
           {
             P4DIR=0XFF;
             P4OUT=0X07;            //不是信号量 00000111

           }; break;
         case OS_ERR_PEVENT_NULL:
           {
             P4DIR=0XFF;            //空指针 00001111
             P4OUT=0X0F;
           }; break;
         }
         OSTimeDly(20);   
     }
}
void Task1_Usart(void *pdata)              //接Sem
{
     pdata = pdata;
     INT16U Value;
     WDTCTL = WDT_MDLY_32;                                   /* Set time tick 32 mS                       */
     IE1    |= 0x01;                                          /* Enable Watchdog timer interrupts          */
     //OSTaskCreate(Task2_Usart, (void *)0, &Task2Stk[TASK_STK_SIZE - 1], 8);
        while (1)
        {
           Value = OSSemAccept(DispSem);
           if(Value>0)
           {
           P4DIR=0XFF;
           P4OUT=0X50;
           TXBUF1 = 0x31;     
           }
           OSTimeDly(40);
        }
}
以上是OSSem的全部代码:在main主函数里改变//Usart会输出不同的十进制。
问题:
     OSTaskCreate(Task0_Usart, (void *)0, &Task0Stk[TASK_STK_SIZE - 1], 4);
     OSTaskCreate(Task1_Usart, (void *)0, &Task1Stk[TASK_STK_SIZE - 1], 6);
     OSTaskCreate(Task2_Usart, (void *)0, &Task2Stk[TASK_STK_SIZE - 1], 8);
     OSTaskCreate(Task3_Usart, (void *)0, &Task3Stk[TASK_STK_SIZE - 1], 10);

全部打开 无输出:
此帖出自MSP430论坛


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-6-19 14:58 , Processed in 0.053611 second(s), 17 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表