![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 七嘴八舌異言堂
(https://www.pcdvd.com.tw/forumdisplay.php?f=12)
- - 請問這有從事於撰寫單晶片pic工作的人嗎?
(https://www.pcdvd.com.tw/showthread.php?t=549723)
|
|---|
說到單晶片,小弟可以聊一下經驗
上一個工作也是用PIC的 不過小弟我只完成一個case就不做了,用的是PIC54C57 要看懂單晶片的程式,首先要把單晶片硬體架構弄得很透徹 可用register數量與位址,變數的定指法,堆疊可用深度,看門狗工作原理等等 還有執行什麼指令,旗標會有什麼變化 以上算是基本中的基本,也許短短數行指令,要配合硬體的架構,才會知道這段指令的功用 再來,如果要看別人寫好的程式 也是要先了解這個case的電路,哪隻腳位連到哪顆IC腳位 它的功用是資料線,控制線? 還是CLK控制? 如果有類比的電路,那還要先知道這個電路的功能,它會傳送什麼訊息給PIC 或是PIC傳給該電路的訊息,會有什麼樣的反應 接下來,要知道每個片段的程式功能是什麼 寫的好的程式,會比較模組化,需要什麼功能就去CALL來用 寫的差的程式,就只有一個主程式,然後在那邊goto來goto去 再來就是註解 就算是自己寫的程式,完全不註解 等過了一段時間再回來看,自己都有可能看不懂了,更何況是給別人看 再加上標記只用一些無意義的英文,如:aa1,aa2,aa3,loop1,loop2,loop3... 那真的就很難看的懂是在寫什麼 :jolin: :jolin: 看學習別人寫的同時,最好也可以建立起良好的程式架構 個人淺見... |
OK,繼續
我喜歡在了解指令集之後,作一張速查表,這張的用意是快速知道有哪些指令可調用,而且萬一忘了指令拚法也可快速查詢,這個是在以後很熟時用的。 第二階段,看程式碼,看別人的程式是有一定的方式的,很費時但會得到很多知識。 一般認為ASM程式其註解越多越好,這是錯的,註解多很容易"迷失",原廠提供的樣本程式,註解一堆,看了不知從何看起,所以資深的ASM玩家從不看樣本程式的,他寧願看DATASHEET白手起家,說不定更快進入狀況。 但註解不重要,什麼才重要?想法,這段程式的想法是什麼,當你明朗後,有沒有註解都沒差了,拿到程式碼後首先先像看小說方式看一次,先有概念,找出邊界---這是指程式段與段的關連,有些程式是一塊的,但被分成好幾部份,分散在程式各處,你先要看出拿到的程式是不是這樣。 第2次再看程式時,要分類出來,以便列印,分類基本是分3類,變數(一些宣告,常數之類),主程式(你要知道主程式範圍),副程式,這三類中以第一個為重要,往後會常用到,副程式,我是每個程式能單獨列印為最好,方便查看。這步是對系統分析,整合及資料歸類有關,弄好後就印出,若可最好是單面印(變數那張除外,要速查不可能印N張出來吧)。 第3次,還是看程式,由於已經印出來了,所以這次是深入研究,若可,作筆記,所印出的程式不是要永久保留的,所以作筆記是最好的,內容記一些該段程式的流程及想法,與哪些程式有關連等等,有什麼用途,用來日後DEBUG用,因為有些BUG是隱性的,非要了解這些片段程式的關連性,才有方法找出來。另外就是再加深印象(如之前有人提到多看幾次)。 再來,開始上ICE單步執行,一個個指令全單步執行是深入程式的最佳方式,可以引出之前在紙上作業時所忽略的事物或錯誤觀念,這種方式去對程式RUN個10幾次,你幾乎9成以上都知道運作方式了,就算程式沒註解,沒人講解程式都可清楚知道其方式,之後在修改時或重寫程式時都可得心應手了。 沒錯很費時,但很值得,以上約要發掉2~3個工作月,如果你是獨立作業的,以上的方式一定非常有助益,可學很多,包括現在程設師很欠缺的文件工程。 當初我在寫 BB CALL程式時發3個月時間把基本程式(內只有少許的註解)完全掌握,不過我在第一階段用的時間很少,只用2天左右,我不是神,因為它是6502 ASM,我在25年前就很熟了,只是複習一下即成,只是第2階段較費時加上ICE有時會當,我印程式碼還用4孔的空白紙印的哩 :D |
上班再偷偷上來看一下,原來大都還是用ASM啊!
我的公司用C寫的,說實在看懂別人程式真難,但自已用C寫確覺的還算不會很難~ |
小弟現在手邊有個幾個專案是採用PIC晶片的,
PIC比較常用的晶片有:16F627A,12F629, 程式有用ASM語言,也有用C語言, ASM編譯軟體用MPLAB IDE V7.11, C編譯軟體是用MPLAB外掛HI-TECH PICC(因為官方版的MPLAB C18沒支援PIC12&PIC16系列), 其實PIC熟悉後,並不會太難,就跟上面的前輩所回覆的:熟悉晶片的暫存器&特性之後,其實很容易, 像我自己常用的晶片:MCS-51系列&Zilog Z80系列&PIC系列&ATMEL AVR系列......等等(都是低階晶片 -___-) 網路上也不少資料可以參考,不懂就上GOOGLE去Search一下,可以發現很多驚奇。 不過真的要有耐心,寫單晶片,常常會需要搞硬又搞軟,因為有時硬體並非會按照你的想法去動作, 有時因為是IC的特性,不懂就要認真看DataSheet,會對你幫助很多。 |
上面有一個部分寫錯了
應該是16c57 |
引用:
這個要看情況,如果從沒碰過的東西,一開始就用C,有些細節會被忽略,一開始用ASM會比較對所IC及週邊電路動作全盤瞭解。 使用C是在摸熟之後才用的。 另外前面我少提了許多東西,如第2階段中是連同DATASHEET一同看的(如果採用的是ASIC類的CPU時,除了CPU本身暫存品外還有其他新加入的,如TIMER中斷,中斷致能,中斷遮罩...等暫存器)。 這階段作越好,則基礎打越好。 用ASM寫作,因其本身較特殊,需要用一套方式來發展,文案工作是少不了的,你所寫的程式在任何時間你都看得明瞭的話,表示你的文案工作做的不錯。 |
| 所有的時間均為GMT +8。 現在的時間是10:38 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。