ucosii在msp430f149上运行时,最多只能运行3个任务,再多编译器可以通过,但运行出错,修改系统参数,堆栈都不行啊,求大神指点啊、、、、主要功能只是点几个LED灯而已,用的看门狗做系统时钟
相关代码如下
- #include "..Portsincludes.h"
- //#include "lcd.c"
- #define TASK_STK_SIZE 64
- OS_STK TaskSTK0[TASK_STK_SIZE];
- OS_STK TaskSTK1[TASK_STK_SIZE];
- OS_STK TaskSTK2[TASK_STK_SIZE];
- //OS_STK TaskSTK3[TASK_STK_SIZE];
- OS_STK TaskSTK4[TASK_STK_SIZE];
- /*OS_STK TaskSTK5[TASK_STK_SIZE];
- OS_STK TaskSTK6[TASK_STK_SIZE];
- OS_STK TaskSTK7[TASK_STK_SIZE];
- */
- void OSC_init()//系统时钟初始化
- {
- unsigned int j;
- BCSCTL1=0x00;
- do
- {
- IFG1&=~OFIFG;
- for(j=0x20;j>0;j--);
- }
- while((IFG1&OFIFG)==OFIFG);//判断时钟是否起震
- BCSCTL2=0x00;
- BCSCTL2=SELM_1+DIVM_0+SELS+DIVS_0;//系统时钟选择
- //主系统时钟DCO振荡器,1分频,子系统时钟高速晶体振荡器8M,
- }
- void task1(void *pdata)
- {
- while (1)
- {
- P6OUT ^= BIT1;
- OSTimeDlyHMSM(0,0,0,500); //定时函数括号内的内容为延时的时间,1S=1000ms
- }
- }
- void task2(void *pdata)
- {
- while (1)
- {
- P6OUT ^= BIT2;
- OSTimeDlyHMSM(0,0,1,0); //定时函数括号内的内容为延时的时间,1S=1000ms
- }
- }
- void task3(void *pdata)
- {
- while (1)
- {
- P6OUT ^= BIT3;
- OSTimeDlyHMSM(0,0,2,0); //定时函数括号内的内容为延时的时间,1S=1000ms
- }
- }
- void task4(void *pdata)
- {
- while (1)
- {
- P6OUT ^= BIT4;
- OSTimeDlyHMSM(0,0,3,127); //定时函数括号内的内容为延时的时间,1S=1000ms
- }
- }
- void task0(void *pdata)
- {
-
- //pdata = pdata; //如果编译器报警,则重新加入此行代码
- WDTCTL = WDT_MDLY_32; //设置时钟节拍间隔为32/8ms,子系统时钟
- IE1 |= 0x01; //开看门狗定时器中断
- // P1SEL &= BIT0;
- P6DIR = 0xff;
- P6OUT = 0;
- OSTaskCreate(task1,(void *)0,&TaskSTK1[TASK_STK_SIZE-1],1);
- OSTaskCreate(task2,(void *)0,&TaskSTK2[TASK_STK_SIZE-1],2);
- // OSTaskCreate(task3,(void *)0,&TaskSTK3[TASK_STK_SIZE-1],3);
- OSTaskCreate(task4,(void *)0,&TaskSTK4[TASK_STK_SIZE-1],4);
- while (1)
- {
- P6OUT ^= BIT0;
- OSTimeDlyHMSM(0,0,0,250); //定时函数括号内的内容为延时的时间,1S=100ms
- }
- }
- void main(void)
- {
- WDTCTL = WDTPW + WDTHOLD; //关闭看门狗定时器
- OSC_init();
- OSInit();
- OSTaskCreate(task0,(void *)0,&TaskSTK0[TASK_STK_SIZE-1],0);
- OSStart();
- }
复制代码
此帖出自
小平头技术问答
FreeRTOS 使用的资源也比UCOS要少,也可以试试。
一周热门 更多>