Hung-Ming Chen's Blog

星期日, 12月 13, 2015

Setup STM32 Development Environment in Linux

Setup STM32 Development Environment in Linux

1. Download Tools 

1.1 Toolchain: GCC ARM Embedded
Website: https://launchpad.net/gcc-arm-embedded
This toolchain for linux is 32bit. We need lib32 packages for ubuntu 64bit
# sudo dpkg --add-architecture i386
# sudo apt-get install lib32ncurses5

1.2 STLink utility
Requirement: automake, libusb-1.0-dev
Install:
  • ./autogen.sh
  • ./configure
  • make; sudo make install
Copy "49-stlinkv2.rules" to /etc/udev/rules.d/ 
Restart udev without reboot
udevadm control --reload-rules ; udevadm trigger
Unplug and plug usb cable to STM32 board. 

1.3 GNU ARM Eclipse plugin
Recommended Eclipse version is 4.4 SR2 (Luna)
Install: Eclipse -> Help -> Install New Software

1.4 OpenOCD
Requirement: libftdi-dev
Install:
  • ./configure --enable-verbose --enable-vernose-jtag-io --enable-ftdi --enable-stlink
  • make; sudo make install

2. Create a New Project

Project -> New -> STM32F4xx C/C++ Project

Set "Flash size" and "External clock" for your board. STM32F429 Discovery has 2MB flash and 8MHz clock. Use "semihosting DEBUG channel"for trace output (or use "None" for smaller code size).



3. Debug Settings

  • add an openocd debug session
  • set openocd executale location
  • set gdb executable location

星期日, 12月 14, 2014

QTCreator ARM Remote Debugging

1. 編譯 GDB for Qt Creator
下載 Qt Creator source code
  • git clone --recursive https://git.gitorious.org/qt-creator/qt-creator.git
若需要搭配特定版本 Qt Creator, 可以從SourceForget下載壓縮包, 或是 git checkout 切換至特定版本.
直接進入 qt-creator/dist/gdb 目錄, 已經預先定義好 Makefile.linux, Makefile.mingw (windows)與 Makefile.osx 三種 OS 下的 Makefile, 以下皆以 linux 環境做說明.

編譯前先編輯 Makefile.linux, 可以看到支援三種不同的 target codes:
  • targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi
我試過 Arch Linux/Ubuntu 上的 gdb 可以直接使用, 所以留下 arm 版本即可 
targets=arm-none-linux-gnueabi
接下來是編譯
  • make -f Makefile.linux
過程中會自動下載 gdb 與 python 的 source code
編譯完成後也會自動打包 qtcreator-gdb-7.8-linux-x86_64.tar.gz
這邊的 linix-x86_64 是 host 的執行環境. 壓縮包解開後的內容為
  • python/
  • gdb-arm-none-linux-gnueabi
將以上檔案搬到適當位置即可

最後是 datadir, gdb-arm-none-linuxeabi 預設的路徑是 /usr/local/share/gdb, 然而 host 環境的檔案卻是在 /usr/share/gdb, 我的作法則是建立 symbolic link
# sudo ln -s /usr/share/gdb /usr/local/share/gdb
如果沒有設定則會導致本地端 gdb 啟動失敗

2. 設定 Qt Creator
如果要進行 arm 平台的 qt remote debugging, host 環境當然就要有對應的 cross compiler 與 arm 版本的 Qt library 與工具. 我使用的是 buildroot 搭配 code sourcery toolchain 產生 root filesystem 與 Qt library, 其中要特別注意的是, 為了佈署執行檔, arm 端還需要支援 ssh server 與 sftp server, 最簡單的作法是 buildroot 中直接加入 openssh

Qt Creator 中的設定包括 compiler, gdb, kit 與 remote device
Options -> Devices
設定 arm 端的 IP address, ssh user name, password/key; Free ports 是給 gdbserver 可以使用的範圍. 設定完成後可以用右方的 'Test' 確認連線設定是否正確

Options -> Build & Run
Compilers -> Add -> GCC, 設定 cross compiler g++ 路徑

Qt Versions, 設定 qmake 路徑

Debuggers, 指向前段自行編譯的 gdb for Qt Creator
Kits
選擇 device , compiler, debugger, 與 Qt version

最後是 arm 端使用的 gdbserver 有兩點要注意, 首先需要支援 '--once' 這個參數, 如果 toolchain 有提供可以直接使用, 或是到回到 qt-creator/dist/gdb 中, 自行手動編譯 gdbserver; 第二點是 Qt Creator 並不會幫你佈署 gdbserver, 要直接放在 arm 的 root filesystem 中, 一般安裝路徑是 /usr/bin/gdbserver, 或者是 ssh 登入後 $PATH 找得到的位置即可


星期五, 12月 12, 2014

SPA3000 設定筆記

NAT穿透
    Line 1-> NAT Keep Alive Enable: yes

台灣來電顯示及電話規格
    Regional
        Distinctive Ring Patterns
            Ring1 Cadence: 60(1/2)
        Ring and Call Waiting Tone Spec
            Ring Voltage: 70
            Ring Waveform: Sinusoid
        Miscellaneous
            Caller ID Method: DTMF(Denmark)
    PSTN Line
        FXO Timer Values (sec)
            PSTN Answer Delay: 2 (2秒延遲, 來電顯示解析完成後才呼叫sip)
        PSTN Disconnect Detection
            Disconnect Tone: 480@-30,620@-30;1(.5/.5/1+2)
        International Control
            FXO Port Impedance: 320+1050||230nF
            SPA To PSTN Gain: 2
            PSTN To SPA Gain: 6

PSTN-to-VoIP
    PSTN Line
        Network Settings
            Network Jitter Level: low
            Jitter Buffer Adjustment: disable
        Proxy and Registration
            Register: no
            Make Call Without Reg: yes
            Ans Call Without Reg: yes
        Dial Plans
            Dial Plan 2: (S0<:userid your.sip.server="">)
        PSTN-To-VoIP Gateway Setup
            PSTN-To-VoIP Gateway Enable: yes
            PSTN Caller Auth Method: none
            PSTN Ring Thru Line 1: yes
            PSTN CID Number Prefix: <空白>
            PSTN CID For VoIP CID: yes
            Off Hook While Calling VoIP: no
            PSTN Caller Default DP: 2 (Dial Plan 2)
            Line 1 Signal Hook Flash To PSTN: Disabled
    Line 1
        Network Settings
            Network Jitter Level: low
            Jitter Buffer Adjustment: disable
        Proxy and Registration (註1)
            Proxy: sip.linphone.org (或其他已有註冊帳號之sip server)
            Register: yes
            Make Call Without Reg: no
            Ans Call Without Reg: no
        Subscriber Information
            Display Name: user name
            User ID: userid (sip server註冊帳號)
            Use Auth ID: no
        VoIP Fallback To PSTN
            Auto PSTN Fallback: yes (註1)
    註1: 向sip server註冊失敗時 (例如斷電或網路不通), Line1可以直接PSTN撥號
        因為我手機使用同一sip server的userid,所以連不上sip時一定也叫不到, 故 Make Call Without Reg設為no
   
   
熱線與外線
    Line 1
        Dial Plan
            DialPlan: (<888:userid sip.server="">|<#0:>S0<: gw0="">|xxxxxxxx.)
            話筒拿起撥888可直接呼叫 sip user
            話筒拿起先撥 #0, 聽到 Tone 後用 PSTN 撥外線
           
           

星期二, 8月 26, 2008

2008 北海道夏季賞花之旅 - Day 1 (07/31) (續)

離開 [札幌開拓使 Factory 店], 接下來的行程是要到 [藻岩山] 看夜景, 路上再次經過大通公園, 電塔也點上了燈光, 這時我們才注意到塔內有電梯可以通往上層的展望台, 想必又是要收費的, 加上行程時間有限, 拍完照便匆匆趕往電車站



我們在 "西四丁目" 站搭乘 "札幌市電", 這是一種地面上的輕軌電車, 行駛的時候跟一般車輛一樣要遵守交通號誌, 相當特別. 下車站是 "ロープウェイ入口", 還要步行約10分鐘後才到達纜車站, 下面是入口的招牌





我們買的是1100日圓的來回票, 纜車空間還蠻大的, 約可承載 25 人. 隨著高度攀升, 眼前的視野突然就變的很開闊, 夜景也是棒的沒話說, 不過當晚的天氣狀況陰陰的, 山頂上有一層雲霧攏罩. 等纜車到達終點時, 夜景已經變得很朦朧, 而且角度也被樹林擋住大半. 下了纜車後, 工作人員指示遊客前往搭乘免費接駁巴士前往山頂展望台, 展望台的視野雖然沒有被樹林遮蔽, 但能見度比在纜車站還慘, 而且山上的氣溫感覺大約只有12, 13度, 我們沒準備厚重衣物, 看了幾眼就離開了. 結果看夜景最好的角度居然是在半山腰, 有了經驗後, 在回程時趕緊搶好位置拍照

標籤:

星期一, 8月 18, 2008

2008 北海道夏季賞花之旅 - Day 1 (07/31)

感謝 Lens 的新光無限卡, 有免費的機場接送服務, 免去了自己開車停車的煩人事情

因為抵達北海道的時間已經是下午了, 所以第一天的行程比較少. 從新千歲空港出關後, 從長榮假期服務人員手上接過 JR 往札幌的單程交通券跟旅遊資訊後, 就趕去搭車了.
頭兩天住的是札幌市薄野 (すすきの) 的東急Inn (東急イン).


東急Inn外貌. Lens剛好從飯店走出來

薄野其實是札幌市吃喝玩樂的熱鬧地區, 附近有百貨公司, 狸小路商店街, 餐廳等等, 可惜我們這些來匆匆去匆匆的觀光客沒多少時間在這邊逛

第一個停留的景點是大通公園. 大通公園其實是個長條狀的綠園道, 末端看到的是電視台訊號發射塔, 因為剛好有爵士樂表演活動, 照片中白色半球體則是臨時搭設表演場地與展覽館



繼續前行, 來到了札幌市時計台(簡介). 札幌市民似乎以擁有該時計台感到驕傲, 市區內甚至還有為數不少的 [味の時計台] 連鎖拉麵店, 然而實際到了該景點後卻是一整個失望, 甚至還被日本票選為 [十大令人失望景點之首], 還好我們只是順路經過.



接下來才是當天晚餐的重點: 札幌開拓使 Factory 店. 該建物是一棟由紅磚建造的倉庫, 早年用來存放啤酒, 現在則改建成啤酒屋. 外牆的整片爬藤看起來超有特色的



進到了裡面才發現原來餐廳內還分成 [啤酒屋區] 跟 [成吉思汗烤肉區], 而兩區的菜單則是分開的, 本來打算吃成吉思汗烤羊肉的, 因為想吃 Pizza 所以就改坐 [啤酒屋區]. 我們點的菜有: 羊肉陶板燒, 羊肉 Pizza, 馬鈴薯


(Lens提供)

這裡的羊肉真是超好吃的, 沒有羊騷味, 而且又軟嫩, 早知到應該到隔壁的成吉思汗烤肉區吃烤羊肉放題(吃到飽),

(Lens提供)


(Lens提供)



飲料則是來此必點的生啤酒, 種類超多, 我跟Joyce點的是北海道限定生啤酒, Lens 選了黑麥生啤酒, 這東西果然還是要用吧檯啤酒機現打出來的才好喝, 罐裝的味道完全比不上



酒足"肉"飽之後, 到外頭再看一眼, 這時候已經點燈了


標籤:

星期三, 8月 13, 2008

2008 北海道夏季賞花之旅 - 行程大綱

因為太晚訂機票的關係, 買了很貴的長榮假期機+酒, 來回機票跟札幌兩晚的住宿就要台幣 30000+

Day 1: 台灣 -- 新千歲空港 -- 札幌 -- 晚餐: 啤酒園 Factory 店 -- 藻岩山夜景.
住宿: 東急Inn

Day 2: 札幌 -- 舊道廳 -- 白色戀人工廠 -- 札幌 午餐: Voyage 湯咖哩 -- 百合公園 -- 小樽三角市場 -- 小樽運河 -- 晚餐: 魚真壽司.
住宿: 東急 Inn

Day 3: 札幌 JR 租車 -- 北瀧向日葵之里 -- 旭川 午餐: 梅光軒拉麵 -- 美瑛 四季彩之丘 -- 中富良野.
住宿: 步風里民宿

Day 4: 中富良野 富田農場, 北星山町營薰衣草園 -- 富良野 午餐: 森之時計咖啡館, 起司公園 -- 南富良野 金山湖 -- 麓鄉 麵包超人專賣店, 麓鄉展望台 -- 富良野 晚餐: 唯我獨尊(咖哩).
住宿: 步風里民宿

Day 5: 中富良野 北星山町營薰衣草園 -- 彩香之里 -- 富良野 葡萄酒工廠, 午餐: 魔女的湯匙(咖哩) -- 上富良野 日出公園 -- 美瑛 四季彩之丘 -- 十勝岳 望岳台.
晚餐&住宿: ヒュッテバーデンかみふらの

Day 6: 十勝岳 -- 三笠 桂澤湖 -- 札幌 JR 還車 -- 新千歲空港 午餐: 美食街 -- 台灣

標籤:

星期一, 5月 28, 2007

GTK+ and SDL

在 GTK+ 的框架中要顯示 SDL 還真是個麻煩的東西, 只能顯示一個 surface 就算了
初始化的順序, GtkWindow 的屬性也要小心設定
偏偏這些東西在 Google 找了半天都找不到, 只能自己慢慢 try
  1. GtkWindow 的初始位置要改成 CENTER
  2. 負責顯示 SDL 的 GtkWidget 要在上層的 GtkWindow 顯示 (gtk_widget_show()) 前先實體化 (gtk_widget_realize())
  3. 3. SDL hack window ID. 用 GDK_WINDOW_XWINDOW 取得 widget 的 window ID, 放到環境變數 SDL_WINDOWID 後才能執行 SDL 初始化 SDL_Init()

小雄, 陪伴我倆十年的狗兒子, 5/7 那天離開了我們
一個月前得知他罹患心臟病時, 知道他陪伴我們的日子可能不多了
但怎也沒想到離別的會來的如此之快, 全然地措手不及
眼淚流了又流, 再怎麼用力呼喚也喚不回拭去的生命
人生中第一次感覺到生命是如此的脆弱

村上春樹在『挪威的森林』中寫道:"死不是生的對極,而是潛存在生之中。"
現在, 我慢慢能夠理解這句話的函意