2013年7月16日 星期二

直接交換兩個雙精度用 XMM 暫存器

好久沒發文了,在不發文就對不起博主給我這個寶貴的空間了,今天要探討的主題很簡單
也很好懂,設計一條可以交換兩個雙精度浮點數的函式,數值互換是很基本的數學函式
,但是卻很重要,不少演算法裡頭,都會用到這種基本功能,當然本文不會研究甚麼艱澀
的演算法,這個主題是要透過實作 交換兩個雙精度浮點數的函式 來讓讀者認識現在新的
x86 CPU 內部的 XMM 暫存器 與 初步的了解如何在組合語言中搬移雙精度浮點數。


2013年6月11日 星期二

從轉譯 ZoomIn 工具講講撰寫組語的一些樂趣與困難

常常用 Visual C++ 寫古典 Win32 程式的人應該都知道,經典的第六版之所以歷久不衰
除了本身整合開發環境高效率,體積小,還可以將專案 dsp 檔轉成標準的 makefile 檔之外
就是第六版還附有所謂 17 大經典工具,這些工具被稱為 SDK Tools,它們會被稱為
經典不僅僅是各個程式小巧,而且每一支都很實用,更棒的就是這些工具本身原始碼
也是公開可以研究,這些工具不僅輔助開發程式的利器,本身每支工具的原始碼就是
示範 Win32 許多重要 API 的經典寶庫,我學習 Windows 程式設計的歷史中,絕大部分的
功底就是念透這些工具的原始碼,這個比買一本書看還有用,其中有六支值得仔細閱讀

2013年5月24日 星期五

關於感測器電路的一些經驗談(some tips about sensor)

  這幾個月來,我發現我對於電路實作與理論的應用,其實還有段差距,故將一些我實際碰到的問題以及解決方法寫下來。

  基本上我還是在處理感測器的電路,這時候會用到MCU的A/D去讀取實際的類比訊號進來,但是讀值可信嗎?

2013年5月13日 星期一

領略 QT 視窗程式設計

   我們都知道視窗程式設計一直都是讓人頭痛的問題,相信有用系統的 Native API 寫過 GUI
介面的讀者們都可以體會,不管是 MS Windows 還是 Unix 上的 X Window System 或者是
少數有些人可能有過 MAC OS 下 GUI 程設經驗 ( 我指的是更古老的 MAC 系統,非 OS X ),
使用系統的 Native API 撰寫 GUI 是很痛苦的工程,但是我的過來經驗是有過 Native Level
的 GUI 編程其實還是很有用,因為你會了解到任何 OS 下 GUI 子系統的基本法則都很相似
主要基本觀念不外乎就是 GUI 子系統 (有時候會稱為 Window Manager) 會不斷監控各種
視窗訊息並且將訊息傳送給應用程式,一個完整的應用程式一般會有很多的回呼函式來
回應各種訊息,假如不想處理訊息的就利用特殊的 API 送回系統,已經處理過的就不用送回
系統,而訊息一般都會被轉譯或分派,但是一般不需理會,只要在已經註冊好的視窗回呼函
式用 Switch Case 敘述作訊息攔截撰寫對應動作的程式,這就是系統底層怎麼運作 GUI 程式
的基本原理,當然沒這麼簡單,因為有些訊息往往還會夾帶通知,這樣可以更精確的獲得
UI 本身更細部的行為改變,而且不同訊息所夾帶的附加資訊又不同,所以一般寫比較複雜
的 GUI 程式都要花許多時間查閱資料,基本上 Native GUI API 就是一大堆系統提供的
C 函式組合的集合,不妨將這個基本觀念用圖來表示 ( 這邊以 Windows 系統為例 ):

2013年5月6日 星期一

用 SL811HS 學習 USB 介面 - Part01

     通用序列匯流排 (USB) 是有史以來最成功的通訊介面,目前有數億計的 USB 設備存在於
這個世界上,許多晶片設計公司都已經紛紛推出針對不同裝置設計的 USB 橋接器晶片,像
常見的裝置如:鍵盤、滑鼠、掃描器介面、影像、印表機、磁碟控制器、網路介面、序列埠、並列埠甚至是一些特殊介面 CAN ( Controller Area Network )、GPIB (標準化後又稱 IEEE
 488),吾人碰巧有用過 USB-GPIB 的有趣經驗,這是因為以前有一台示波器後面有一個
USB 埠在好奇心的驅使下接上電腦發現電腦識別為 TEK-USB-488 設備,才知道原來這是
有內建了 USB-GPIB 轉接晶片的示波器,透過這個介面,可以直接用 C/C++ 程式下 SCPI
(Standard Commands for Programmable Instruments) 指令直接控制示波器的設定,像是
螢幕亮度,語系,調整時間刻度,電壓刻度,擷取示波器上的數值。

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 !!