自己做單片機(jī)實(shí)時(shí)操作系統(tǒng)1前言
之前總是在看著別人怎么去實(shí)現(xiàn)一個(gè)操作系統(tǒng),最終有了自己去寫(xiě)一個(gè)的想法。按照ucOS的作者說(shuō)的一樣,操作系統(tǒng)最終就是一個(gè)保護(hù)寄存器和恢復(fù)寄存器的動(dòng)作。
本文引用地址:http://www.ex-cimer.com/article/201612/324331.htm手上只有一個(gè)MCU飛思卡爾DG128的開(kāi)發(fā)板,然后就開(kāi)始寫(xiě)代碼吧。當(dāng)然要先練習(xí)一下自己的C 語(yǔ)言啦。
1、理解一下函數(shù)指針先。
我們知道每一個(gè)函數(shù)都有自己的一個(gè)指針
void ProcFun1(void)
那么ProcFun1就是一個(gè)指針。
如下面一個(gè)我測(cè)試的程序:
typedef void(*VOID_FUN_PTR)(void); 定義一個(gè)void*的類型
void DelayTime(int duty)
{
while(duty--)
{
_FEED_COP(); /* feeds the dog */
};
}
void FunTask1(void) {
int i;
for(i = 0;i < 8;i++)
{
PTP = 1<LED上顯示個(gè)流水燈。
DelayTime(50000);
}
}
void main(void) {
/* put your own code here */
VOID_FUN_PTR pFun; 創(chuàng)建一個(gè)局部函數(shù)指針
InitSystem();
EnableInterrupts;
pFun = FunTask1; 對(duì)指針進(jìn)行一個(gè)賦值
for(;;) {
_FEED_COP(); /* feeds the dog */
(pFun)(); 執(zhí)行funtask1,取地址,然后通過(guò)()執(zhí)行函數(shù)。就可以執(zhí)行到制定位置的一個(gè)函數(shù)了。
} /* loop forever */
/* please make sure that you never leave main */
}
到這里就知道函數(shù)指針一個(gè)怎么去用了。下一步就是棧是怎么保護(hù)和恢復(fù)的的。
編輯原因--修改函數(shù)指針的理解
評(píng)論