CCS的一些问题(转帖)
?
CCS的一些問題(轉(zhuǎn)帖)
CCS版本:V3.1
1.run和animate的區(qū)別
如果沒有斷點(diǎn)的話,這兩個(gè)沒區(qū)別.
如果有斷點(diǎn),那么run的時(shí)候到斷點(diǎn)會(huì)停止,直到再次按run或者F5才繼續(xù)執(zhí)行.
而Animate到斷點(diǎn)的時(shí)候,會(huì)停一小會(huì),將所有窗口刷新一遍,然后就繼續(xù)執(zhí)行
一般就是在要看數(shù)據(jù)變化的時(shí)候,先把曲線畫出來,然后在改變數(shù)據(jù)的循環(huán)里面設(shè)個(gè)斷點(diǎn),然后用animate,就能看到圖片動(dòng)態(tài)改變了,可以參考Help->tutorial里面的"Code Composer Studio? IDE"->"Using Debug Tools"這一個(gè)教程
2.Probe Point 和Breakpoints的區(qū)別和聯(lián)系
共性:他們都會(huì)暫停程序運(yùn)行
區(qū)別:
1.Probe Point暫停程序,執(zhí)行一個(gè)設(shè)定的任務(wù)(如File I/O),然后繼續(xù)執(zhí)行程序.而BreakPoint暫停后必須手動(dòng)繼續(xù)(當(dāng)用run的時(shí)候)
2.BreakPoints會(huì)刷新所有窗口,而ProbePoint不會(huì)
3.Probe Point可以執(zhí)行一些任務(wù)(如File I/O),而BreakPoints就是純粹的停止.
3.阻塞(blocked)和中斷(interrupt)的區(qū)別和聯(lián)系
共性:他們都能停止一個(gè)tsk(任務(wù),具體見我的另一篇文章:關(guān)于tsk和mbx)的執(zhí)行
區(qū)別:
1.只有tsk(任務(wù))能被阻塞,而swi(軟中斷)和hwi(硬中斷)不能阻塞,只能中斷
2.停止的原因不一樣,阻塞是在某些條件不滿足的時(shí)候停止tsk,中斷是因?yàn)橛懈邇?yōu)先級(jí)的事情要做而停止
3.恢復(fù)運(yùn)行的條件不一樣,阻塞是要等到原來不滿足的條件滿足后才能繼續(xù),而中斷是要等高優(yōu)先級(jí)的任務(wù)返回后才繼續(xù)執(zhí)行.
4.阻塞改變tsk的任務(wù)隊(duì)列,而中斷一個(gè)tsk不會(huì)改變tsk的任務(wù)隊(duì)列.
舉個(gè)現(xiàn)實(shí)的例子:
如果你在寫作業(yè),寫著寫著,碰到一道很難的題,你百思不得其解,這個(gè)時(shí)候?qū)懽鳂I(yè)的這個(gè)tsk就被阻塞了,只有等到你想出來這道題怎么做,才能繼續(xù)做下去.
另外一種情況,還是在寫作業(yè),突然門鈴響了,你必須去開門,那寫作業(yè)這個(gè)tsk就被中斷了,你開完門就能回來繼續(xù)寫作業(yè).
4.LOG_printf和printf的區(qū)別和聯(lián)系
共性:都是用于輸出一些內(nèi)容,一般用于顯示一些調(diào)試信息,而且可以格式化輸出,比如用'%d'輸出整數(shù)
區(qū)別:
1.輸出目標(biāo)不同,printf輸出到output窗口,而LOG_printf輸出到BIOS的log窗口
2.匯編指令條數(shù)不同,printf需要上萬條匯編指令,而LOG_printf只要30多條匯編指令,因此LOG_printf的運(yùn)行速度比printf要快的多,一般在實(shí)時(shí)系統(tǒng)中,都使用LOG_printf來輸出,這樣對(duì)系統(tǒng)的實(shí)時(shí)性影響才不大
3.參數(shù)個(gè)數(shù)不同,printf后面的參數(shù)個(gè)數(shù)可以有很多個(gè)(具體多少個(gè)沒測(cè)試過),而LOG_printf后面最多只能有4個(gè)參數(shù),第一個(gè)是寫入的地址,第二個(gè)是字符串,后面最多加上兩個(gè)格式化輸出的數(shù)據(jù),這兩個(gè)數(shù)據(jù)還必須是整型,或者指針,或者常量字符串
4.可以輸出的格式不同,printf有很多的格式,而LOG_printf只有有限的幾種.(%d整型,%x無符號(hào)16進(jìn)制數(shù),%o無符號(hào)8進(jìn)制數(shù),%s常量字符串,%p指針)
5.LOG_printf輸出的長(zhǎng)度受設(shè)定的buffer大小限制,如果超出buffer大小,根據(jù)設(shè)置的不同,可以是停止輸出,或者覆蓋原來的內(nèi)容
6.LOG_printf的優(yōu)先級(jí)比較低,可能是在KNL層,只有系統(tǒng)比較空閑的時(shí)候,才會(huì)輸出,而printf是必然會(huì)輸出.(比如在一個(gè)i=1到100的循環(huán)中,用printf就會(huì)輸出100個(gè)數(shù),而用LOG_printf就只會(huì)輸出一部分?jǐn)?shù),而且在沒有碰到斷點(diǎn)的時(shí)候,根本不會(huì)輸出,因?yàn)樗膬?yōu)先級(jí)相當(dāng)?shù)?只有在走到斷點(diǎn)的時(shí)候,系統(tǒng)才允許他執(zhí)行.)
5.設(shè)置tab的寬度
1.打開"Option -> Editor -> language"
2.在左邊的File Type里面選擇要修改的擴(kuò)展名(CCS中每種不同擴(kuò)展名的文件都能設(shè)置不同的tab寬度,而不是象一般的代碼編輯器,可以全局設(shè)置)
3.在右邊頂部選擇"Tabs/Indenting"選項(xiàng)卡
4.在"Tab Columns"下面的框中輸入"3 5"(默認(rèn)值是5 9,注意兩個(gè)數(shù)值中間有空格)
5.點(diǎn)擊OK按鈕
解釋一下"3 5"的意義,第一個(gè)數(shù)字等于在一行的最開頭按Tab鍵時(shí)跳過的列數(shù)加1,第二個(gè)數(shù)減去第一個(gè)數(shù)的結(jié)果,等于除去每行最開頭外的Tab的寬度.
設(shè)置成"3 5"表示如果在每行開頭按Tab,縮進(jìn)3-1=2列,而其它地方的縮進(jìn)是5-3=2列,也就是無論什么地方Tab鍵的寬度都是2列.
個(gè)人覺得,CCS的這個(gè)設(shè)置Tab鍵寬度挺有意思的.
總結(jié)
以上是生活随笔為你收集整理的CCS的一些问题(转帖)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快递股票有哪些龙头股
- 下一篇: stepinto stepout ste