顯示具有 程式 標籤的文章。 顯示所有文章
顯示具有 程式 標籤的文章。 顯示所有文章

星期五, 4月 01, 2011

如何解決用VC++ 2008開發的 *.exe 在別台電腦不能運行的方法

一年前我用VC++寫了一支視窗程式,當我從開發這程式的PC拿到別台PC Run的時候,發現他會出現錯誤而不讓我執行,找不到解決辦法,我就放棄繼續做下去了。

後來在一次偶然,我發現如果在別台電腦先安裝"Microsoft .NET Framework 2.0",就可以跑我從VC++開發的程式了。


如果有同樣的事情發生,說不定是對方的電腦沒有先裝該程式而引起的。

星期三, 9月 01, 2010

[LabView]Global 變數-可以共同給兩個VI使用的變數

公司的儀器不多,有三四個以上工作站的handler,現有的儀器卻只能架設一站,其他二三站則毫無用武之地。

我曾經提出一個共同存取一份文檔個方式,目的在於假設當工作站1要用儀器A的時候,會在預設的文檔寫入狀態資料為使用中(例如儀器A旗標舉起),然後開始使用該儀器。此時若工作站2要使用儀器A時,他也會先讀取該文檔。倘若讀取結果得知儀器A在使用,便等待。直到工作站1用完儀器A後,寫入儀器A可被使用的訊息到文檔內。如此工作站2在讀取到此訊息後,便知可使用儀器A,然後同樣在文檔中改變儀器A狀態為使用中,隨即使用儀器A。

這個作法應是可行的,不過當我打電話給LabView高手Legend跟他提到我的想法時,他給我一個建議,就是使用Global variable ,他是一個可以使用在不同vi的變數,也就是說當我開兩個獨立的vi的時候,可以透過這種變數,將他們的關係連結起來,可能類似我上頭所說的那個方法。

相關使用可參考下面這個連結:
http://www.labviewpro.net/teach_content.php?fid=6&post=341&fpt=8

星期一, 5月 31, 2010

Ember em35x燒錄注意事項

這真的是一套很貴的玩具,對我而言,從大概三四個月就拿到這套東西,不過到現在還不算摸得非常熟~~

AIR是另外買的,且IAR的IDE不能將程式燒錄到em375晶片裡,所以根據"EM35x User Guide",想要做Debug,請依照以下步驟:


1. Start IAR Embedded Workbench. Open the workspace (*.eww).
2. Select Project > Options. Select the Debugger > J-Link/J-Trace category. Select the Connection tab.
3. Select TCP/IP Communication and enter the IP address of the ISA3. Click OK.
4. Embedded Workbench is not able to program the flash on the EM357. Every time the project is re-built, you must manually load it onto the EM357 (**using em3xx_load.exe) before starting a debug session.
5. Once the correct image has been loaded onto the EM357, select Project > Debug without Downloading to start the debug session.

**:這是em357燒錄程式:使用方式是,當你經過IAR IDE編譯過source code 後,會再編譯的資料夾多一個"某某.s37"的檔案,通常預設某某就是你Project的名稱,所以整個燒錄的過程是在Ms-Dos 底下,在產生某某.s37檔案的資料夾路徑下,鍵入

em3xx_load.exe 某某.s37

即可燒錄。

星期二, 4月 27, 2010

[VC++]class serial port 的"Parity屬性"要怎麼更改

因為公司要做一些測試,所以要我寫一個可以使用RS-232通訊的程式。

於是我找了VC++ 2008來寫程式,裡面有提供一個class-Serial Port,並且我也參考了範例:http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

因握我想作成視窗應用程式,所以照著這範例更改。

有些值我可以設定,另如
serialPort1->BaudRate=9600;
serialPort1->PortName="COM1";
不過像是
serialPort1->Parity
serialPort1->Handshake

我就不知道該怎麼設,我直接打"None"就跳出錯誤。



=======================


解決辦法:


首先我在Form1.h(我的情況是這個檔名)內加入

using namespace System::IO::Ports;

然後在主要的程式內
serialPort1->Parity=Parity::None;

如此寫法編譯就可以過了。
不過我還不清楚為何加入using namespace System::IO::Ports;編譯就可以過~~還有得學^^

星期一, 4月 05, 2010

[轉貼]Java 設定Classpath方法一覽!

我一開始想要學寫JAVA時,最怕就是碰到這種Hello World!都無法順利執行的情況。

以下的文章,幫我解決了這個問題。它說明了如何設定Class Path。
http://kevingo75.blogspot.com/2009/04/java-classpath.html

......

(2) 在執行的時候指定classpath
這應該是最常使用的方法,就是你在command line下指令的時候順便指定classpath。比如說:
java -classpath classpath1;classpath2 className

......

星期四, 3月 04, 2010

[軟貼軟體設計必讀經典(11)反覆測試與修正,讓錯誤消失

http://www.ithome.com.tw/itadm/article.php?c=47536

寫程式之路還有很多事情需要去學習,每每寫到一個程度的時候,都會想說,有沒有更好的寫法,或是更好的規劃方式。就是這種富有彈性的工作,所以才不會變得枯燥。

不過在這個競爭的行業裏面,效率往往決定一切,我仍然會害怕悠悠哉哉的寫程式,老闆會生氣~~。

測試驅動開發除了讓軟體人員對測試工具有自我主宰的感覺,並藉此探索測試內部的機制外,還能提升勇氣──取代沈默寡言,而勇於嘗試更多的溝通交流。

  Test Driven Development By Example
 Kent Beck /著
 Addison-Wesley Professional出版
 售價:44.99美元
 推薦:Amazon四顆星

有一位軟體設計的夥伴,是我看過上千軟體人員之中唯一的天才。他不只學習能力快速,更具備靈活的頭腦與身段,抽象思考能力極高,擅長把軟體作「軟」的他,作品總是令人嘆為觀止。不過,我覺得他與國外的軟體先驅仍差了一截,並不是實作或學習能力不夠好,最主要的差距在於「創新能力」。

什麼是創新能力?舉個例子,我可以看得出早期EJB規格的問題點(軟體結構會被該規格綁死死的),所以會批判與避免使用它。Rod Johnson 卻不只是批判反對而已,而且還身體力行,寫出Spring Framework,實現IoC(Inversion of Control)、AOP(Aspect-Oriented Programming)的輕量級開發框架,釐清軟體開發人員與系統層級服務的責任。

另外,《Test Driven Development By Examples》作者Kent Beck在輔導專案的過程,有感於測試應伴隨所開發的程式碼,而不是延遲,所以主張「測試先行」(Test First),他甚至設計免費開放的JUnit Framework等測試框架,並寫書推廣正確觀念,讓開發者了解測試先行是維繫軟體品質的重要關鍵。太多大型單位把測試當作一個重要製程,但又交給其他部門,而且在開發後才展開測試,這樣的應變測試效果令人懷疑。

先測試,再反覆修正到正確為止
全書分成三大部分,前兩大部分是範例,第三部分則是測試驅動開發(Test Driven Development,TDD)的設計模式(Patterns)。
第一部分以一個「幣值轉換」的程式範例,利用Java程式碼揭露TDD的設計意涵。

看到這個範例,你可能會覺得程式碼的寫法實在不高明。是的, Kent Beck盡量模仿初學者的程度撰寫程式碼,這同時說明TDD簡單明瞭,能讓初學者快速上手,並懂得如何修正程式碼 (這其實已經逐漸走向設計之道了)。這部分內容讓你了解什麼才是Test First──還沒寫類別程式碼之前先寫測試程式碼。當然,測試一定不會過,再來才開始寫主題程式,新增類別、編輯屬性、修改參數……等。簡單的設計、列出工作清單、一次只解決一個問題、測試它、讓它正確……如此地反覆修正,這正是TDD最重要的精神。

第二部分藉由Python語法探索xUnit測試框架的設計過程,教你如何撰寫屬於自己的測試框架。你也許認為開發Framework相當困難,但Kent beck的作法是如此簡單,三兩下就可以開發出測試框架,而且在設計的過程中,還能秉持測試先行的原則。作者使用Python作為範例,原因除了語法易懂之外,因為Python屬於Script-Based語言,也能藉此證明Python能實現測試框架的實作。

不過,目前已有30多種程式語言支援xUnit Framework,為何作者還要鼓勵程式人員開發屬於自己的測試框架?

有兩個理由:一、讓你對測試工具有自我主宰的感覺;二、藉此探索測試內部的機制。

第三部分是TDD的設計模式,這部分談到測試的策略思考,包括測試的意涵、什麼時候要測試、應該選擇什麼樣的邏輯與資料作測試。

簡單就是力量
TDD的核心精髓是:讓程式碼可以運行並能保持純潔無瑕(Clean code that works)。另外還有兩項原則:一、只有自動化測試失敗時,才寫新的程式碼;二、消除重複(Duplication)。其中,消除重複又與系統架構的相依性(Dependency)設計有相當密切的關係,消除重複的程式碼後,系統的耦合(Coupling)程度往往能夠降低,進而提升可再利用性的價值。

Kent Beck 還特別在序文提到「勇氣」(Courage)。他認為測試驅動可以在開發過程中控制開發者的憂慮感,它可以讓你:快速具體地學習,而不是一直處於試驗性的階段;取代沈默寡言,而有更多的溝通交流;不是躲開回報,而是更能尋求具體有幫助的回饋(Feedback)。

當閱讀完本書後,我相信你應該就能掌握TDD的開發精神,能落實:(1)從簡單開始做起;(2)寫自動化的測試程式;(3)重構 (Refactor),而且每次只增加一個新的設計。

《作者簡介》王克明
台北工專五專部電子科畢業。現於HSDc軟體設計顧問團隊擔任架構師/顧問/講師。興趣為整體架構性的思考與學習、期貨投機操作與閱讀。

星期五, 2月 12, 2010

[轉]#ifdef _DEBUG

以前看過,不過這種東西一陣子沒看又忘掉了,所以還是把他存起來。

連結http://huenlil.pixnet.net/blog/post/24339151

接下來則是在知識+看到的,一些小問題知識家還是有不錯的答案可以參考。
連結

#ifndef _STDLIB_H_
#define _STDLIB_H_
... some code
....

#endif // of _STDLIB_H_

這樣的用法一般會寫在header file 當中.
目的是為了避免重覆include 同一個header file compiler 會發出重覆宣告的錯誤

用法如下
#ifndef _STDLIB_H_ // 如果沒有定義_STDLIB_H_ 這個macro 則下面的code 會被展開直到 #endif
#define _STDLIB_H_ // 定義 _STDLIB_H_


#endif // 結束 前制處理器的if 判斷 區段


所以當user 第一次include 時. _STDLIB_H_ 還沒被定義過. 此時#ifndef 到 #endif 的code 會被展開. 又此段當中有一個#define _STDLIB_H_ . compiler 就會記住_STDLIB_H_ 被定義過
當第二次在include 同一個檔案. compiler 發現 _STDLIB_H_ 被定意過了. 此時#ifndef 到 #endif 之間的code 就不會被展開了.
達到防止重覆include 的效果


example program 共3 個檔案
-----------------------------------------
file : abc.h
#ifndef _ABC_H_
#define _ABC_H_

const int a=100;

#endif // of _ABC_H_

-----------------------------
file : 123.h
#include "abc.h"


-----------------------------
file : main.cpp
#include "123.h"
#include "abc.h"

int main()
{
return 0;
}

把上面三個檔分別存成abc.h 123.h 跟main.cpp
compiler main.cpp 妳會發現不會有錯誤發生.
但是如果把abc.h 去除#ifndef _ABC_H_ 等等 如下面
file : abc.h
// 沒有#ifndef _ABC_H_ 的abc.h

// #ifndef _ABC_H_ <== mark 掉
// #define _ABC_H_ <== mark 掉

const int a=100;

// #endif <== mark 掉

再次compiler main.cpp
妳會發現compiler 會跟妳說 a 重覆宣告
VC 的error 如下
f:\temp\abc.h(7) : error C2370: 'a' : redefinition; different storage class
f:\temp\abc.h(7) : see declaration of 'a'

星期日, 1月 17, 2010

How to use DEV C++ Debug

我不得不說當我一開始用Dev學習C++的時候,並不會使用debug的功能,完全是靠cin與cout來看看程式有沒友執行錯誤,後來使用TI的CCS才發覺breakpoint與watch window是我debug必用的工具。

現在回來使用DEV的時候,才發現我不會用它的debug,看了它的Help只看到了一個"ID DEBUG PROCESS"關鍵字,卻不知道要怎麼使用,想說DEV已經是很GUI的設計,Debug會做得那麼難使用嗎~~。

還好我隨手google一下,發現我錯了,其實他還是蠻容易的,不過我的步驟錯了。

以下是Dev C++的一種Debug的步驟:
原始網頁:

1.code先編譯(Ctrl+F9)
2.再設中斷點
3.debug(F8)

原本點選的中斷點那行底色變成藍色代表程式跑到該行,此時也可以使用watch window。



星期一, 1月 04, 2010

在DEV C++上開發GTK+

我想這篇是我怕下一次忘了怎麼用,人啊,還是做一下紀錄比較好。

今天試了將近整整一天,發現怎麼樣安裝,DEV總是出現很多錯誤,明明CODE都是未修改過的Sample Code。

最後,我找到這篇文章:

我照著做到最後,還是有錯誤發生,後來我想到會不會是牽涉到中文檔名與碰到中文路徑的問題,所以我把專案的名稱改成英文,並存在D槽底下,沒想到就這樣給他成功了。
不過目前發現程式上按鈕的字都是顯示亂碼,看起來還有得學~~。