最近看不少群里聊怎么實現(xiàn),也有一些具體實現(xiàn),我們就不聊這些了,今天聊一下為什么要這么做,有哪些注意事項,以及怎么做(理論層面不牽扯代碼),手機打字有錯誤請見諒
為什么要做?
在使用arm riscv和x86系統(tǒng)時,沒有c與其它語言交互的途徑和方法,更不要說格式化打印,這就導致我們對于c的debug會相對困難。畢竟通過pc查找反匯編方法debug不太直觀,很多時候我們知道他不會掛,只想單純知道它運行到哪里了,以方便做進一步操作。
另一方面使用c調(diào)用其它語言比如sv的task并執(zhí)行也是我們所需要的。假設一個場景通過c調(diào)用一個sv i2c task執(zhí)行進行數(shù)據(jù)發(fā)送,并在c端不斷檢測i2c task是否執(zhí)行完畢(這期間可以先做別的,做完了再回來看看)。
當然還有更復雜的操作,這就讓我們的c寫法靈活性更大,可復用性更強,這是系統(tǒng)方案的一部分,不能孤立的看。
需要注意什么?
執(zhí)行效率 支持多種不同的硬件接口 cache 多核并行等
執(zhí)行效率,就是我們在調(diào)用該方法的執(zhí)行速度,比如不少人通過uart實現(xiàn),先不說uart的頻率很難上去,就它的串行執(zhí)行,如果數(shù)據(jù)多一點,我們的case執(zhí)行被打印占據(jù)大量時間肯定不是想要的。當然可以減少打印,太少了就有點坑了。
支持不同的硬件接口,一般來說axi的速度快很多,也可以并行執(zhí)行,是一個理想的總線,但因為一些限制(后仿),線并不總能被找到,i2c uart都需要可以被支持,且可以靈活切換。
cache,這里說cache原因,當我們使用axi時,cpu發(fā)出的指令都是以一個cacheline為單位的,這就讓我們原先的一些交互策略失效,需要提前考慮。
多核并行,需要我們對不同cpu發(fā)出的命令區(qū)分開,以防命令串擾,使得打印出亂七八糟的東西出來。
怎么做?
有不少人寫,這里不多說,補充一點個人的理解。
我們需要做出一種有針對性的交互協(xié)議,用于對上述為什么以及注意事項的支持,也要盡量減少對地址的占用,畢竟有的項目地址還是挺緊張的,我們大致可以實現(xiàn)使用64byte對應的地址的占用,很多時候使用1個dw就好了。
如果有對sv task調(diào)用(其它語言類似),就需要支持更多,比如多核對同一task并行調(diào)用,對task實施kill操作,獲取返回值,查看task執(zhí)行狀態(tài)等操作。
更進一步我們還可以通過virtualcpu等方案讓該c在ip階段就完成測試,soc階段只是進一步測試,而不需要重新編寫,讓soc case盡量提前,實現(xiàn)多維度并行。
-
Cache
+關注
關注
0文章
129瀏覽量
28272 -
bin
+關注
關注
1文章
33瀏覽量
13347
原文標題:在bin文件中實現(xiàn)格式化打印的作用和意義
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論