PIXNET Logo登入

傑克! 真是太神奇了!

跳到主文

記性不好, 寫程式, 架主機...都需要看小抄!
歡迎光臨 MagicJack 在痞客邦的 '小抄' 天地

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 10月 02 週二 201814:34
  • C 語言:使用 enum 作為陣列元素的索引

今天在網上爬文, 無意間學到了 named initializer 這個到 C99 才出現的語法.

enum 的應用例子


(繼續閱讀...)
文章標籤

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

  • 個人分類:C Language
▲top
  • 5月 29 週二 201809:17
  • C 語言:關於 sizeof 及結構及同位的記憶體對齊

struct alignment
C 語言的編譯器有一個內建的巨集 sizeof() 可以用來取得配置給變數的記憶體大小. 例如:

uint32_t varX = 1234;
int size;

size = sizeof(varX);

(繼續閱讀...)
文章標籤

MagicJackTing 發表在 痞客邦 留言(7) 人氣(48,011)

  • 個人分類:C Language
▲top
  • 11月 11 週三 201518:13
  • C 語言:消除 C Compiler 對未使用之函數參數之告警

寫 C 程式時偶而會遇到函數的原型宣告多設了一些暫時沒有用到的參數, 一般狀況下只要修改一下標頭檔中的宣告以及實際 C 函數的定義就好了. 不過偶而也會遇到不能改的情形, 例如:
套用某些框架系統時, 函數的原型宣告是框架系統提供的. (一改大概框架系統就不用升版了)
使用函數庫中某個函數的 call back, 而函數庫改不動, 或者沒原始程式, 沒得改.
在開發 embedded system 時, 我們需要實作或者改寫一些函數以取代 C 編譯器的一些預設行為, 例如: Keil ARM/MDK 中要把 printf() 改輸出到 SoC 的 UART.
(繼續閱讀...)
文章標籤

MagicJackTing 發表在 痞客邦 留言(5) 人氣(7,071)

  • 個人分類:C Language
▲top
  • 7月 23 週四 201503:05
  • C 語言:關於變數的二三事

Mem Map2
C 語言的變數有所謂的 storage class, 初學時對當中的差異並不是很容易弄清楚, 後來我把各種條件稍作整理, 於是有了下面的表格:



C 語言變數


條件/狀況
外部變數
(全域變數)
靜態變數
自動變數
(區域變數)
函數參數


大分類
全域變數
區域變數
Key Word
無
static
static
auto (可略)
無
定義/宣告註1位置
函數外部
函數內 (或者 {} 區塊內)
函數本體
變數名稱重複
編譯錯誤. 專案中所有全域變數名稱需唯一
  • 與同一區塊內的變數同名時, 編譯錯誤.
  • 與區塊外層變數同名時, 外層變數被遮蔽.

在外部檔案 (.c/.h) 中使用(或參考)
外部檔案中變數宣告的前面加上 extern 即可
外部檔案中無法使用(或參考)
在定義的區塊外即無法使用
函數區塊外即無法使用
可視範圍註2
scope
自定義位置 (不必需在檔案的最前面) 至檔案結束
函數內 (或者 {} 區塊內)
函數內
生命期註3
life-time
程式執行期間 (或永久)
函數內 (或者 {} 區塊內)
函數內
初值(未設初值時)
0 (因為是使用 .bss 區段的關係)
未知
編譯錯誤. 參數個數不一致註4
初值設定限制註5
及其執行時機
限制只能使用常數運算式
只執行一次, main() 執行前由 "可載入執行檔 ELF" (或二進位影像 binary image) 拷貝至正確之 .data 區段位址內
無限制, 任何運算式均可.
每一次進入函數或區塊後立即執行
無限制
呼叫前執行設定
預設使用之記憶體區段
無初值
.bss註6
stack註6
register 或 stack註6

有初值
.data註6
stack註6
register 或 stack註6


(繼續閱讀...)
文章標籤

MagicJackTing 發表在 痞客邦 留言(5) 人氣(31,536)

  • 個人分類:C Language
▲top
  • 7月 20 週一 201519:15
  • C 語言:運算子優先次序和運算次序

運算子優先權 (C 語言) Percedence Table




C 語言運算子優先權重表


運算子
Operator
說 明
Description
結合順序
Associativity
1
()
[]
->
.
++ --
Function call
Array subscripting
Element selection (of struct or union) through pointer
Element selection (of struct or union) by reference
increment/decrement (suffix) (註1)
左至右(註2)
2
!
~
++ --
+ -
*
&
(type)
sizeof
logic NOT
bitwise NOT
increment/decrement (prefix)
unary plus and minus
Indirection (dereference, right value)
Address-of (left value)
type cast
Size-of
右至左(註2)
3
* / %
Arithmetic multiplication, division, and remainder
左至右
4
+ -
Arithmetic addition, subtraction
左至右
5
<< >>
Bitwise left shift, right shift
左至右
6
< <=
> >=
Relational less than, not greater than
Relational greater than, not less than
左至右
7
== !=
Relational equal, not equal
左至右
8
&
Bitwise AND
左至右
9
^
Bitwise XOR
左至右
10
|
Bitwise OR
左至右
11
&&
Logical AND
左至右
12
||
Logical OR
左至右
13
?:
Ternary conditional
右至左
14
=
+= -=
*= /= %=
&= ^= |=
<<= >>=
Direct assignment
Assignment by sum, difference
Assignment by product, quotient, remainder
Assignment by bitwise AND, XOR, OR
Assignment by bitwise left shift, right shift
右至左
15
,
Comma
左至右


(繼續閱讀...)
文章標籤

MagicJackTing 發表在 痞客邦 留言(6) 人氣(81,663)

  • 個人分類:C Language
▲top
  • 7月 15 週三 201510:36
  • C 語言:typedef 和 #define 大不同

以前以為 typedef 的功能可以用 #define 來完成, 用起來感覺功能也差不多, 例如:

typedef unsigned char bool; // 用這一行或者是下一行 二選一
//#define bool unsigned char

bool flag1, flag2;

(繼續閱讀...)
文章標籤

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

  • 個人分類:C Language
▲top
  • 7月 08 週三 201523:06
  • C 語言:typedef 的用法

C 語言中 typedef 可以用來擴充 C 原有的資料型態. 通常我們會將某個資料型態或者將常用的資料型態組合給予一個比較直觀而易懂的別名. 定義別名之後我們就可以像使用原有的資料型態來宣告或定義變數一樣, 直接拿它來宣告或定義(註一, 註二)變數.
(繼續閱讀...)
文章標籤

MagicJackTing 發表在 痞客邦 留言(7) 人氣(143,155)

  • 個人分類:C Language
▲top
  • 7月 07 週二 201516:17
  • C 語言:型別轉換 (Type Casting) 技巧之四 (結構運算子 "->" 和 "." 互換)

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

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

  • 個人分類:C Language
▲top
  • 7月 06 週一 201513:40
  • C 語言:型別轉換 (Type Casting) 技巧之三 指定位址 (資料結構, 函數)

Type Cast to Func Pointer
外部資料結構


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

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

  • 個人分類:C Language
▲top
  • 6月 30 週二 201518:42
  • C 語言中常見的對等寫法

個人覺得 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) 人氣(1,792)

  • 個人分類:C Language
▲top
12»

個人資訊

MagicJackTing
暱稱:
MagicJackTing
分類:
數位生活
好友:
累積中
地區:

熱門文章

  • (27,211)C 語言:Keil C51 Program Tips
  • (8,304)C 語言:輕鬆讀懂複雜的宣告式 (Define and Read the complex declarations)
  • (14,577)關於 痞客邦 的廣告
  • (143,155)C 語言:typedef 的用法
  • (81,663)C 語言:運算子優先次序和運算次序
  • (31,536)C 語言:關於變數的二三事
  • (35,369)C 語言:Keil C51 和標準 C 語言的差異
  • (31,717)Raspberry Pi and Pi2, Pi3 接腳圖 (Pinout)
  • (35,646)UART 接收同步機制及鮑率誤差計算
  • (262,211)SPI (Serial Peripheral Interface) 串列 (序列) 週邊介面

最新文章

  • 到訪人數突然歸零了
  • CSS: 關於 tab-size 設定
  • Chrome 錯誤回報: CSS 設定項 tab-size 的 bug
  • asm51 test
  • Syntax High Light (在 痞客邦部落格 中使用) Part3: Prism.js
  • 測試頁面: 程式上色 Prism.js
  • 測試頁面: 程式上色 highlight.js 客製化
  • 測試頁面: 一般項目測試
  • JavaScript: 客製化 highligh.js
  • CSS: 取消繼承來的 CSS 設定

文章搜尋

文章分類

toggle 程式 (3)
  • python (8)
  • git (3)
  • C Language (15)
toggle 嵌入式系統 (6)
  • Keil ARM C (2)
  • Arduino (3)
  • Keil C51 (2)
  • GCC (3)
  • OS (Embedded System) (3)
  • 硬體 (11)
toggle 網頁 (3)
  • JavaScript (6)
  • CSS (17)
  • HTML (5)
  • Windows (11)
  • 其他 (7)
  • 部落格設定 (10)
  • 未分類文章 (1)

誰來我家