瀏覽模式: 普通 | 列表
09
05

SQLite-麻雀雖小五臟俱全

前一陣子寫裝置管理軟體時,曾經有考慮過使用SQLite這個database,因為它的優點是簡單易用,體積小(56k),記憶體使用量少(100多k),所以我曾經寫一堆wrapper API,把它封裝成方便工程師呼叫的函式,不過後來因為效能和系統整合的考量,又寫了另外一套管理的軟體取代掉先前寫的東西,其實自從離開學校開始工作後,幾乎一個程式都會寫好幾個版本互相比較效能,看看有沒有一個time complexity 和space complexity的平衡點,所以我覺的在學校演算法的基礎要打好一點,ACM多玩一點,對自己幫助很多,不過最好的是能碰到功力高強的同學一起切磋,進步幅度會很快

[閱讀全文]

標籤: embedded
09
04

Expat+SCEW-操弄XML的瑞士刀

之前處理XML文件時,就是用這套工具橫行江湖,Expat提供細緻的函式讀寫xml文件,SCEW則是把Expat函式包裝成亮麗的界面供使用者更方便的存取xml,個人覺的,這兩套函式庫實在不輸給.net System.xml下的API

首先下載expat libraryscew library,這兩套軟體的使用方式很簡單,執行configure,make,make install後,就可以使用它們的library,而我這邊的範例編譯時用static link,所以我都直接連接它們的.a函式庫檔

Makefile的範例如下

  1. ALL : example 
  2.  
  3. example : example.c 
  4. $(CC) -I./scew-0.4.0/scew/ -o example example.c libscew.a libexpat.a 
  5. clean :
  6. rm example

[閱讀全文]

標籤: linux
09
03

lighttpd+CGI+ipkg-遠端韌體更新的好幫手

寫這篇文章時,我突然想到周星馳演的一部電影,”國產007”,裡面有位”國家級研究人員”,研發了一種集10種不同殺人武器的兇器,好像叫”要你命3000”,結果這人間兇器一拿出來,居然是把什麼菜刀,電鋸,王水…等,通通用繩子綁在一起,哇靠,看到這樣的”武器”真想馬上飆髒話,不過這樣的武器倒也蠻搞笑的,能不能拿的動還是問題

話題回到這篇文章的主題”遠端韌體更新”,以後簡稱為”UI upgrade”,在一般網路裝置上,最常看到的,就是提供網頁的介面讓使用者更新網路裝置的韌體,而這樣的功能在實作上需要準備
(1)Web server:lighttpd or goahead web server(goahead已經不更新它的web server)
(2)可更新目標板軟體的工具:ipkg or busybox dpkg
(3) html和cgi:自己寫
實做時我選擇lighttpd+ipkg,而網頁的部份採用html+cgi,以下會分為三段介紹這三個實作

[閱讀全文]

標籤: embedded
09
02

Shared library on embedded platform-以ARM9和uClibc為例

在講解UI upgrade之前,先談談Linux的shared library,因為這對往後要交叉編譯的應用軟體是蠻重要的事情,在四,五年前,ARM一直都以NO MMU姿態出現在各個不同的嵌入式平台,所以當時所有的可執行檔都編成static binary外加去頭(用objcopy把elf頭檔幹掉),這樣做是因為NO MMU的LINUX不能吃ELF格式的可執行檔,而近幾年ARM with MMU支援的平台越來越多,所以很多人把應用軟體諸如busybox, lighttpd…等都編譯成shared binary elf格式的可執行檔

[閱讀全文]

標籤: embedded
08
29

用pure C寫CGI的輔助工具-CGIC library

如何善用現有的library增快自己開發程式速度是現代工程師的課題,其實從我開始寫程式以來,大部份的動作,都是剪剪貼貼,看到不錯的演算法,就剪貼,看到能解決我問題的方案,也剪貼,我覺得只要能看得懂程式,就不算太嚴重的抄襲,甚至我可以補足這個程式某些沒有的功能,或加強程式的演算法,這些都能提昇我個人程設能力的credit

好了,廢話說太多了,這篇文章主要是介紹如何用c語言快速的寫出CGI程式,而我用的library就是大名鼎鼎的CGIC,這個library簡化了form與cgi溝通時所需要撰寫的複雜程序,工程師只要專注在不同type物件的name及value欄位即可

[閱讀全文]

標籤: linux
08
27

SQUASHFS-Linux壓縮型檔案系統的王者

squashfs是眾多Live CD使用的檔案系統,Why?因為它那嚇死人的壓縮率,舉個例子,以筆者製做的root file system為例,壓縮過後的initial ram disk大小為1.3MB,但squashfs製做出來的file system image只有500多k,squashfs image居然只有compressed initial ram disk image一半的容量,這種節省儲存空間和記憶體空間的檔案系統,最適合在台灣用了,因為代工廠最需要的cost down,這種軟體技術做到了在小容量記憶體系統中放大檔案的可能性

[閱讀全文]

標籤: embedded
08
27

RAMFS檔案系統-Linux 2.6的新朋友

ramfs可能是我目前看過最容易上手的linux檔案系統,設定的方法非常簡單,進入kernel選單後,只要勾選[Initial RAM file system and RAM disk (initramfs/initrd) support]和設定Initialramfs source file,就可以在編譯kernel時把file system和kernel一起打包,設定的方法大致如下圖

[閱讀全文]

標籤: embedded
08
26

CS8900A Linux驅動程式介紹

記得之前在面試某家CHIP Vendor時,面試官對我之前寫過的(應該是抄過的)S3C4510b網路驅動程式很有興趣,他很詳細的問我每個流程,而且還不准我看資料必需馬上回答他,說老實話,S3C4510B的網卡驅動有點小複雜,再加上我已經有一段時間(2,3年)沒碰S3C4510B,整個驅動的細節幾乎都忘了,不過我還記得我開發S3C4510B driver的大概流程

首先針對開發板寫driver時,我都會用ADS搭ICE寫Boot code開始,然後再一步一步新增driver code測試,像4510b上面的UART, nor flash, network,都是慢慢堆積起來的,而這樣邊寫邊看datasheet會讓自己學到很多東西,我覺得一開始寫driver的環境最好不要搭OS,用最乾淨的環境測試,問題會少很多,只要專注在硬體控制就可以了,而且實驗板大部份都通過QC,需要請示波器出來的情況幾乎沒有

[閱讀全文]

標籤: embedded