發表文章

目前顯示的是 2013的文章

文章總列表

Cortex-M3 vol.2 架起最小環境

上一篇 提到我最後選了KEIL當作開發環境, 這一篇想講怎麼建構最小開發環境. 玩開發版, 我的習慣是讓LED一閃一閃亮晶晶, 看到一閃一閃, 好像我的未來也跟著點亮了 (嘴砲). 要讓LED亮暗很容易, 塞個boot-up code, 再塞個main function, 不過就是控制幾根pin腳的high-low, 翻一下data sheet以及schematics, 這件事可以輕鬆達成.  以前小時候, 我喜歡什麼都自己來, 比如說自己寫一個LPC17xx.h, 照著register address刻一個出來; 或著看了Cortex-M3的手冊, 自己去編一個對應的header file, 以及操作的函數. 這樣做的學習曲線陡峭, 可以學到超多東西, 但是對於生產力實在沒什麼gain.  所以我這次想仔細研究, 世界最好用的MCU開發環境, 他們是怎麼幫助user做這些事. 如果KEIL幫我搞定很多東西, 那我要怎麼使用, 不要硬是自己來. 底下列出一些note Keil/ARM/CMSIS/Include/core_cm3.h ARM編寫了所謂CMSIS library, 裡面有Cortex M3共同register一些structure definition. 這種東西有高手幫忙寫了, 一定比自己跛腳的版本好. 這個檔案有時候會需要去參考, 所以需要知道它放在哪裏. Keil/ARM/INC/NXP/LPC17xx/LPC17xx.h 這個檔案會去include CMSIS的header file (也就是core_cm3.h), 所以平常使用, 其實我們都只是include LPC17xx.h. 另外這個檔案也包括LPC17xx系列專用的registers定義. 這邊就顯示KEIL開發環境的價值了, 一堆MCU都有現成的定義在裡面, 拿來就可以用, 不需要像我小時候一樣辛苦.  另外在KEIL環境裡, 這個檔案Compiler會自動幫忙找到, 我猜是IDE幫忙設定include search path. 以前我會很堅持要把這個檔案拷貝出來, 放在自己的project底下. 現在我是覺得, 反正KEIL都有一套完整的方法維護這一切, 那就放開心胸的使用吧~ Keil/ARM/Sta

關於提案被打槍

我上班的公司, 新人滿一個月處長會約談聊聊工作狀況, 性質主要是閒聊. 當時處長提到, 有想法就要提, 要勇敢的提, 不要怕被打槍. 當時我不大懂他的意思, 隨著我提proposal的次數便多, 終於瞭解處長的意思... 提案人召集會議報告想法, 然後接受 無情的 review. 有時候就是沒有想完整, 無法回答同事的問題, 回去再仔細想過, 經常可以發現更漂亮的解法. 所以提出想法被打槍, 不等於自己被否定, 畢竟人很難一開始就想得面面俱到. 關鍵是透過這個過程, 精煉自己的想法. 在這個過程裡, 不夠成熟的想法也會逐漸收斂, 漸漸變得全面. 所以處長的話我現在懂了, 有時候就算知道會被打槍, 會覺得不舒服, 還是要提出來. 有時候真的沒有人知道答案, 如果不在黑暗中開槍(某個人提案被打槍), 就沒有亮光去搜尋答案. 這個過程真的不舒服, 感覺很像自己變成火柴棒燒起來, 也難怪處長說不要怕被打槍. 這件事另外一個關鍵是, 同事之間有對事不對人的默契, 這樣才能進行健康的討論, 逐漸找到答案. 但是提案被打槍這件事, 始終還是不舒服就是了...

小米2s, 刷機note

[我想做的] 小米手機一直都沒有升級Android package, 停在4.1.1 這件事其實可以理解, 因為他算是深度訂製, 換版會有大量的修改要做 所以在4.1.1堪用的前提下, 當然是能用多久就用多久 But, 我想在小米手機使用藍牙4.0, BLE, 的心跳帶, 需要Android 4.3才能用 好在小米手機的開發者眾多, 我隨手就找得到三個版本的ROM可以用     - AOSP     - CM10.2     - MoKee 目標是在手機上的雙系統, 一個跑MIUI, 另外一個跑上面的ROM (ps. 這些開發者好像也快要切到Android 4.4繼續開發了) [先備份] 不得不推薦小米手機助手的備份功能, 在MIUI底下連線後點備份 所有東西都會備份到PC底下, 包括電話簿, APP, 簡訊, ... 在做任何操作之前先備份, 可以永保安康 [雙系統] 小米手機允許安裝2個ROM-package, 比如是我這次玩的Android 4.3 + MIUI 不過小米原本的系統比較像是備援, 在升級系統時, 會先把目前系統備份到另外一個系統在升級, 這樣就算壞掉了, 還有一個可以用 所以如果目前是用sys1開機, 就會先備份到sys2, 反之亦然 要安裝雙系統, 就要打斷上述的連結, 手段是CMW-recovery Google keyword: "CMW recovery 小米2s", 找一些文章安裝他 安裝好之後關機 進入recovery的方法, 按住電源鍵以及音量向上, 等到mi的icon出現後放掉電源鍵(音量還是按著), 這樣就會進入recovery mode了 Recovery裡有很多功能, 建議每個選單都大概看一下, 刷機之前都要做三清, 也在選單裡 目標是高級功能/ 開啓雙系統共存, 打開這個吧 !! [確定MIUI還可以開機] 確定要用雙系統之後, 要切換系統都要進Recovery mode 我是把Android 4.3裝在sys-1, MIUI裝在sys-2, 先進入sys-2看看 如果因為任何原因, MIUI進入以後空空如也, 都可以回頭去用小米手機助手還原備份

我的日本所見所得, 關於上班族

在台灣當工程師, 我幾乎是天天T-shirt + 牛仔褲 + 拖鞋 在前一間公司(比較美式作風), 我的夢想是穿著海灘短褲 + 花襯衫 不過我只看過CEO穿短褲來上班, 沒穿上花襯衫, 夢想就一直放在心裡了 (笑) 所以穿著到底重不重要, 其實我沒什麼感覺, 畢竟是動腦袋在工作 我偶爾穿襯衫, 看起來帥氣一點, 同事還會問是不是要去約會 這邊的人覺得, 不要太誇張, 其實都還好 在日本則是不同的光景, 上班族幾乎都是襯衫 + 西裝褲 + 皮鞋 我在旅館還看過日本客人, 和櫃檯要燙衣板 注重穿著, 給人舒服專業的感覺, 是這個國家給人的氛圍 我相信不是每個人都刻意這麼想, 而是在這個國家, 這樣做似乎是理所當然 我還滿喜歡日本的這個文化, 反正出門穿什麼是有規定 像我這種不注重穿著的人, 有人叫我怎麼穿, 反而可以減少腦力消耗 但制服最好不是襯衫, 要燙還滿麻煩的, 還得把衣服紮到褲子裡, 再搭上皮帶 所以我想要有制服, 又希望這套制服穿起來舒服, 不用花太多功夫去照顧 (啊就都給我講就好了) 想到這邊, 我還是喜歡這邊自由自在亂穿的氛圍

投資工具pk

之前閱讀 台北市房價崩跌只是時間問題 ,  global property guide 統計台北市的租金報酬率1.57% 另外一篇新聞, 提到 淡水租金報酬率有5.8% 我是個喜歡收租金勝過賺價差的人 評量的基準是, 分析收幾年才能回本, 檢視一些投資工具... ---- 1. 當今的定存利率大概1%, 100x 2. 台北市的租金收益率, 1.57%,  64x 3. 一般的儲蓄險, 鎖現金流, 利率約2%, 50x 4. 我的房東隔3間套房出租, 一年賺24萬, 想賣750萬, 報酬率約3.2%,  31x 5. 淡水的租金報酬率有5.8%, 17.2x 6. 全國電子股價69, 2013年配息4.9, 報酬率7%, 14x 7. 我的持股, 2012年的股息收益率約8.76%,  11.4x ---- Comment 雖然會被通膨吃掉, 但是定存依舊是我的最愛, 比起投資賠錢, 通膨相對還好 另外一方面, 持有足夠的現金也是我能長期持有股票的信心來源 儲蓄險只適合錢放在手邊, 不花掉會難過的人 以投資來說, 卡現金流, 利息又低, 保險公司還拿去炒作房地產 我不認為這東西有任何的"投資價值" 我看待房地產其實很嚴苛, 租金的收入要能完整cover房貸才會想買 不然這玩意兒金額大, 有跌價風險(現階段不小), 需要去借錢(貸款), 還很難賣 這玩意兒要賺價差其實還滿難的(要另外投入時間做功課) 結論是, 我也完全不考慮房地產 股票一直是我的最愛, 金額小, 容易變現, 收益率高, 長期持有的報酬率真的很不錯 缺點是價格波動的很劇烈, 操作上其實也不大容易(如果想要短線進出) 然後選股也需要相當的學習, 這大概是一些進入的門檻

道道指令皆辛苦...

從前讀ARM instruction set的時候, 覺得CPU提供一大堆addressing mode很煩 那時候想說, 反正就是多一道兩道指令, 何必這麼辛苦? 最近有機會提CPU enhancement proposal, 需要仔細review C code和assembly code 舉例來講, C code可能長這樣...     WRITE(ADDR, 0xaaaa) 首先是寫constant的部分, 需要三道指令才做得完     load #ADDR, r0     load #0xaaaa, r1     store r1, [r0] 接著我們就會想, 如果可以直接把constant塞到instruction的話 就可以少一道指令, 也可以少用一個register     load #ADDR, r0     store 0xaaaa, [r0] ---- 接著繼續思考不同的C code...     WRITE(ADDR, 0xaaaa)     WRITE(ADDR+1, 0xbbbb) 把上面的enhancement拿來用, 會變成這樣...     load #ADDR, r0     store 0xaaaa, [r0]     add r0, #1     store 0xbbbb, [r0] 如果遇到連續的address寫入, 這樣就會多一道中間的addi, 看起來有點討厭 如果讓store做完的時候, 同時把address pointer +1, 這個問題就可以被完美的解決     load #ADDR, r0     store 0xaaaa, [r0], #1     store 0xbbbb, [r0], #1 這樣一來, 除了第一道指令載入address, 剩下都可以1cycle寫一筆出去 ---- 然後接著又會想, store constant的指令, 寫完就+1是不是我們要的行為? 有些硬體用indirect的方法存取, 行為像是這樣...     WRITE(PERI_ADDR, 0x100)     WRITE(PERI_ADDR+1, 0xaaaa) // peri[0x100] = 0xaa

Cortex-M3 vol.1 開發環境

圖片
每次拿到新板子, 其實都有一道天險: 架環境 因為一件事通常有多種方法能達成, 開發者必須做選擇 教學的文章很多, 但是寫出為什麼這麼做的文章比較少 我想在這篇文章列出我做的選擇, 還有可能的選項, 以及我為什麼這麼選 ---- IDE(Keil) vs command line(GCC) Keil 開發環境的部分, 我使用Keil ARM, 這套toolchain從8051時代就很紅了, 簡單好用 後來他被ARM買下來, 等於是官方版的IDE 在網站上有試用版可以下載, code size最大可以用到32kb 我買的開發板附的光碟就有Keil ARM (當然是盜版), 真的是不怕被抓耶 (暈) 我想ARM真正的目標是推廣CPU, 建立eco-sys, 所以提供開發工具只是剛好而已 我在官網抓了試用版, 裡面包括大量的範例, device database, startup code, header files 這套開發工具真的幫開發者做掉很多事, 內建的simulator也非常好用 初學者建議用Keil, 在google打上關鍵字, 很快就能找到解法 我的目的是儘快搞定開發環境, 所以我選擇用Keil Command Line 另外一條路是直接面對所有的細節, 撰寫Makefile直接呼叫armcc or gcc編譯程式 自己規劃memory map, 寫在linker script裡 產生出來的ELF檔, 再自己透過read_elf抽出code/data segment, 然後下載到IC裡 走這條路, 閱讀文件大量文件能培養英文閱讀能力, 還能知道為什麼要這麼做 做到這樣以後, 看懂IDE裡, 每一個option的意義其實還滿爽的 我一直覺得搞定toolchain也是重要的能力之一, 因為IDE隱藏太多細節 如果走這條路, 我推薦CodeSourcery出的gcc toolchain, 商業公司品質有保障卻可以免費用 ---- JTAG 沒有JTAG的時候 一般單晶片都可以透過COM port下載程式進去跑, 直接看會不會動, 一番兩瞪眼 只要能打通boot code, 以及UART, 接下來再寫個printf, 其實還是能幹活兒 就算有JT

Cortex-M3 foreword

圖片
某天晚上, 我在露天拍賣打了關鍵字搜尋"ARM", 系統給了我一堆實驗板的資料 這堆板子現在大陸一堆人做, 價格低廉功能強大, 不知為何, 我很想要一片Cortex-M3 最後我看上一片 NXP LPC1768 的板子,  上面的周邊不少 Cortex M3 @ 100Mhz, 512KB Flash, 64KB SRAM     USB 2.0 Host/Device/OTG     Ethernet Controller     SD card     2.8" TFT-LCD with touch panel 記得玩單晶片, 最愉快是搞定一個又一個周邊, 看到程式與真實世界的互動 修實驗課時, 就算只是點亮一顆LED, 控制閃爍的速度, 都讓我激動不已 這樣的經驗陪著我在多顆CPU上不停的複製, 同時我也發現, 其實問題的本質沒有改變 IC上的周邊就是那些, 單晶片要控制的對象不外乎UART/SPI/I2C/GPIO/USB ... 改變的只是toolchain不同的寫法, CPU有些許不同, 概念都是類似的 但是這顆IC竟然整合了Ethernet... 這個就有點不大尋常 另外在arduino project看到有人用單晶片整合了藍牙, 甚至WiFi 我想關鍵是通訊功能, 如果單晶片以後都能和Internet整合, 似乎會有些有趣的應用 另外從ARM7/9到Cortex-M3, 到底CPU會有什麼進化, 過去的麻煩事, 現在會怎麼被解決? 從以前到現在, 我看了不少CPU architecture 很多我覺得"只能這麼做"的事, 在某些架構經常看到更精巧的解法 這真的是人類智慧的結晶, 工程師努力的結果, 感嘆之餘, 也希望自己能不停進步 ---- 總歸一句話, 好奇 想知道以前不知道的事, 想成為真正的高手, 我相信他會帶給我無窮的樂趣 這系列的文章預計會寫下我和板子打交道的紀錄, 以及讀書心得, 記載這一次的旅程

羅馬公路練車

圖片
這兩年多很久沒騎單日破百了, 體力這種東西, 沒有保持只會退步 今天本來想騎宇老大滿貫, 實在怕騎不完, 最後退縮來騎簡單一點的路線 今天的目標是繞過羅馬公路, 爬上角板山, 繞過石門水庫, 再騎回關西, 里程大約110km 感謝老婆騎摩托車當補給隊, 一路補水補食物, 破胎有人補, 騎不動還可以隨時搭機車撤退 如果今天騎不完, 問題都是出在自己身上 ---- 前往關西的路上吹着大逆風, 一上路就猛燒體力, 短短25km心跳卡在 >170 下不來 在羅馬公路口補給時, 我很認真的考慮要不要乾脆回家撤退 :-( 羅馬公路是一條漂亮的公路, 沿途開著山櫻花點綴着, 過年期間要賞櫻來這也ok 這次去, 爬坡頂點的金鳥樂園已經正式關門, 整個門已經擋起來 今天有補給車, 飲食自動升級, 在美腿山上吃香腸, 喝豆花, 在羅馬公路尾端好好吃午飯 溜下羅馬公路的長下坡後, 緊接著是角板山的長爬坡, 這個爬坡沒20分鐘是爬不完的 我的速度掉到剩個位數, 無法維持迴轉速, 好在死撐活撐也爬完了 前往大溪以下坡為主, 再加上順風, 總算能威風的騎在路中間, 帶著速度下山 繞過石門水庫, 迎來今天最後一個爬坡, 台三乙 這個坡不長(5km@200m), 但爬起來很要命, 兩腿在抽筋邊緣, 老婆頻頻問我要不要上車 爬完這段的獎勵是, 在關西的85度C吃吃喝喝~ 回到家看了一下GPS, 今天在外的時間足足7hr 騎摩托車的老婆比我更辛苦, 得不停地反覆加速減速, 注意路況, 謝謝老婆大人的贊助 :D 之後希望多少可以把體力練一點回來, 下次想去騎宇老大滿貫 Dst: 113.21 km Time: 5:08:32 Max: 59.5 km/hr Avg: 22 km/hr Avg heart rate: 168

沖牙機

圖片
人的嘴裡有32顆牙, 植牙一顆報價大概5萬up, 所以每個人隨身都帶著160萬在路上走 這麼值錢的東西, 多花點心思讓他不要壞才是長治久安的做法... ---- 先前因為蛀牙抽神經, 加上兩顆蛀牙緊鄰, 做了一個牙套罩住兩顆牙 這個牙套的密合度沒有很好, 兩邊老是會卡食物, 我隨身會帶著牙線棒清潔 牙線棒的線很脆弱, 有一次竟然斷在裡面, 卡了好幾天, 牙齦痛得要命跑去找牙醫求救 帥哥醫生人很好, 很快就幫我夾出線, 立馬就不痛, 立刻見效大概就這麼回事 醫生還順便教我正確的刷牙方式, 說來慚愧, 長這麼大第一次學會正確的刷牙方式 用這招刷牙, 果然牙菌斑了很多. 這次看牙醫收獲滿滿, 之後再補一篇推薦這間診所 同時帥哥醫生發現我的牙套罩住兩顆牙, 中間的地方, 那個牙齦的狀況不大好 一年多了, 原來這個地方也要清潔 (不是罩住就沒事嘛 ?!) 我需要用"牙線穿引器", 他的頭很硬能穿過牙縫, 後面的環能夾帶軟軟的牙線穿過牙縫 牙線在裡面清了幾下, 線上就沾滿了牙齦的血, 看來這裡再不好好照顧, 最後會壞掉得植牙... 牙醫師不推薦用牙線棒, 因為不小心還會斷線卡在牙縫裡 (笑) 牙線是萬年流行款, 這個可以清得很乾淨, 不過大概是我懶, 始終不想學會 某次回老婆家, 岳父推薦我用沖牙機, 也就是這篇文章要講的東西 (鋪梗還鋪真長) ---- 沖牙機長得像下圖, 他有一個水箱, 底下的轉鈕能調強弱, 水柱會從噴嘴射出 一秒大概噴3次左右(間歇的), 利用水柱清潔牙縫, 為了效果要好, 強度還不能太弱 剛開始用我覺得不大習慣, 因為水柱噴到牙齦其實滿痛的 牙齦被水噴會出血, 表示這個地方牙齦強度比較弱, 原因可能是牙縫卡了食物滋生細菌 機器的說明書表示, 出血代表有潛在的牙周病, 沖牙機能清潔牙縫 (雖然手法有點粗暴) 細菌沒材料(食物)生長, 牙齦會自己恢復健康, 流血的狀況就會改善 其實我一直都沒有好好照顧牙齦, 所以第一次用, 噴得滿嘴都是血... 先前提到我有做一個牙套, 有一個很難照顧的牙縫, 噴一噴效果很好 我無法證明牙齦在使用後變健康, 只能說用了一陣子, 現在很少流血 用正確刷牙方式, 大幅降低牙菌斑, 再加上沖牙機, 目前自我感覺良好中