十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【TriCore OS】Part2-Scheduler

【TriCore OS】Part2-Scheduler 文章目录1. 优先级位图1.1 优先级数值越小优先级越高以 8 位宽度为例2. 调度1. 优先级位图通过位图进行优先级排序1.1 优先级数值越小优先级越高以 8 位宽度为例0816243240485619172533414957210182634425058311192735435159412202836445260513212937455361614223038465462715233139475563以行创建掩码以列创建优先级数据类型如下typedefstruct{uint8 BitMapMask;//Mask 根据Mask索引BitMapDatauint8 BitMapData[8];//一个Bit代表一个优先级}Os_BitMapCfgType;Os_BitMapCfgType Os_BitMapCfg;voidFunc_BitMapSet(uint32 priority){lOrdinateIdxpriority8;lAbscissaIdxlOrdinateIdx0b111;Os_BitMapCfg.BitMapMask|0x80lOrdinateIdx;Os_BitMapCfg.BitMapData[lOrdinateIdx]|0x80lAbscissaIdx;}voidFunc_BitMapClear(uint32 priority){lOrdinateIdxpriority8;lAbscissaIdxlOrdinateIdx0b111;Os_BitMapCfg.BitMapData[lOrdinateIdx]~(0x80lAbscissaIdx);if(0Os_BitMapCfg.BitMapData[lOrdinateIdx]){Os_BitMapCfg.BitMapMask~(0x80lOrdinateIdx);}}2. 调度保存当前Lower Context到CSA中保存当前PCXI寄存器值到当前Task的全局变量中恢复下一Task的PCXI寄存器值清除PSW.CDC寄存器值恢复下一Task的Lower Context恢复下一Task的Upper ContextFunc_Context_Switch(Struct_ContextType current,Struct_ContextType next){_svlcv();/* Store lower CSA. */_dsync();current-RunningCSA_mfcr(0xFE00U);/* Save the current CSA. */_mtcr(0xFE00U,next-RunningCSA);/* Restore next Task PCXI */_isync();_mtcr((0xFE04U),_mfcr(0xFE04U)~(0x0000007FU));/* Clear CDC bit of the PSW register. */_isync();_rslcv();/* Restore next Task Lower Context. */_dsync();__asm(rfe);/* Restore next Task Upper Context. */}
返回列表