開(kāi)啟了hal_sleep,想要在休眠前關(guān)閉某些任務(wù),但是發(fā)現(xiàn)關(guān)閉不了,返回值是6,這個(gè)函數(shù)的返回值都代表什么意思呢?另外如何保證一定關(guān)掉任務(wù)呢?
補(bǔ)充:測(cè)試時(shí)還嘗試調(diào)用了tmos_clear_event來(lái)清理,但tmos_stop_task還是可能執(zhí)行不成功。
你好,檢查對(duì)應(yīng)的TMOS任務(wù)參數(shù)配置是否為合理,注意taskid和event任務(wù)均需要檢查。
可以如下測(cè)試,直接使用peripheral例程,先使用原本的例程創(chuàng)建一個(gè)task查看是否可以正常執(zhí)行與停止。然后在peripheral基礎(chǔ)上新創(chuàng)建一個(gè)taskid和event并做同樣的測(cè)試。然后再考慮移植到你的工程上。
需要注意的是,一個(gè)taskid對(duì)應(yīng)16個(gè)event,避免一個(gè)task就創(chuàng)建一個(gè)taskid,對(duì)RAM的資源消耗是比較大的。
針對(duì)event需要注意定義的是定義按位定義,如0x0001 0x0002 0x0004 0x0008 0x0010 0x0020 避免定義為0x03。
提供一份tmos講解:
WCH TMOS用法詳解 - debugdabiaoge - 博客園 (cnblogs.com)
針對(duì)上面提供的0x06報(bào)錯(cuò),提供一個(gè)方法直接在庫(kù)頭文件搜索0x06,可以找到對(duì)應(yīng)的報(bào)錯(cuò)。
taskid和eventid都有能正常關(guān)閉的情況,正常情況下有一個(gè)間隔3ms的按鍵檢測(cè)任務(wù)和數(shù)碼管顯示任務(wù),然后開(kāi)啟hal sleep不能進(jìn)入休眠,然后創(chuàng)建了一個(gè)任務(wù)負(fù)責(zé)開(kāi)啟和關(guān)閉這兩個(gè)任務(wù),然后是可以關(guān)閉掉任務(wù)并進(jìn)入休眠的。發(fā)生不能關(guān)閉任務(wù)的情況是從機(jī)連續(xù)給主機(jī)發(fā)送數(shù)據(jù),主機(jī)執(zhí)行多次receive noti后,而且event id是常數(shù),不存在更改的情況,invalid event id就很奇怪。
代碼打包發(fā)送郵件至郵箱lpc@wch.cn,我這里看下。
已經(jīng)發(fā)送,謝謝!
已回復(fù)郵件,請(qǐng)查看,代碼方面查看并無(wú)明顯問(wèn)題,并且有存在報(bào)錯(cuò),需要進(jìn)一步溝通。需要注意避免while的死循環(huán)。