1.freertos在cortex m3系統(tǒng)上的系統(tǒng)時(shí)鐘(Systick)中斷優(yōu)先級(jí)設(shè)置成最低15,切換任務(wù)(pendsv)的中斷優(yōu)先級(jí)設(shè)置成15。
2.如果沒(méi)有其他中斷產(chǎn)生,那么這么配置基本也可以用。
3.如果有網(wǎng)絡(luò)包數(shù)據(jù)中斷(包括接收,發(fā)送)等等,特別是有心跳檢測(cè)的主從機(jī)子結(jié)構(gòu)的系統(tǒng),主機(jī)是一個(gè)ARM芯片,從機(jī)是另一個(gè)ARM芯片,那么網(wǎng)絡(luò)心跳中斷的優(yōu)先級(jí)必須比較高,否則freertos的Systick和pendsv中斷會(huì)干擾網(wǎng)絡(luò)心跳中斷。
4.所以在freertos的系統(tǒng)函數(shù)portEnterCritical()以及portExitCritical()等函數(shù)里面,portDisableirq(),以及portEnableirq()等的禁止的優(yōu)先級(jí)必須小于網(wǎng)絡(luò)心跳中斷的優(yōu)先級(jí),才能減少干擾,始終保證心跳數(shù)據(jù)能按時(shí)觸發(fā),發(fā)送給主機(jī)。
5.如果多個(gè)任務(wù)之間通過(guò)共享內(nèi)存交互,在分配內(nèi)存的時(shí)候,需要關(guān)閉系統(tǒng)時(shí)鐘中斷,pendsv中斷,這些中斷會(huì)引起任務(wù)切換,共享內(nèi)存需要分配完成,不能被打斷,所以在網(wǎng)絡(luò)中斷中最好不要使用這些共享內(nèi)存,而是單獨(dú)開辟一片內(nèi)存,只有網(wǎng)絡(luò)中斷的數(shù)據(jù)包可以往這塊內(nèi)存里面寫入數(shù)據(jù),其他應(yīng)用層任務(wù)只能從里面讀取數(shù)據(jù),或者通過(guò)寫入未使用的這片內(nèi)存塊中的某一小塊。
6.頻繁的使用CPSIE I 和CPSDE I關(guān)閉CPU中斷處理,會(huì)在某種情況下導(dǎo)致網(wǎng)絡(luò)中斷丟失太多,導(dǎo)致主機(jī)認(rèn)為從機(jī)已經(jīng)非正常了,會(huì)復(fù)位從機(jī)。
聯(lián)系客服