程式在移植或者整合時, 有時會遇到使用結構來的定義程式所用到的資料的情形, 有時原作者是用一指向結構的指標來處理, 但是有時也會有直接用結構變數的情形.
這些程式我們在使用的時候按理應該盡量不要更動以免日後改版時造成問題, 不過要是遇到下面二種狀況那就...
原始程式是用指標來指向要處理的結構變數, 而現在我們想把規模縮小, 只會有一份結構變數, 同時也希望最佳化目的碼, 讓系統小一點, 快一點.
或者原始程式中把結構變數寫死了, 所有的函數都是針對那一個結構變數寫的, 結構變數生不出第二個 instance 來. 而我們卻是需要擴充一下, 讓它能處理多個結構變數.

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

Type Cast to Func Pointer
外部資料結構


在寫 CPU 或介面晶片的驅動程式時, 經常會使用到某些固定位址, 如: ARM Cortex-M 把系統設定及狀態對應到記憶體的特定位址, 某些周邊 IC, 例如 PCI, USB... 也是使用一小段記憶體空間. (註: 常見的周邊 IC 暫存器定址有二種: 一種是只有二個位址空間, 一個是 '指令/地址暫存器', 一個是 '資料暫存器'; 另一種則是直接使用 CPU 的記憶體空間來對應)
軟體功力較佳的 SoC 晶片製造廠所提供的驅動程式, 通常會將這一小段記憶體空間以結構 (struct) 的方式定義好, 再使用 define 將特定的位址值 (常數), 定義成一虛擬變數. 當然如果晶片功能比較簡單就不見得是用這種方法.

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

個人覺得 C 語言最神奇的地方是有好些個對等寫法




類型
相關運算子
寫法一
寫法二
說明/宣告
1.
(變數)取址
"&"
p
&x
p 為指標, 並且指向變數 x
2.
(指標)取值
"*"
*p
x
同上
3.
陣列與指標
"[]" and "*"
p[n]
*(p+n)
p 為陣列變數或者指標變數
4.
結構成員
"->" and "."
p->x
(*p).x
p 為指標, 並指向一結構
x 為該結構成員


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

C 語言預設會幫我們作一些型別轉換的動作, 一般的型別轉換不只會更換資料型別, 更會使資料內容有所變動, 例如:

float fVar = 1.2;
int32_t iVar;

iVar = fVar; // iVar 值為整數 1


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

'型別轉換': 基本上就只是在變數/函數前面加一對小括號, 中間填入要轉成什麼型別, 像這個樣子 "(型別)", 例如:
(unsigned char *)ptr
看不出哪一點難, 對吧
不過在實際運用上, 經常會有其他運算元的干擾, 使我們不容易看出式子的意義, 因此我自己寫了二個 macro, 使用上還算方便清楚.

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

HTML Source editing
痞客邦部落格程式上色相關文章:
Part1: SyntaxHighLighter
Part2: highlight.js
Part3: Prim.js

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

本文來自網站 ieng9.ucsd.edu (http://ieng9.ucsd.edu/~cs30x/rt_lt.rule.html) 加以重新排版.
呃… 它搬家了, 新網址如後: cseweb.ucsd.edu (http://cseweb.ucsd.edu/~ricko/rt_lt.rule.html)

MagicJackTing 發表在 痞客邦 留言(10) 人氣()

在系統在整合或移值時最常用的就是以巨集來置換一些底層 function. 這類的技巧叫 wrapper (意思是包裝紙)
但是在面對像 printf() 或者 scanf() 之類參數個數可變 (或稱不具名參數) 的函數, 就出現只能更換函數名稱, 而無法增減參數個數的冏境, 例如:
// 下例 OK, 但是無法處理參數的異動
#define printf my_printf
// 下例 OK, 但是只能處理剛好二個參數的異動 (增加, 交換)
#define printf(a, b) my_printf(x, b, a)
// 下例 ERR, C 編譯器的 preprocessor 不認識 ...
#define printf(a, b, ...) my_printf(x, a, b, ...)

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

C 語言呼叫副程式時, 支援非固定個數參數傳遞. 即所謂的不具名的變動參數.
不具名的變動參數以 ... 代表之, 並且至少需要一個具名參數. 因此 ... 的前面至少要有一個參數. 超過一個的部份也都是此函數的固定參數. 下例為不具名變動參數的樣板.

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

Memory Space Modifier
Keil C51 特定功能



1. 如何產生 'RLC A' 指令: (Keil C51 適用)

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

Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。