發表文章

Google C++ coding style一點心得

最近開始跟google的工程師做code review 真的是被電得一蹋糊塗阿 對方看得非常仔細,而且提出了很多我程式邏輯不太通順的地方 雖然很多起因是我照之前sample code的邏輯硬是下去改 但的確後續我就沒有特別思考前後是否功能有重複或是多餘的部分 這邊被對方找出非常多問題出來 可以感覺google對沒有用的程式碼非常在意 當然也有可能是這個reviewer自己本身很討厭多餘的東西放在code裡面 除了註解要寫得盡量清楚之外 程式本身可以越精簡越好 我本身對C++並不是很熟悉,常會用C語言的方式硬幹 但是的確對用C++的人來說是很笨的做法 有幾個點特別被點出來,紀錄一下以免以後忘記 1.Google C++不使用#define,改用const 原因是似乎是要預先pre-compile,會多耗資源 2.傳引數使用call by reference而不使用call by value http://wp.mlab.tw/?p=176 原因是會浪費很多記憶體空間 尤其我笨笨的傳struct進去函數裡面,非常糟糕 call by reference就是變數的address跟value在上層跟下層函數都會是一樣的 就不會浪費多餘的空間去記憶 3.class裡private的變數後面要多加"_"做為區別 4.函數名稱使用大寫例如PerformUpdate() 5.區域變數使用小寫加"_",例如video_image_version 6.const前面要多加"k",後面用大寫,例如kDefaultVideoDeviceMountPoint 7.行尾空白鍵要去除

打通新板子上uboot & kernel的網路IC

這次新版子回來有遇到網路不太通的狀況 老闆在kernel做了一些rgmii phy clock delay的調整 主要是透過delay對clock做一些校正 讓icplus ip1001這顆IC的clock可以對準一點 另外uboot應該也是做了同樣的事 這樣網路才可以正常運作 這是一個好的經驗學習,下次要記得有這些東西可以調整

如何建立chromium firmware updater測試環境

圖片
最近都在搞chromium的firmware updater 雖然在https://www.chromium.org/chromium-os/developer-guide 算是寫得蠻詳盡的 但是實際上測試環境要搞起來還是花了一番功夫 chromeOS為了不讓人隨便埋一些code進去駭客 還是需要做一番設定才可以把你的source code丟到目標機台上 不像一般linux環境只要可以cross compile就可以把程式丟到目標版上去執行 1.下載depot_tools (裡面有bootstrap的設定要做,不然後面檢查檔案時會出現permission denied) 2.下載chromium OS(使用repo而非git,相關的套件可以透過apt-get取得) 3.export depot_tools,這樣才可以使用cros_sdk進入chormiumOS的compile環境 4.執行cros_sdk後可以看到~/trunk/src/script$,目的是確保每一份chromiumOS都是在相    同的環境下被compile出來 5.build image,一定要是test版本的,這樣後續才有SSH功能可以上傳檔案,會產生一個    chromiumos_test_image.bin    (做之前做好確定一下空間有4GB以上,而且需要兩三個小時的時間)    (參考https://www.chromium.org/chromium-os/developer-guide "Building    ChromiumOS"的順序一步一步來即可) 6.製作USB開機碟,在windows上可用chrome下載Chromebook Recovery Utility    將image給燒錄進去USB隨身碟 7.使用USB開機碟開機(chromiumOS主機需打開這個功能,須進入developer mode)     (default帳號是chronos,密碼是test0000) 8.package要cros_workon --board=${BOARD} start ${P...

在嵌入式linux系統中使用android adbd,PC可直接透過USB對console下指令

可以參考這一篇 http://www.cnblogs.com/zengjfgit/p/6289873.html /* ************************************************************************ * android-tools adb for ARM Linux * 说明: * 有时候还真是系统通过USB线直接连接到ARM主板,这样就不一定需要网络才 * 能传输文件,在做系统更新的时候,有时候也是不错的。 * * 2017-1-16 深圳 南山平山村 曾剑锋 *********************************************************************** */ 一、参考文档: 1 . [Buildroot] [PATCH v4] android-tools: add new package http: // lists.busybox.net/pipermail/buildroot/2015-November/145112.html 2 . Linux modules install http: // www.cnblogs.com/helloworldtoyou/p/6180404.html 二、内核配置: .config - Linux/arm 3.0 . 35 Kernel Configuration ────────────────────────────────────────────────────────────────────────────── ┌────────────────────────── USB Gadget Support ───────────────────────────┐ │ Arrow keys navigate the menu. <Enter> selects submenus ---> . │ │ Highlig...

bash:偵測程式pid消失後自動執行

測試小程式 當aplay pid消失後,程式會偵測到pid消失 然後再執行 pidof可以偵測程式的pid 無限while loop也可以這麼寫 #!/bin/sh aplay -D plughw:1 /mnt/shield/song.wav -v & arecord -D plughw:1 -r 48000 -c 2 -f s16_le  /mnt/shield/test.wav & while : do     pid1=$(pidof aplay)     pid2=$(pidof arecord)     echo aplay=$pid1 arecord=$pid2     if [ -z $pid1 ]; then           kill -9 $pid2         rm -fr /mnt/shield/test.wav         aplay -D plughw:1 /mnt/shield/song.wav -v &         arecord -D plughw:1 -r 48000 -c 2 -f s16_le  /mnt/shield/test.wav &     else         sleep 1     fi       done

lighttpd + fcgi + C language to do file upload & download

最近使用lighttpd當作http server 搭配fcgi來寫檔案上傳跟下載功能 比較討厭的是,html我完全不會寫啊~~~ 還有fcgi的範例也非常地缺乏 其他語言有很多相關API可以使用 C語言的話就得要自己寫 這邊就講一下是怎樣實現的 首先是下載的部分: 一開始得先要有個html給人下載 可以使用下面的範例             printf("Content-type: text/html\r\n"             printf("<hr />");             printf("<a href='/download/?message'>message</a>");             printf("<hr />"); 當有人點選"message"後會跳轉另一個網址 之後可以利用queryString = getenv("QUERY_STRING"); 去判別server跳轉進來的下載網址 此時需要提供另一個html告訴browser要下載東西             printf("Content-type:   application/octet-stream\r\n");                       printf("Content-Transfer-Encoding: Binary\r\n");             printf("Content-Length: %d\r\n", size);                     ...

在shell script執行某程式之後判斷是否成功

sh /etc/init.d/rcS if [ $? -ne 0 ]; then     /sbin/check 1; fi $?  is the exit status of the most recently-executed command; by convention, 0 means success and anything else indicates failure.