新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > DIY:給單片機(jī)寫(xiě)個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核!

DIY:給單片機(jī)寫(xiě)個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核!

作者: 時(shí)間:2016-11-29 來(lái)源:網(wǎng)絡(luò) 收藏

 
//線程2讓PC口閃爍
void Test2(void *p)
{
uint8_t i;
DDRC=0xff;
PORTC=0XFF;
SREG|=0X80 ;
while(1)
{
for(i=0;i<8;i++)PORTC=1<
}
}

 
//線程3讓PD口閃爍
void Test3(void *p)
{
uint8_t i;
DDRD=0XFF;
PORTD=0xff;
SREG|=0X80;
while(1)
{
for(i=0;i<8;i++)PORTD=1<
}
}

 
//MAIN函數(shù)
int main(void)
{
uint8_t i = 0x77;
//初始化操作系統(tǒng)
OS_Init();

 
//初始化線程控制塊并創(chuàng)建任務(wù)
OS_ThreadInit(&Task1,Test1Stack,STACK_SIZE,5,0);
OS_ThreadCreate(&Task1,Test1,&i);
OS_ThreadInit(&Task3,Test3Stack,STACK_SIZE,5,0);
OS_ThreadCreate(&Task3,Test3,&i);
OS_ThreadInit(&Task2,Test2Stack,STACK_SIZE,5,0);
OS_ThreadCreate(&Task2,Test2,&i);
//初始化定時(shí)器
OS_TimerInit();

 
//啟動(dòng)內(nèi)核
OS_KernelStart();

 
//正常的話程序永遠(yuǎn)不會(huì)執(zhí)行到這里?。。?/div>
while(1);
}

 

 
OK,開(kāi)始調(diào)試咯!打開(kāi)PROTEUS連線,LOAD程序,然后運(yùn)行。。。。

本文引用地址:http://butianyuan.cn/article/201611/323486.htm

成功同時(shí)運(yùn)行三個(gè)流水燈程序!太棒了!接下來(lái)在這個(gè)內(nèi)核的支持下你就可以創(chuàng)作你的應(yīng)用程序了,使用內(nèi)核提供的線程創(chuàng)建函數(shù)你可以創(chuàng)建N多個(gè)線程,當(dāng)然了,必須在內(nèi)存可接受的范圍內(nèi)。利用內(nèi)存分配函數(shù)你可以動(dòng)態(tài)申請(qǐng)和釋放內(nèi)存了。再也不用為DELAY()這種浪費(fèi)CPU效率的作法郁悶很久了。
上面所說(shuō)的所有代碼都開(kāi)源,想看的同學(xué)發(fā)郵件到我EMAIL: wfm2012@126.com 索要
下次有空再作一些應(yīng)用范例來(lái)玩玩

上一頁(yè) 1 2 3 4 下一頁(yè)

評(píng)論


技術(shù)專區(qū)

關(guān)閉