欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
簡(jiǎn)單STC單片機(jī)操作系統(tǒng)
[打印本頁(yè)]
作者:
ahhshjm
時(shí)間:
2021-7-20 14:55
標(biāo)題:
簡(jiǎn)單STC單片機(jī)操作系統(tǒng)
#define MAX_TASKS 3 //任務(wù)槽個(gè)數(shù),必須和實(shí)際任務(wù)數(shù)一致
#define MAX_TASK_DEP 10 //最大棧深10
unsigned char idata task_stack[MAX_TASKS][MAX_TASK_DEP]; //任務(wù)堆棧
unsigned char idata task_id=0; //當(dāng)前活動(dòng)任務(wù)號(hào)
unsigned char idata task_sp[MAX_TASKS]; //棧指標(biāo)存放數(shù)組
//從指定的任務(wù)開(kāi)始運(yùn)行任務(wù)調(diào)度,調(diào)用該宏后,將永不返回
#define os_start(tid) {task_id=tid;SP=task_sp[tid];return;} //
void task_switch(void) //任務(wù)切換函數(shù)(任務(wù)調(diào)度器)
{
unsigned char xdata test_id;
test_id=SP; //堆棧指針
task_id++;
if(task_id==MAX_TASKS)
task_id=0;
SP=task_sp[task_id];
}
void task_load(unsigned int fn, unsigned char tid)
{
task_stack[tid][0]=(unsigned int)fn&0xFF;
task_stack[tid][1]=(unsigned int)fn>>8;
task_sp[tid]=task_stack[tid]+1;
}
void task1(void)
{
while(1)
{
printf("a\r\n");
task_switch();
}
}
void task2(void)
{
while(1)
{
printf("b\r\n");
task_switch();
}
}
void task3(void)
{
while(1)
{
printf("c\r\n");
task_switch();
}
}
void main()
{
UART1_init();
task_load(task1, 0);
task_load(task2, 1);
task_load(task3, 2);
os_start(0);
while(1);
}
作者:
li96261
時(shí)間:
2021-7-20 22:40
學(xué)習(xí)啦!不錯(cuò)!!支持啦!。!
作者:
bhjyqjs
時(shí)間:
2021-7-21 11:06
參考了其他網(wǎng)上的例子,改進(jìn)一下,完美運(yùn)行。
現(xiàn)貼出程序如下:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
#define DataPort P0
#define MAX_TASKS 3 //任務(wù)槽個(gè)數(shù),必須和實(shí)際任務(wù)數(shù)一致
#define MAX_TASK_DEP 10 //最大棧深10
uchar idata task_stack[MAX_TASKS][MAX_TASK_DEP]; //任務(wù)堆棧
uchar idata task_id=0; //當(dāng)前活動(dòng)任務(wù)號(hào)
uchar idata task_sp[MAX_TASKS]; //棧指標(biāo)存放數(shù)組
//從指定的任務(wù)開(kāi)始運(yùn)行任務(wù)調(diào)度,調(diào)用該宏后,將永不返回
#define os_start(tid) {task_id=tid; SP=task_sp[tid]; return;}
void task_switch() //任務(wù)切換函數(shù)(任務(wù)調(diào)度器)
{
uchar xdata test_id;
test_id=SP; //堆棧指針
task_id++;
if(task_id==MAX_TASKS)
task_id=0;
SP=task_sp[task_id];
}
void task_load(uint fn, uchar tid)
{
task_stack[tid][0]=(uint)fn&0xFF;
task_stack[tid][1]=(uint)fn>>8;
task_sp[tid]=task_stack[tid]+1;
}
void task1()
{
for(;;)
{
DataPort = 0x55;
task_switch(); //每執(zhí)行一段時(shí)間任務(wù),就釋放CPU一下,讓別的任務(wù)有機(jī)會(huì)運(yùn)行
}
}
void task2()
{
while(1)
{
DataPort = 0xaa;
task_switch();
}
}
void task3()
{
while(1)
{
DataPort = 0xff;
task_switch();
}
}
void main()
{
task_load(task1, 0); //將task1函數(shù)裝入0號(hào)槽
task_load(task2, 1);
task_load(task3, 2);
os_start(0); //從0號(hào)槽開(kāi)始運(yùn)行任務(wù)
}
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1