2013年3月22日 星期五

[QT] 執行檔上的圖示更改(icon change)

QT Creator的做法

首先準備好一個icon檔 可用Irfan view製作
接下來點選project->Add new->general 產生一個.txt檔
將其檔名改為xxx.rc
且內容為

IDI_ICON1 ICON DISCARDABLE "xxx.ico"

2013年3月17日 星期日

從動態二維陣列配置技巧領略 Windows 程式設計

由於 SL811 與 USB Protocol 相關資料還在整理中,這系列文章可能還不會馬上出爐,因此
先來看一看小主題,也就是標題所述帶領讀者寫一支簡單的動態二維陣列配置程式,可是
讀者可能會有疑問,這跟 Windows 程式設計有甚麼關係呢 ? 因為這支程式用純 Windows
API 撰寫,完全不使用 Microsoft Visual C++ Runtime Library DLL (後簡稱 MSVCRT DLL)
內的 malloc,也就是讀者將不只知道動態二維陣列配置的概念,還會了解如何呼叫視窗系統的 API 實現這種功能,這會建立讀者對於 "行程" 最基本的觀念。另外,會解說這個主題的次要原因是最近處理了一些巨大的二維資料陣列問題,問題根源在於繪圖視窗是執行階段才被動態建立,所以作為緩衝區之二維陣列不可能先行宣告,因此必須設計一組可以動態配置二維陣列的 C 介面用於根據繪圖視窗大小動態配置二維陣列,因此想說用這篇講述怎麼完全都用一維
角度模擬任意 N 維陣列的基本原理。

2013年3月11日 星期一

使用 Visual Studio 開發 C51 專案程式

好久沒有發文了,今天來談談關於 8051 MCU 的開發環境,8051 被認為是應用相當廣泛歷久不衰的古老 MCU,在眾多工程人員的努力下,8051仍然持續被重新設計與進化,現代新型的 8051 一般來說都經過架構與製程上的改造,架構上的改造像重新使用RISC架構設計的8051,或是外掛其他周邊例如加入常用的 I2C 與 SPI 或是像有名的 Cypress CY7C68013A 這顆超級 8051 帶有特殊的周邊主要是內建 USB 2.0 控制器 與 GPIF (General Programmable Interface),GPIF 不是 GPIO 不要弄混,這是一種很奇特的介面,它的功能很像 CPLD,可以產生開發者想要的特殊通訊波形,使得 USB 2.0 控制器可以直接與 GPIF 連接的外部裝置直接通訊,8051 核心本身不用介入控制,達到高速傳輸的目的,有點像可程式化的 DMA。製程上的改造使得 8051越做越小顆,像 C8051F320 小小一顆 7x7mm^2 還內建有USB全速控制器,NI 公司的 USB 轉 I2C 與 SPI 產品就是用這顆做的喔。雖然 8051 有許多變種,但是 8051 的核心在怎麼變,軟體開發層面都一樣,因為所有 8051 組合語言指令集都長得一樣,所以用 C 語言開發 8051 程式當然就只需要一種編譯器,最有名的就屬  Keil C Compiler,另外還有開放原始碼專案的 SDCC。雖然 Keil C51 Tool Chain很好用,可是 Keil 的程式環境就令吾人不深感不方便,尤其對我們這些原本搞 Windows 或 Linux 下寫 GUI 應用程式跳過去也搞搞微處理器的人來說,Keil 的程式編輯器實在太陽春,所以就浮現一個簡單的想法,我只要 Keil C51 Tool Chain,程式編輯與編譯環境用 Visual Studio !!

2013年3月5日 星期二

C語言函式呼叫慣例 ( fastcall ) (完) Part3

Part2 講到關於重要的 cdecl 呼叫慣例分析後,應該已經可以掌握
或是已經記憶在腦袋裡面了,stdcall 與 cdecl 其實長得差不多,除了
函式編譯後的符號名稱不同 與 cdecl 要自己平衡堆疊外,參數傳遞方式
是一樣,由右至左推入堆疊,使得在函式內部取用參數時,剛剛好是從
param 1 開始拿取,另外一個重點在於假如使用編譯器標準處理 Prologue 與
Epilogue Code,那執行完 Prologue Code 時,Stack 的內容一定是

Stack : param n, param n-1, ... , param 1, return address, ebp <== [TOS]

所以 [esp - 8] 必然是函式第一參數值,這些應該要牢記。

從 FASM 呼叫 C 副常式來自創 C 語言進入點

看完了上一篇對 Ternary operator 的深入研究之後,是否對程式語言有更進一步
的體會呢 ? 一個小小的 Ternary operator 可以引出對於 指令設計硬體化 基本觀念與
利用來自不同層次程式語言思考模式放入更高階語言內實現的想法,相信不少寫
C 程式語言者很少想過之間的關連性,或同時有寫過 HDL 和 C 語言兩者可能也沒
甚麼感覺,反正就是寫出功能達成任務,但是假如你學會這種多層次語言思考模式
則對程式語言的應用將會更顯靈活,這大概就是上一篇小品文大意所在。

現在讓我們來看看本文的標題,講的是說要 「自創 C 語言進入點」,搞技術的人
常常都要寫程式,也大概知道程式會有一個進入點(a entry point),進入點通常是
一條特殊的函式名稱,你不可以拿這個名稱去用,例如令成一條函式,因為 Linker
在進行鏈結的時候,會去尋找這些特殊的符號名稱,讓它們當作程式活動起來的門口
這樣子軟體工程師就會有所根據,知道說「某特殊名稱函式會自動被執行」,這樣
工程師就會知道程式要開始從這邊寫與規劃整個程式的架構,整個程式就運作起來了...
所以這些特殊名稱的函式一般又稱為 Entry-point function,所以說上一篇的小品文不全然
無關,上一篇講 「? :」 運算子的原貌,這篇就是講 Entry-point function 的原貌,讓你
知道,這種函式還可以自己根據需求創造 。