http://tiandongying.blog.163.com/blog/static/1636128212010101833611564/
1,实验一
#include "includes.h"
void main(void)
{
OSInit();
关LED;
OSStart();
}
void OSTaskIdleHook(void)
{
if(LED is ON){
关LED;
}else{
开LED;
}
}
现象为LED以很快速度闪烁,应用示波器观测。如果这一实验失败,问题可能出在OSTakeStkInit()和OSStartHighRdy()函数。查看是否成功进入空闲任务。
2,实验二
创建一个任务,任务只是简单延时,但是不打开中断和时钟,所以应当切换到空闲任务,现象同实验一,由此检验OSCtxSw()。
具体为
#include "includes.h"
OS-STK TestTaskStk[100];
void main(void)
{
OSInit();
关LED;
OSTaskCreate(TestTask,(void *)0,&TestTaskStk[99],3);
OSStart();
}
void OSTaskIdleHook(void)
{
if(LED is ON){
关LED;
}else{
开LED;
}
}
void TestTask(void *pdata)
{
pdata=pdata;
while(1){
OSTimeDly(1); }
}
3,实验三,测试OSIntCtxSw()和OSTickISR(),现象小灯一直闪烁。
#include "includes.h"
OS-STK TestTaskStk[100];
void main(void)
{
OSInit();
关LED;
设置时钟节拍中断向量;
OSTaskCreate(TestTask,(void *)0,&TestTaskStk[99],3);
OSStart();
}
void TestTask(void *pdata)
{
pdata=pdata;
初始化时钟节拍中断;
使能中断;
关LED;
while(1){
OSTimeDly(1);
if(关LED)
开LED;
else
关LED;
}
}