2014年7月17日 星期四

講講 John Carmack 的快速反平方根演算法

本篇的主題很簡單,講講怎麼快速計算 反平方根

圖1. 反平方根函數,但是要如何快速計算此式呢?


2014年4月9日 星期三

設計 Sequencer 直接驅動 HCTL-2020

自從 1945 年春天 ENIAC 誕生以來,電腦科技快速的滲透至人們的生活中,現在是 2014 年
也就是說電腦的發明才 70 而已,尚不足 100,現代的人們甚至已經拿著功能遠遠超越遠古
電腦的各種移動式嵌入裝置,手指在螢幕前滑個不停,這些嵌入式裝置內的 CPU 功能都是
極端的複雜,而且種類繁多,功能強大,有心學習的人也可以很便宜的買到相關的學習版
例如現在當紅的 ARM 架構,熱門的開發版如 STM32F4-Discovery,這些在以前對一般人

2014年3月9日 星期日

談談應用程式介面的風格 - Flat C APIs (完)

來講講今天的主題吧,應用程式介面的風格,也就是一般常說的 API Style,相信有寫過比較
大型軟體的讀者們一定都會有呼叫 API 的經驗,例如讀者想要開發 OpenGL 的程式,那得要
先安裝 OpenGL SDK,然後才開始呼叫 OpenGL 的 API 來設計相關的繪圖程式,所以這邊要
先釐清一下許多人常常搞混的兩個名詞 SDK 跟 API,簡單的來說,SDK 是一組軟體工具包
一般來說具有平台相依性,會需要安裝 SDK 就表示讀者的程式可能用到了一些特殊的 API
可能是一條而已,也可能大量使用,不安裝該 SDK 的話,程式就無法建構,通常 SDK 裡面
都包含了一大堆 Header File、Library File 還有 Binary File,講得更廣應該還要包含完整的範例
、教學手冊、文件,有些巨型的程式庫還會有工具集 (Utilities),一個很好的例子就是 DirectX
當然學習 DirectX 並不是一件容易的事情,另外一個經典的例子就是 FMOD

2013年12月2日 星期一

應用動態配置記憶體 - 大數乘二算爆你的電腦

好久沒有發文了,又快要被博主通緝了,所以就來談談今天的標題," 大數乘二 "
" 大數乘二 " 演算法的開發可以讓讀者練習動態配置記憶體的應用,另外可以複習
一下讀者們可能已經遺忘的對數計算,另外可以順便練習一下條件型的迴圈使用
所以學習寫程式直接透過綜合演練是比較有用,例如在下除了 "C++ : The Core Language"
與 K&R 那本經典的 C 語言書籍,剩下的知識都是直接閱讀各領域的專案原始碼獲得,所以
在下認為純程式語言的書沒啥用,當然這是在下個人觀點,至少對在下是沒啥用,例如
對 C++ 而言,假如讀者沒有另外去學習像 Qt 或是去閱讀 Inside COM 等等這些技術,就很難
了解 C++ 的一些本質 ( 注: 可以參考以前的發文 領略 QT 視窗程式設計),總之,語言一定
是拿來被應用,有需求才會被創造,所以回到本文,來看看為什麼  " 大數乘二 " 需要動態
配置記憶體呢? 很簡單,因為用電腦內建的精度就算不出來了,只會給你一個科學記號的
近似值,可是假如要超越 CPU 演算的精度,那就得自己實作演算法。

2013年10月25日 星期五

以 disasm 為例讓我們真槍實彈挑戰軟體的移植與編譯

今天本文的標題很簡單,讓我們來練習自己移植與編譯軟體的原始碼,講專業的一點就是
學習軟體環境的建構技術,也就是說本文的目標就是要示範給各位讀者知道如何在一支自己
完全陌生的軟體源碼中,自己能夠排除錯誤,對於不存在的函式,能夠移植或撰寫相容函式
將原始碼中缺的部分給補齊,最後下達編譯與連結指令製造出該軟體的執行檔。

2013年10月17日 星期四

一種特別的參數傳遞技巧:直接嵌入立即資料於程式區段

相信有認真看過敝人曾經發過的幾篇呼叫慣例系列文章,應該已經很了解傳遞參數給函式背後
的基本原理,C 語言主要常用的不外乎就是 stdcall、cdecl 與 fastcall,在 x86-64 的環境裡面
也曾經提到過全部統一用 fastcall,可是參數在傳遞的過程中,讀者有沒有想過,是否能夠將
資料直接嵌入在程式區段中,而不需要宣告資料區段呢?這就是今天的主題,敝人將示範一種
特別的技巧,讓資料直接混合在程式區段內傳遞給一條簡單的 Windows API 作為示範。

2013年10月14日 星期一

講講 CFile、fstream 與 傳統 C 程式庫對於檔案讀取速度上的比較

在不發文的話,就要被樓主 K 頭了,所以今天就來講一個很實用的主題,就是在 C/C++ 中
developer(稱 developer,聽起來比較高級一點,programmer 讓人有一種做苦工的感覺)
常常需要打開硬碟內的檔案讀取資料吧,也許是一些設備存檔出來的報表資料,也許是一些
實驗數據,或者是一些軟體播放影音檔,不管用了多麼深奧的解碼技術,這些軟體的原始碼
一定都會有對檔案進行讀寫的動作,但是存取檔案的技巧其實有很多種類,這也是常常讓人
迷惑的地方,所以吾人就來講講一種我們常常會用到的檔案操作物件,來解解大家的迷惑
並且比較一下這些物件讀取檔案的速度。

2013年9月11日 星期三

簡單講講 USB Human Interface Device

恩,發本文的原因是看到了以前畢業的朋友在旁邊的對話框問了一些問題,我想這些問題
不是三言兩語可以解釋完畢,但是我也不想又太細究 HID 內部描述表格的解說與視窗上
HID APIs 家族詳細使用方法,主要以偏向解決問題與實作面上的一些重點,希望可以有些
許幫助,因為詳細的文獻找 USB Complete: The Developer's Guide fourth edition 細讀第 11 章與
第 12 章就有,HID Descriptor 變化多端不可能逐一介紹全部情形,詳細情形除了參考上面資料
也一定要自己讀過訂製 USB 規範組織的 USBIF 發布的標準文獻

Device Class Definition for HID - USB.org  ( HID1_11.pdf )‎

HID Usage Tables 1.12 - USB.org              ( Hut1_12v2.pdf )

因為背這個沒甚麼用,寫韌體軟體的時候在去查閱想要用的型式就好
至於 USB 規範那本 Spec ,恩 假設讀者有念過有概念  : )  這應該是基本功夫,USB 基本知識
不再解說,我們要針對面對多變 HID Descriptor 的型式,怎麼樣的令 HID Descriptor 使得軟韌
體會比較好處理。