msp430关于ucosii的问题

2019-03-24 13:58发布

ucosii在msp430f149上运行时,最多只能运行3个任务,再多编译器可以通过,但运行出错,修改系统参数,堆栈都不行啊,求大神指点啊、、、、主要功能只是点几个LED灯而已,用的看门狗做系统时钟
相关代码如下
  1. #include "..Portsincludes.h"
  2. //#include "lcd.c"
  3. #define TASK_STK_SIZE 64
  4. OS_STK TaskSTK0[TASK_STK_SIZE];
  5. OS_STK TaskSTK1[TASK_STK_SIZE];
  6. OS_STK TaskSTK2[TASK_STK_SIZE];
  7. //OS_STK TaskSTK3[TASK_STK_SIZE];
  8. OS_STK TaskSTK4[TASK_STK_SIZE];
  9. /*OS_STK TaskSTK5[TASK_STK_SIZE];
  10. OS_STK TaskSTK6[TASK_STK_SIZE];
  11. OS_STK TaskSTK7[TASK_STK_SIZE];
  12. */
  13. void OSC_init()//系统时钟初始化
  14. {
  15.   unsigned int j;
  16.   BCSCTL1=0x00;
  17.   do
  18.   {
  19.     IFG1&=~OFIFG;
  20.     for(j=0x20;j>0;j--);
  21.   }
  22.   while((IFG1&OFIFG)==OFIFG);//判断时钟是否起震
  23.   BCSCTL2=0x00;
  24.   BCSCTL2=SELM_1+DIVM_0+SELS+DIVS_0;//系统时钟选择
  25.   //主系统时钟DCO振荡器,1分频,子系统时钟高速晶体振荡器8M,
  26. }
  27. void task1(void *pdata)
  28. {
  29. while (1)
  30. {
  31.     P6OUT ^= BIT1;                                                                           
  32.     OSTimeDlyHMSM(0,0,0,500);                 //定时函数括号内的内容为延时的时间,1S=1000ms  
  33. }
  34. }
  35. void task2(void *pdata)
  36. {
  37. while (1)
  38. {
  39.     P6OUT ^= BIT2;                                                                           
  40.     OSTimeDlyHMSM(0,0,1,0);                 //定时函数括号内的内容为延时的时间,1S=1000ms  
  41. }
  42. }
  43. void task3(void *pdata)
  44. {
  45. while (1)
  46. {
  47.     P6OUT ^= BIT3;                                                                           
  48.     OSTimeDlyHMSM(0,0,2,0);                 //定时函数括号内的内容为延时的时间,1S=1000ms  
  49. }
  50. }
  51. void task4(void *pdata)
  52. {
  53. while (1)
  54. {
  55.     P6OUT ^= BIT4;                                                                           
  56.     OSTimeDlyHMSM(0,0,3,127);                 //定时函数括号内的内容为延时的时间,1S=1000ms  
  57. }
  58. }
  59. void task0(void *pdata)
  60. {

  61.   //pdata  = pdata;                     //如果编译器报警,则重新加入此行代码
  62.     WDTCTL = WDT_MDLY_32;                //设置时钟节拍间隔为32/8ms,子系统时钟
  63.     IE1   |= 0x01;                      //开看门狗定时器中断
  64. //   P1SEL &= BIT0;                                                                                       
  65.     P6DIR = 0xff;
  66.     P6OUT = 0;
  67.     OSTaskCreate(task1,(void *)0,&TaskSTK1[TASK_STK_SIZE-1],1);
  68.     OSTaskCreate(task2,(void *)0,&TaskSTK2[TASK_STK_SIZE-1],2);
  69. //    OSTaskCreate(task3,(void *)0,&TaskSTK3[TASK_STK_SIZE-1],3);
  70.     OSTaskCreate(task4,(void *)0,&TaskSTK4[TASK_STK_SIZE-1],4);
  71. while (1)
  72. {
  73.     P6OUT ^= BIT0;                                                                           
  74.     OSTimeDlyHMSM(0,0,0,250);                 //定时函数括号内的内容为延时的时间,1S=100ms  
  75. }
  76. }
  77. void main(void)
  78. {
  79.     WDTCTL = WDTPW + WDTHOLD;     //关闭看门狗定时器
  80.     OSC_init();
  81.     OSInit();
  82.     OSTaskCreate(task0,(void *)0,&TaskSTK0[TASK_STK_SIZE-1],0);
  83.     OSStart();
  84. }
复制代码 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
exiao
2019-03-24 22:18
 精彩回答 2  元偷偷看……0人看过

一周热门 更多>

相关问题

    相关文章