新手上路
- 积分
- 22
- 金钱
- 22
- 注册时间
- 2019-8-8
- 在线时间
- 6 小时
|
1金钱
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "includes.h"
#include "string.h"
#include "EXNT.h"
/////////////////////////UCOSIIèÎÎñéèÖÃ///////////////////////////////////
//START èÎÎñ
//éèÖÃèÎÎñóÅÏ輶
#define START_TASK_PRIO 2 //¿aê¼èÎÎñμÄóÅÏ輶éèÖÃÎa×îμí
//éèÖÃèÎÎñ¶ÑÕ»′óD¡
#define START_STK_SIZE 64
//èÎÎñ¶ÑÕ»
OS_STK START_TASK_STK[START_STK_SIZE];
//èÎÎñoˉêy
void start_task(void *pdata);
//LED0èÎÎñ
//éèÖÃèÎÎñóÅÏ輶
#define LED0_TASK_PRIO 0
//éèÖÃèÎÎñ¶ÑÕ»′óD¡
#define LED0_STK_SIZE 64
//èÎÎñ¶ÑÕ»
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
//èÎÎñoˉêy
void led0_task(void *pdata);
//LED1èÎÎñ
//éèÖÃèÎÎñóÅÏ輶
#define LED1_TASK_PRIO 1
//éèÖÃèÎÎñ¶ÑÕ»′óD¡
#define LED1_STK_SIZE 64
//èÎÎñ¶ÑÕ»
OS_STK LED1_TASK_STK[LED1_STK_SIZE];
//èÎÎñoˉêy
void led1_task(void *pdata);
#define TASK_PRI_CHKTASK 3 //
#define TASK_STK_SIZE_CHKTASK 512 //
OS_STK gaTaskCheckTask[TASK_STK_SIZE_CHKTASK];
void CheckStackTask(void* pArg);
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÖD¶ÏóÅÏ輶·Ö×éÎa×é2£o2λÇàÕ¼óÅÏ輶£¬2λÏìó|óÅÏ輶
delay_init(); //Ñóê±oˉêy3õê¼»ˉ
LED_Init(); //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú
// Data();
uart_init(115200);
OSInit();
OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//′′½¨Æeê¼èÎÎñ
OSStart();
}
//¿aê¼èÎÎñ
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata = pdata;
OS_ENTER_CRITICAL(); //½øèëáù½çÇø(ÎT·¨±»ÖD¶Ï′ò¶Ï)
OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);
OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
OSTaskCreateExt(CheckStackTask, NULL,&gaTaskCheckTask[TASK_STK_SIZE_CHKTASK-1], TASK_PRI_CHKTASK, TASK_PRI_CHKTASK,gaTaskCheckTask, TASK_STK_SIZE_CHKTASK, NULL, OS_TASK_OPT_STK_CLR|OS_TASK_OPT_STK_CHK);
OSTaskSuspend(START_TASK_PRIO); //1òÆeÆeê¼èÎÎñ.
OS_EXIT_CRITICAL(); //íË3öáù½çÇø(¿éòÔ±»ÖD¶Ï′ò¶Ï)
}
void CheckStackTask(void* pArg)
{
u8 err1 =0,err2=0;
OS_STK_DATA OSTKDataSize1,OSTKDataSize2;
while(1)
{
err1=OSTaskStkChk(LED0_TASK_PRIO,&OSTKDataSize1);
OSTimeDly(100);
err2=OSTaskStkChk(LED1_TASK_PRIO,&OSTKDataSize2);
OSTimeDly(100);
printf("Task1 FreeStack:%d ,UsedStack:%d ,err:%d\n",OSTKDataSize1.OSFree,OSTKDataSize1.OSUsed,err1);
printf("Task2 FreeStack:%d ,UsedStack:%d ,err:%d\n",OSTKDataSize2.OSFree,OSTKDataSize2.OSUsed,err2);
printf("*******\n\n");
}
}
void led0_task(void *pdata)
{
while(1)
{
LED0=0;
delay_ms(80);
LED0=1;
delay_ms(920);
}
}
void led1_task(void *pdata)
{
while(1)
{
LED1=0;
delay_ms(300);
LED1=1;
delay_ms(300);
}
}
///上面的CheckStackTask的任务是用于检测LED0跟LED1这两个任务的大小用的,现在遇到的问题是调用OSTaskStkChk()函数返回值69,OSFree跟OSUsed都是0,
///查看了一下函数返回值的说明发现提示的是要在OSTaskCreateExt()函数的参数最后一项加上OS_TASK_OPT_STK_CLR,我加上之后发现也没什么变化,还是0,返回值还是69,不知道哪里出了问题了
|
|