目前分類:學習 (26)

瀏覽方式: 標題列表 簡短摘要
 
最近的幾個月裡,都在從事軟硬體間的程式設計,雖然我懂得不多,但是經過一段時間的摸索之後也找到了一些解決問題的方法。雖然從前的我,只會寫軟體程式,也從來沒有想到我會接觸到這個領域的東西,但是經過這幾個月的努力終於有了一些小小的收穫。
 
我所使用的實驗平台是S3C2440A開發板,外觀如下圖:
 

CJY0503 發表在 痞客邦 留言(4) 人氣()

 
最近的幾個月裡,都在從事軟硬體間的程式設計,雖然我懂得不多,但是經過一段時間的摸索之後也找到了一些解決問題的方法。雖然從前的我,只會寫軟體程式,也從來沒有想到我會接觸到這個領域的東西,但是經過這幾個月的努力終於有了一些小小的收穫。

這篇文章並沒有打算從一開始使用ADS去建立boot loader開是講起,也不會跟大家解說如何使用ADS這個開發工具,我們假設你已經在你的ARM平台上已經完成了boot loader的工作(關於boot loader日後如果有機會在另一篇文章中報告我的心得,關於ADS的使用心得我也會在另一篇文章中加以描述。),並且已經安裝上Linux作業系統,所以這篇文章所要跟大家說明的事是如何建立Linux環境下的開發環境,並且編譯出一個能在ARM平台上能夠執行的程式。
 

CJY0503 發表在 痞客邦 留言(1) 人氣()

 
最近的幾個月裡,都在從事軟硬體間的程式設計,雖然我懂得不多,但是經過一段時間的摸索之後也找到了一些解決問題的方法。雖然從前的我,只會寫軟體程式,也從來沒有想到我會接觸到這個領域的東西,但是經過這幾個月的努力終於有了一些小小的收穫。

我記得在這幾個月裡接觸了不少硬體的東西,ARM 9的平台、8051的系統還有一些單晶片的MCU,我也到處向人請教,四處要求協助,最遠曾跑到台南去向技術人請教硬體的設定。我真佩服那些硬體的專業人員,面對複雜的線路圖還能處變不驚,一條一條的理出頭緒,他們看著線路圖就能檢查出版子到底出了什麼問題,他們量著板子上的訊號就能知道目前的運作狀態。我現在也嘗試著利用儀器去了解目前開發板到底發生了什麼問題,去查出到底是什麼原因讓機器無法正常運作。進一步,我現在稍稍學會了看著線路圖上的訊號去撰寫程式,我現在已經會控制簡單的GPIO訊號,並且了解其中的對應關係。

CJY0503 發表在 痞客邦 留言(0) 人氣()

 
VC++ 2005編出來的程式無法在WINXP下執行,這件事情竟然困擾了我一個下午。我花了一個上午的時間將我的程式編譯完成,並且可以在我的電腦上正常運作,但是將這個程式拿給別人時,竟然出現"由於應用程式配置不正確,應用程式未能啟動,重新安裝應用程式可能可以解決這個問題"的提示對話框,我所撰寫的程式無法執行。
 
我第一個直覺動作就是換一台電腦試試看,於是從WINXP換成WIN2000上執行,結果發現WIN2000出現不同的錯誤訊息。但是這個錯誤訊息卻比較好解決,因為我看的懂。主要是說找不到一些動態連結檔,於是我把該程式需要的動態連結檔(dll)複製到WIN2000那台機器上,結果就可以執行了。於是我又將這包程式,當然包含那些動態執行檔(dll)複製到WINXP的作業系統上,結果依然不能執行,而且出現和之前一樣的錯誤。出現"由於應用程式配置不正確,應用程式未能啟動,重新安裝應用程式可能可以解決這個問題"的提示對話框。於是我又開始懷疑是不是.net framework ,於是在WINXP上安裝.NET Framework 2.0,結果仍然出現相同的錯誤。明明是相同的程式,而且都是在微軟的作業平台上執行,竟然因為作業系統的不同而不能執行。
 

CJY0503 發表在 痞客邦 留言(2) 人氣()

 
UML是透過一些圖表來描述程式中資料的關係與流程,根據這些圖表可以自動產生程式碼。如果你的Python程式學的夠徹底,你應該知道Python程式有一個叫class的資料型態,這裡的class指的就是這個東西。 其他語言如C++或Java中也存在class這樣的資料型態。 一個class中包含一些成員變數和成員函式。class包含三個欄位,最上面的那個欄位置的是class的名字,中間是存在於該class的成員變數,最後一個欄位指的就是成員函式(method方法)。
 
 大致上class與class之間有一些特定的關係,這是建立在物件導向程式設計的基礎上所得到的一些關係。這些關係包含︰繼承、衍生和組合(UML class中的連線)。一個package可以存在若干個class,如圖一,Content包含title含text兩個class左邊在描述title的class,右邊在描述text的class。另外圖一還描述了text和title這兩個類別(class)是從object這個class繼承而來,object是text和title的父母。圖一的例子︰描述了兩個class,其中text那個class包含一些存放資料變數,abstract_text, text_title, body, key_word 和 index,這些資料放在UML class中間的那個欄位就可以了。其中這個class提供了5個方法,讓使用者可以設定上面這些變數的值,例如︰getAbstract() 可以取出文字的摘要,setAbstract()可以設定文字摘要。
 

CJY0503 發表在 痞客邦 留言(0) 人氣()

 
How to Extend and Embed the Python Interpreter
 
這篇文章主要是將之前所研究"關於C++擴展與嵌入Python"的問題做歸納與整理,一般編寫Python C/C++ Module(模組),或者為C/C++ lib編寫Wrapper,我所看到的有以下幾種方式,可以在文章1找到一些相關資料,裡面提到一些工具的使用,例如:SWIG, Boost等等。文章2以一個範例來說明如何編寫Python C/C++ Module,或者為C/C++ lib編寫Wrapper,裡面談到我所使用的工具和include library,如:python23.lib或python24.lib甚至是python25.lib,這些函式庫你可以在C:\PYTHON23\libs或C:\PYTHON24\libs或C:\PYTHON25\libs目錄下找到。在linux的環境下應該可以使用gcc,並include /usr/include下面的資料來編寫Python C/C++ Module(模組),或者為C/C++ lib編寫Wrapper,而函式庫可以在/usr/lib或/usr/local/lib中找到。在Windows環境中要達到C++擴展與嵌入Python可以透過dll,文章3給一個實際的範例來說明lib與dll如何產生,如何利用c/c++擴展python的能力。文章4說明如何在python 2.5中產生lib,以及編譯出來的dll該如何修改,並且要放在哪裡才可以被執行。相信讀完上面的四篇簡單的文章之後,你對"關於C++擴展與嵌入Python"的問題應該更得心應手,對python如何透過動態聯結(dll)與c/c++建立新的Module應該有比較清楚的觀念與想法。

CJY0503 發表在 痞客邦 留言(0) 人氣()

 
 
日前參加行動裝置應用大賽,目的在設計一個系統,可以透過行動裝置簡化生活上的一些瑣事,例如:購物、繳費或者資料查詢。
我們設計的一個音樂下載的平台,透過行動裝置下載並推薦使用者喜歡的歌曲,讓使用者隨處都可以聽歌,隨處都可以點歌。
我們描述手機端和伺服器端所包含的主要元件、各元間之間的關聯和各元件的功能以及用途。最後我們以一個實際的例子說明整個系統的運作方式和軟體的操作流程。

CJY0503 發表在 痞客邦 留言(1) 人氣()

 
什麼是cross compiler?就是在某個工作環境中產生另一個工作環境所能執行程式的工具軟體,例如:在微軟的Windoes平台上產生Linux平台上所能執行的程式,或者在x86的電腦硬體環境編譯出可以在ARM平台上可以執行的程式。我們在此所要建造的cross compiler環境是屬於後者,編譯完的程式是給其它硬體架構的機器執行。下面將簡單的介紹如何在Windows平台中打造一個可以編譯出ARM平台可以執行的程式。大部分的cross compiler工具都是在Linux上開發使用,在Windows也有一些辦法可以建立cross compiler的環境,你可以參考GNU ARM的網頁建立cross compiler的環境,或直接使用cygwin來建立工作環境。
 
所需要的軟體:
  1. cygwin
  2. cygwin-arm-cross-2.95.3

我所介紹的方法是使用cygwin在Windows上建立開發環境,首先先下載上述的兩個軟體,並安裝cygwin

Setp 1: 下載cygwin

 

Setp 2: 選擇直接從網路安裝(Install from Internet)

 

Step 3:  選擇你的安裝路徑

 

Step 4: 選擇Direct Connection 

 

Step 5:  選擇要從哪裡下載軟體,當玵選擇一個速度比較快的網站

 

Step 6:  選擇想要安裝的套件,建議安裝Devel中的gcc函式庫與核心,make程式也安裝

 

安裝完成之後下載cygwin-arm-cross-2.95.3.tar.gz,將程式放在c:/cygwin檔案夾下(你安裝cygwin的地方),啟動cygwin,並利用cygwin將程式解開。執行cygwin進入命令視窗

$  tar -zxvf cygwin-arm-cross-2.95.3.tar.gz

將編譯程式解開會產生opt的資料夾

$ PATH=/opt/arm-cross/bin:$PATH

設定執行檔的路徑,這樣cross compiler的環境就已經建立完成,當你想將helloworld.c編譯成helloworld的執行檔並且在ARM上執行,你只要打入下面的指令,helloworld的執行檔就會產生。

$ arm-linux-gcc helloworld.c -o helloworld

 

CJY0503 發表在 痞客邦 留言(2) 人氣()

 
使用新版本的Python程式時發現無法使用擴充函式庫來擴充Python的library。
Python 2.5 的擴充函式庫,其檔名已經不能再使用XX.dll,而要將檔名改成XX.pyd否則無法使用。2.5版之前都可以使用XX.dll直接擴充函式庫。
 
 

CJY0503 發表在 痞客邦 留言(0) 人氣()

 
 
 
在進入嵌入式系統之前,必須要懂得如何將裝置與電腦連線,一般來說,大部分都會透過RS232來與裝置建立連線,透過RS232傳送資料並做程式碼的偵錯。利用C撰寫出從RS232讀取到資料並不是一件太困難的事,透過CreateFile()這個函數能讓我們很快的與裝置建立連線,下面列出簡單的程式碼供大家參考。
 

CJY0503 發表在 痞客邦 留言(1) 人氣()

 
現在程式設計都需要一個方便的使用者介面,不管這個程式是在電腦上運行或者要在手機上運行,視窗設計都是必要的一件工作。Python有提供一些方便的方法讓程式設計者可以輕鬆的建造出視窗介面,例如利用BOA工具軟體讓你產生視窗的控制環境。在微軟的程式設計中,視窗事件的控制與處理也是一大學問,微軟的VB(Visual Basic)提供簡便的方法讓程式設計者建造他們想要的視覺畫面,簡化視窗的建置程序。VB(Visual  C++)也提供工具讓設計者能夠建造出他們心中想要的視窗畫面(MFC)。在JAVA方面也有方法(SWING)讓設計者快速的佈置視窗所需要的元件(JFC)。
 
QT是一個跨平台的視窗設計函式庫,它的使用在Linux、Unix、MAC、Windows平台上面,更可以利用這個圖形函式庫來建立手機上視窗畫面。透過QT的設計畫面可以讓設計者快速的建設需要的視窗畫面。這篇文章簡單的介紹如何在Windows上安裝QT。
 

CJY0503 發表在 痞客邦 留言(0) 人氣()

 
 
 
因為下週要考試了,所以溫習了一些基本概念,準備考試囉。事實上,在計算機的領域中有許多東西,我常常忘了又看,看了又忘,150個專有名詞中有許多不常用的概念幾乎沒有什麼映像,還好翻一翻書,我總算恢復了一點點記憶,下面只列了部份資料,這些資料是我看完教課書之後所濃縮的一些概念,可以說是我自己做的心得筆記,有些概念可能只是很簡單的陳述,若想知道詳細內容,還是得自己去翻一翻教課書。因為專有名詞實在太多,目前暫時只先研究關於硬體方面的一些基本概念。
 

CJY0503 發表在 痞客邦 留言(1) 人氣()

 
 
 
Hash是一個很好用的資料結構,很多程式語言多可以看到它的存在,Hash的結構是由Key-Value所組成的資料,設計者只要根據Key值就可以取得資料,是一個相當方便好用的資料結構。

Perl Hash(Associative Array)

CJY0503 發表在 痞客邦 留言(0) 人氣()

 
 
 這是一個小小的遊戲程式,該遊戲程式包含了兩種模式。第一個是"遊戲設計"模式,另一個是"遊戲測試"模式。在"遊戲設計"模式中,遊戲設計者可以加入一些遊戲物件(如:小紅人和其他物品),並且利用滑鼠拖曳的功能在畫面中擺設這些物品。因為我不擅長於美工設計,所以我產生了一些英文字的圖片當做遊戲的物品。這個遊戲是利用小紅人這個角色去收集散落於畫面中的物品,只要集滿9個物品就算是遊戲結束。另外遊戲中有一個叫Energy(能量),這個東西會隨著小紅人的移動而減少,一但這個數值變成0,而小紅人尚未收集到9個物品,就算是任務失敗,並且結束遊戲。Energy這個數值,我們根據小紅人的移動方向的不同,而給予不同的數值。因為向上爬比較費力,所以減少的比較多,向下走比較省力,所以減少的比較少,左右移動減少的數值為兩者之間。Eq1所表示的資料就是上下左右所會減少的Energy值,目前這個數值並未提供設計設去變更,如果要讓遊戲設計者可以變更此設定值,需要撰寫一個介面供設計者變更當中的資料,如果有需要可以花時間撰寫。另外關於物品方面,目前只提供增加物品到螢幕畫面的功能,並沒有提供將某項物品從遊戲中移除的功能,如果有需要可以考慮撰寫此功能,這樣會使整個遊戲設計介面更加完善。Eq2所表示的資料結構為所有物品存放的結構,裡面的資料包含物品的名稱、顯示的圖示資料與擺設的座標位置。Eq3中所顯示的資料為小紅人的基本資料,包含位置、狀態(面向何方)、收集到的物品、他目前的Energy值。因為我怕物品還沒收集完畢,Energy值就歸0,所以將這個值設成10000。
 
self.energy_cost={'up':50,'down':10,'left':20,'right':20}                                                                                 (Eq1)

CJY0503 發表在 痞客邦 留言(4) 人氣()

 
 
 
 
 

CJY0503 發表在 痞客邦 留言(2) 人氣()

 
 
人的頭腦真是一部優秀的處理器,只要是學過的語言幾乎都能分析的出來,只不過有的人聯想力強,反應比較快,有的人聯想力差,但是只要多給一些提示仍舊可以知道句中隱含的意義。生活在多國語言環境的中國人,常常會聽到一些中英文混雜在一起的語言,如果只是中英文混雜在一起的句子,對於國中畢業的學生(只要英文單字學的不錯)大致上都可以知道對方到底想要跟你說什麼。我這裡所說的中文指的是國語,英文指的是美式英語。例如:我電腦的hard disk是100G。像上面我電腦的hard disk是100G這個例子一般人應該相當容易解讀與了解裡面的意思。在台灣有不少人喜歡說台語,尤其在職場上,為了拉進彼此之間的關係或其它理由,會以台語來溝通,但是他們也不完全使用台語,而是將台灣語、國語和英語三種語言混合起來講,相信這樣的語言要利用電腦的語音辨識技術來辨識裡面的內容時在相當不容易,一種語言的語音辨識對電腦來說就已經不容易了。如果是利用文字辨識的技術或許比較容易一些,因為不同的語言有不同的文字集合,雖然有些語言的文字會和其他語言的文字集合產生交集,但應該比語音訊號好處理一些吧。例如:我們 Dau din ki Taipei,意思是我們一起去台北。"我們 Dau din ki Taipei"這句話中,黑色字體表示國語,藍色字體表示台語,綠色字體表示英語。在台灣,母語教學的風氣越來越興盛,相信將來還會有一些山地同胞的母語加入其中。目前國小已經開始實施母語教學,這裡指的母語是台語,如果照這種情況來看,在台灣所有的國中畢業生對於這樣國語、英語以及台語三種語言混雜的句子應該也不是問題才對。感覺上好樣有點像日本,在日本外來與他們都不翻譯而直接取他們的發音,利用他們的50音直接拼出來,或許台灣的注音符號"ㄅㄆㄇ..."在將來會比方塊文字更有用。
 
現在有不少年輕的台灣人對日本或韓國的語言和文化頗感興趣,因此也將該語言容入他們平常的說話當中,例如:"你去給我拿蘋果和葡萄",他們不僅使用了國語、台語、英語,更加入了日語,關於台語、客語(客家話)以及日語,我用拼音方式表示,所以原來的那句話就變成: ki ga wa lin kuo and ku tou,在這篇文章中,我們只探討說話發音,並不在意各種語言的文字寫法。 ki ga wa lin kuo and ku tou這句話當中,黑色字體表示國語,藍色字體表示台語,橘色字體表示日語,綠色字體表示英語,紅色字體表示客語。我將這句話中所代表的個個東西翻譯中國語,表示"你", ki ga wa 表示"去給我", 表示"拿", lin kuo 表示"蘋果", and表示"和", ku tou表示"葡萄"。

CJY0503 發表在 痞客邦 留言(0) 人氣()

 
 
 
這個程式應該是目前我寫過最大的Python的視窗程式,雖然大但是卻沒做什麼事情,只是控制幾個不起眼的按鈕,跳出幾個設定的視窗介面。這個程式比較令人頭大的是販賣機的"找錢系統",應為販賣機只能給付一定數量的銅板和紙鈔,而且所找回的金額只能由特定面額的紙鈔與銅板來給付,所以比較麻煩。關於視窗介面我們是使用Boa Constructor這個工具軟體來協助建立,利用這個工具幫我們產生販賣機的使用者介面,並完成所有的程式設計。目前已經初步完成這個程式,功能上大致是正常的,"找錢系統"應該能正常工作,程式的進入點是MainApp.py,請點選MainApp.py這個程式執行(因為太多檔案,怕有人不知主程式是哪一個,在此說明),尚須改進的地方:
 

CJY0503 發表在 痞客邦 留言(2) 人氣()

 
之前,我們已經使用BOA Constructor撰寫過幾個簡單的視窗程式介面,計算機的小程式讓我們知道如何控制視窗上的按鈕,只繪畫直線的那支程式讓我們簡單的學會如何在視窗上面畫圖,接下來我們將學習一些簡單的IO控制,如何使用文字方塊來得知使用者輸入的資料,如何做出確認對話盒,讓使用者確認是否要執行動作,並且在這個範例中,我們會將使用者所設定的資料儲存起來,並且在下次需要時,重新載入資料。大部分的介面可以利用BOA Constructor來幫我們產生,產生完介面之後在加入部分的程式碼來控制程式,相信大家應該很熟悉這樣的程式設計方式。
 
儲存資料設定的程式碼
    def OnSaveDataButton(self, event):

CJY0503 發表在 痞客邦 留言(0) 人氣()

 
Currently, the web phenomenon that is driving the best developers and captivating the best entrepreneurs is Web 2.0. Web 2.0 encompasses some of today’s most exciting web-based applications: mashups, blogs/wikis/feeds, interface remixes, and social networking/tagging systems. Although most Web 2.0 applications rely on an implicit, lightweight, shared semantics in order to deliver user value, by several metrics (number of startups funded, number of "hype" articles in the trade press, number of conferences), Web 2.0 technologies are significantly outdistancing semweb technologies in both implementation and mindshare. Hackers are staying up late building mashups with AJAX and REST and microformats, and only rarely including RDF and OWL. This panel will consider whether semantic web technology has a role in Web 2.0 applications, in at least the context of the following areas:
  1. Web 2.0 and Semantics: What unique value can semantic web technologies supply to Web 2.0 application areas? How do semantic web technologies match up with the semantic demands of Web 2.0 applications?
  2. Semantics and Web "Ecosystems": Web 2.0 applications often strive to build participatory ecosystems of content that is supplied and curated by their users. Can these users effectively create, maintain, map between, and use RDF/OWL content in a way that reinforces the ecosystem?
  3. Semantic Web in Practice: Does semantic web technology enable the cost-effective creation of Web 2.0 applications that are simple, scalable, and compelling for a targeted user community? Can semantic web technology genuinely strengthen Web 2.0 applications, or will it just be a footnote to the Web 2.0 wave?
最近許多人在談論Web 2.0的技術,到底Web 2.0要達到什麼目的?為什麼有Web 2.0的誕生?Web 2.0是否真的有存在的必要性?最近Web 2.0的應用以及所使用的技術,或許是一個不錯的研究方向。

CJY0503 發表在 痞客邦 留言(0) 人氣()

 
這個程式很簡單,比之前的計算機範例程式還要小,計算機的程式主要是讓我們練習如何控制按鈕,如何使用Python的GUI工具,並熟悉其開發環境。BOA Constructor是一個相當好用的Pyhton圖形整合工具,這一次我練習了如何控制滑鼠的動作與如何在視窗上面畫圖,程式的內容很短,功能也相當簡單。關於畫直線的程式需要注意的一點就是視窗資料的重繪,如果視窗中的圖形沒有重繪,當你改變該視窗的大小時,之前所繪製的直線都消失了,所以必須重繪。
 

CJY0503 發表在 痞客邦 留言(0) 人氣()

1 2