2018/6/10

Simple CM4 assembly example

最近有接觸一些 CM4 assembly,發現有些地方一開始不知道的話,很容易造成起步的困擾。

一個簡單的 as file
然後這個小範例裡就藏了幾個要注意的點。
line 1: 必須要有這行。沒有的話 compiler 會跳出奇怪的訊息,而且看不出來要加這一行。 像我碰到的就是下面這些 ,
Error: unshifted register required
Error: Thumb does not support conditional execution
Error: instruction not allowed in IT block
line 3: Must. 告訴 assembler 要用 Thumb ISA

line 6: Must. 告訴 linker 這個 label 是個 funciton,用到這個symbol 的地方都要自動使用 thumb mode,也就是要把 bit 0 設定成 1。不然就會碰到當呼叫這個 function 時就產生 Usage fault。當然,如果這不是個 function ,只是一個變數的 lable,就不用加這個了。
https://e2e.ti.com/support/microcontrollers/stellaris_arm/f/471/t/44006?Q-bit-0-of-reset-vector-must-be-1-

line 11~14: 假設想跳到某個指定的位址時,若是使用 register 來存目標位址,就必須自己assert bit 0。原因跟上一個一樣,也是很常碰到的問題。

ARM directives list
https://sourceware.org/binutils/docs/as/ARM-Directives.html

2018/6/8

CM4 usage fault when using printf

最近碰到一個狀況,當呼叫 printf 時,如果印幾個字都沒問題,但當用%d 時,就會出現 Usage fault。

程式本身很簡單,就一行

printf("%d\n", __LINE__);

就這樣,跑進去 printf 後就會跑出 Usage fault。從出問題的地方看,是 PC 跑到奇怪的地方了,讀回來的值也很怪。

想了好久,後來覺得就算真找出流程了,也很難改,況且只會在某個 task 中出錯,其他都沒有,這也太奇怪了。想來想去,只能懷疑是不是 toolchain library 用錯了?剛好就Google 到這篇,可以嘗試一下。

https://stackoverflow.com/questions/26332119/stm32-hard-faults-when-trying-to-printf-numbers-10

檢查 toolchain 後,發現目前用的 toolchain 把 v7-M 相關的東西都拿掉了,可能是之前沒用到吧。ARM v7-M 就是 CM4 使用的架構。換了另一個有 v7-M 的 toolchain 再重新編一次,跑起來就沒問題了。

有問題的:
/arm-none-eabi-lib/lib/thumb
/lib/gcc/arm-none-eabi/4.9.3/thumb
修正後:
/arm-none-eabi-lib/armv7-m
/lib/gcc/arm-none-eabi/4.8.4/armv7-m

2017/5/14

Algorithms筆記 - Union-Find

投影片模式 筆記模式

2017/5/11

Bug Again

By Gregor Cresnar

又來了,Bug 這東西很奇怪,不但小心翼翼的時候會存在,特別是當信心十足時,更會在 Release 時冒出來。更奇怪的是還很容易複製,自己的機器測測測的都沒問題,換到另一個環境就出現了,真是太神奇了。

寫程式真的不能太鐵齒,自己測真的就是會有盲點。即使自己認為已經完美了,但是換到 QA 或在 field 上跑時,就是有些簡單的動作會出問題。也許找到問題的人沒有明說,但是我總會覺得對方心裡會幹聲連連,特別是當部門間關係不好,信任不足時,特別會有情緒化的發言。說話不含髒字,也沒有針對性的字眼,但就是可以從語氣及動作中感到對方的煩躁及不耐。這種時候特別難熬阿,但是錯誤是自己弄得,理站不住,只能默默地吞下來。

總覺得,這種生活過久了,心理應該會出問題。難怪常會聽說有一種人反應會很激烈,老想把問題推掉,因為這實在是不好受。就像答應帶女朋友出去玩,卻在路途中機車沒油,在路上牽車一樣的後悔,如果女友情緒起來又更加難受了。


2017/5/10

預約

來源 : pixabay

今天做錯了一件事,沒有照著預約時間到達,少了很多學習的機會。

過程是這樣的,前一天預約時被告知需要等待老師到了,做一些必要的教學才能開始。
在當下聽起來是隨到隨教,沒有特別預約老師的時間。在填寫最後確定預約時間時也沒有想清楚,填了一個提前一點的時間。

在今天要出發時要出現了一個心態," 既然要等老師到了我才能開始,不如就晚一點出門吧,免得在那等  "," 反正也沒跟老師約時間,不會讓老師白等 "。

結果,到了預約時間還坐在家中,這時卻接到了電話," 老師來囉,甚麼時候會到呢 ? "。心中一驚,怎麼提早了,才匆匆忙忙地出發。到了現場,好險老師還在,再晚一點,老師就要離開去辦其他的事了。可惜的是,因為時間短暫,沒辦法問太多問題,就少了學習的機會了。

整理一下錯誤的心態,
  1. 預約時間之前就該到,越想掐準到的時間,越匆忙。
  2. 雖然沒有明確的跟對方約好時間,但是若對方特地準時出現的話,那就辜負了對方的好意,也留下不好的印象。
  3. 預測對方出現的時間,故意晚點出發,不只不準,也讓自己顯得不可靠。




2017/5/9

找鑰匙

來源: pixabay

不知道你是不是也有這種經驗,想要找一個東西卻怎麼也找不到,翻來翻去後,開始懷疑是不是身旁的人弄不見的,就在心裡愈發確定某某人就是兇手,準備好要好好審問一下時,突然,要找的東西就在某個不經意的角落出現了,而當初放在那的人正好是自己。

今天早上,老婆凌晨五點就出門了。到了中午準備出門吃東西時,就發現大門鑰匙怎麼不見了。平常家中都準備了兩副鑰匙,一人一副,今天卻怎麼也找不到另外一副。於是就開始想,
  1. 大門鑰匙不見了
  2. 老婆早上出門有鎖門
  3. 昨晚有看到老婆把鑰匙放在包包
綜合這三條線索,就得出了 "老婆把另一副鑰匙帶走了 !" 這麼一個結果。於是心裡就開始滴咕啦," 這樣我麼出門呢 ? ", " 要跟老婆確認嗎 ? 會不會害他在外心神不寧呢 ? ",等等各種小劇場。

想不到,就在隨手把昨天出門用的包包拿起來翻翻看時,就發現原來鑰匙在裡面 ! 立刻整個心境就不一樣了,老婆立刻從現行犯變回原本可愛的老婆,家中光線突然變亮了,手腳輕鬆了,空氣吸起來也清新多了。

回想剛剛的情境,既然兇手是自己,來用同樣的態度審問一下自己吧 ? 辦的到嗎 ? 辦不到,因為情緒已經不對了,已經不是那個焦躁的情緒了,在恢復平靜後,面對同樣的過錯,態度恨語句整個都不一樣了。不會兇,不會急,不會帶著高高的態度來詢問,不會覺得如果對方說沒有也是在說謊,因為事實就擺在眼前,因為已經沒有這麼做的理由了。

那下次再碰到一樣的事情,會先怪自己嗎 ? 應該不會,因為不記得自己有做過會讓鑰匙遺失的事, 只能從記得的、知道的事做推想,得到合理的結果後就是事實嗎 ? 所以,讓情緒主導的話是會後悔的。