精品国产一区在线_av无码中文字幕无码王_天海翼三点刺激高潮不停_好硬好大好爽视频_欧美高清一区三区在线专区_香蕉黄色片

程序小白
認證:優質創作者
所在專題目錄 查看專題
小小調度器——調度器核心的純C實現
小小調度器——原來C代碼還能這么寫,原作者沒少挨打吧!
小小調度器——開局default,優雅總藏于細節之中
作者動態 更多
基于stm32采用PWM驅動伺服控制器學習筆記
05-13 15:25
基于STM32驅動TM1638學習筆記——軟件篇
04-19 12:42
基于TM1638驅動8位數碼管設計分享
02-24 11:26
RT-Thread驅動之路: Studio創建FAL分區⑤
01-02 08:30
RT-Thread驅動之路: Studio 掛載通用SPI flash④
2024-12-23 13:41

小小調度器——調度器核心的純C實現


開局分割線:接著我們上一篇,其實小小調度器最不同于其它實時任務框架的點就在于他的核心是基于:_LINE_的應用(純C的實現,并沒有用到和cpu相關的寄存器操作,所以他是可以忽略硬件進行移植的,只要編譯器支持),當然這并不是原作者的原創(真要是我怕你也不敢用),使用_LINE_行號記錄程序運行位置,最早是有PT thread采用的,感興趣的童鞋可以自行度娘,言歸正傳,先從LINE用法開始下刀:

ANSI C 規定了預定義宏,__LINE__:表示當前源代碼的行號;

#define WaitX(tickets)  do { _lc=(__LINE__%255)+1; return (tickets) ;case (__LINE__%255)+1:;} while(0);

int func(void)
{
		while(1)
		{
				WaitX(50);    //假定該行代碼在文件中的行號是18
				LED0=!LED0;
		}
}

這里有兩個需要注意的,define WaitX宏為什么寫為一行,因為寫一行__LINE__的值就是行號而且是相同的,雖然宏寫一行看起來很難理解,但是這的確是必須的。

接下來解釋下_lc=(__LINE__%255)+1; _lc類型為char,取值范圍在0-255,而0為剛進入函數開始直接,所以需要避過該號,所以實際取值應該在1-255之間,__LINE__的實際值可能超過255,所以需對其取余操作,防止跳轉沖突(該錯誤可在編譯階段查找出來,并不需要太過擔心,一旦出現沖突,解決方案也很簡單,再任務中多打一行空格即可錯開行號沖突)。

到這里我們再來看WaitX(50);這個宏到底執行了什么,其實就以下三點:

1.記錄該行號(因為后面程序要跳轉到該行繼續執行)。

2.跳走,返回值50(返回值是給到調度任務,調度任務計時到后,主動調用當前任務)

3.進入當前任務,從記錄行號開始執行。


接下來,隆重介紹下即將登場的調度任務:本質上其就是一個定時器任務(框架任務,必不可少),運行環境為:中斷運行,代碼如下:

void INTT0(void) interrupt 1 using 1      //看這個樣子明顯是個中斷函數
{
	TL0=0Xff; //寄存器操作,10ms執行一次中斷
	TH0=0XDB; //寄存器操作,這不是重點
	UpdateTimers();  //這里是重點,看著像函數,實際這也是個宏。
}

重點就是UpdateTimers()宏展開的實現:

//用最簡單的方式:純C實現調度器核心代碼。
do{
	unsigned char i; 
	for(i=MAXTASKS;i>0 ;i--)
	{
		if((timers[i-1]!=0)&&(timers[i-1]!=65535))   timers[i-1]--;
	}
} while(0);

      這段宏完成了定時器任務最主要的功能,主要是對timers數組進行--操作,timers數組里面記錄的每個任務的延時時間(專業一點叫做阻塞時間),當一個任務被阻塞時,return返回值就會被寫入對應的timers數組中。

      每一個任務都有一個自己的timers,所以timers數組的最大值就是MAXTASKS(最大任務數)。一個任務有三中狀態:

1. timers為0,這個時候的任務要么是就緒態(即將運行),要么就是運行態。

2. timers不為0,也不是最大值(65535),這個時候的任務為阻塞態(也就是延時時間還沒到)。

3. timers為65535(最大值),這個時候的任務為停止態(也就是生命周期結束了,不再參與系統調度)。

有了這個調度框架(定時任務)再配合程序猿自己定義的任務函數,那么小小os就可以簡簡單單的跑起來了。

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 3
收藏 4
關注 153
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 亚洲中文字幕av无码专区 | 国内毛片毛片毛片毛片毛片毛片 | 亚洲日本欧美日韩中文字幕 | 久久久精品一区二区三区四季av | 绝代双骄1999林志颖版演员表 | 免费a级观看 | 亚洲日韩国产精品无码AV | 粉嫩一区二区三区色综合 | 俄罗斯ZOOM与人性ZOOM | 亚洲午夜激情网 | 欧美一区视频在线 | 国产精品第10页 | 欧美久久久 | 红桃视频高清免费观看 | 亚洲AV色区一区二区三区 | AAAAAA级特色特黄的毛片 | 日韩—二三区免费观看av | 狠狠爱www人成狠狠爱综合网 | 久久精品国产亚洲AV麻豆不卡 | 一级做a爰片性色毛片免费 av网在线观看 | 国产一区二区三区视频网站 | 国产精品视频一区二区三区综合 | 日韩亚洲在线 | 高潮影院| 国产手机视频在线观看 | 这里只有精品国产 | 综合色爱| 欧美一级黄 | 国产精品综合色区在线观看 | 国产一级免费在线视频 | 日本人浓密BBW | 免费无遮挡又黄又爽网站 | 免费无码又爽又刺激A片软件妖精 | 国产精品嫩草影院精东 | 一及黄色片 | 免费看一级视频 | 99自拍视频在线观看 | 91超碰网 | 人妖videosfree喷潮 | 在线观看啊啊啊啊啊 | 亚洲网国产 |