CAN_Transmit不是可重入的?

從代碼看,并沒有考慮線程安全。那意味著我無法同時在中斷和后臺直接使用CAN_Transmit?

您好,CAN中可以對發(fā)送郵箱進行優(yōu)先級的配置且在發(fā)送中會對郵箱是否為空進行判斷。當(dāng)同時調(diào)用發(fā)送函數(shù)時,比如放在不同的郵箱,會先發(fā)送高優(yōu)先級郵箱的數(shù)據(jù)。


我并沒有理解……


發(fā)送優(yōu)先級我看文檔是根據(jù)CAN_TXFP來的,要么根據(jù)發(fā)送順序,要么根據(jù)CANID?郵箱ID是最低一級的判定。

然后,我認(rèn)為的沖突在于CAN_Transmit一開始獲得空閑的郵箱,然后往這個郵箱寫入數(shù)據(jù):當(dāng)后臺獲得了空閑郵箱,但還沒寫入數(shù)據(jù)時,中斷來了,此時在中斷中是不是也會獲得同一個空閑郵箱并寫入數(shù)據(jù)?此時中斷返回后,后臺程序獲得的郵箱其實已經(jīng)不可寫入有效數(shù)據(jù)了,然而后續(xù)要查詢發(fā)送狀態(tài)等,又是可以的(因為確實被中斷用了,確實發(fā)送數(shù)據(jù)了)。那就是,錯誤無法檢測。


我想到的方案是,3個發(fā)送郵箱分別用作不同的功能:

一個用于緊急狀態(tài)數(shù)據(jù)包發(fā)送;一個用于后臺的命令/響應(yīng);一個用于中斷中(定期)的數(shù)據(jù)上報。

但這與外設(shè)庫的用法(查詢3個郵箱,哪個空閑用哪個)不一致。

不知道這個思路是否正確。


您好,我大概明白你的意思,你的意思是中斷和后臺完全同時對同一空郵箱進行判斷并寫入了數(shù)據(jù),此時數(shù)據(jù)會產(chǎn)生沖突,是這個意思吧。那種你最后的說法3個郵箱分別用于不同的功能應(yīng)該也是可以的,但是發(fā)送函數(shù)可能需要自己去寫了,無法直接使用庫的發(fā)送函數(shù)。后續(xù)若有問題,可以郵箱(lzs@wch.cn)和我溝通。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频