C preprocessor
Posted標準指令
- #include
- #define
- #if
- #ifdef
- #ifndef
- #else
- #elif
- #endif
特殊指令
- #pragma
- #error
- #warning
巨集指令
- __STDC__
- __STDC_VERSION__
- __cplusplus(C++)
- __DATE__
- __TIME__
- __func__(C99)
標準指令
特殊指令
巨集指令
每次拿到別人或是原廠的 code,總是包含一堆 #ifdef,有的還是巢狀 #if #else,看到最後都快暈倒了。最後為了看是否此段原始碼到底有沒有被 compile,總是要耗費不少時間,有時還會看錯咧。
#pragma message "test"
今天讓我發現一個好用的巨集指令,也就是 #pragma message。只要在程式碼的上一行加入 #pragma message "test",然後再經過編譯,看一下編譯結果有沒有一個 warning 叫 "test" 就知道此段程式碼有被編譯,而不用幸苦的對程式碼。
INICODE 用來自動產生 reset vector,堆疊初始化,週邊初始化。
Syntax: INITCODE [BOOT386] [RESET|NORESET] [NOTHING] [STACK|NOSTACK] [ioport=data]
[OUTBYTE addr16=value8] [OUTWORD addr16=value16] [OUTDWORD addr16=value32]
[INBYTE addr16] [INWORD addr16] [INDWORD addr16]
[WRITEBYTE addr32=value8] [WRITEWORD addr32=value16] [WRITEDWORD addr32=value32]
[READBYTE addr32] [READWORD addr32] [READDWROD addr32]
[filename=file.ext CLASS=class_name]
Examples 範例
LISTFILE 用來設定 listing file 要包含那些資料。
Syntax: LISTFILE [SEGMENTS] [PUBLICS[BY ADDRESS|BY NAME] [COLUMNS=(1|2)] [WIDTH=(80|132)] [SYMBOLS] [LINES] [REGIONS] [CHECKSUMS] [FILENAME=file]
Examples 範例
MAP 用來指定某塊記憶體的存取型態。
Syntax: MAP [name] addr TO addr AS memtype
Examples 範例
ORDER 用來連結 anchor
Syntax: ORDER anchor_class class_list
Examples 範例
Syntax:
Examples 範例
DEBUG 用來指定那些除錯訊息資料結構要包含在 Intel OMF86 檔案。
Syntax: DEBUG option [option ...]
Examples 範例
參考文件:C:\Program Files\Paradigm\Docs\locate.pdf。
ABSFILE 主要是用來決定是用 integrated debugger 或是採用 Intel OMF86 格式的開發工具。
Syntax: ABSFILE [AXE86|OMF86|NONE] [FORMAT=type] [FILENAME=file]
Examples 範例
CHECKSUM 用來計算記憶體區塊的 CRC 值。
Syntax: CHECKSUM addr TO addr [ADDRESS=addr] [FILL=fill] [ROMBIOS|CRC16|CRC32]
Examples 範例
CLASS 用來指定物理位置到 class 的每一個 segment。
Syntax: CLASS classname = addr16
Examples 範例
COMPRESS 用來壓縮重覆的 class,藉此節省空間。
Syntax: COMPRESS classname
Examples 範例
CPUTYPE 用來指定微處器的型號。
Syntax: CPUTYPE cpu_id
Examples 範例
Syntax: DISPLAY option [option ...]
Examples 範例
DUPLICATE 用來複製一個 class。一般都是 startup code 用來複製 FLASH 到 RAM。
Syntax: DUPLICATE src_class dest_class
Examples 範例
HEXFILE
Syntax: HEXFILE [INTEL80|INTEL86|INTEL386|BINARY|TEKHEX] [OFFSET=addr] [SIZE=size] [SPLIT=split] [FILL=fill] [LENGTH=len] [TRUNCATE] [EOFRECORD|NOEOFRECORD] [ENTRYPOINT|NOENTRYPOINT] [FILENAME=file]
Examples 範例
Source Pools 是 node 的集合,用來整理成堆的 source/header files。由於在 .rom 只能新增 node,如果 source file 很多的時候,就變成一團,很難搜尋要修改的檔案。但是 Paradigm 又不援目錄格式,此時就只能靠 SourcePools 來收集 nodes 再丟進 .rom 內,也就是相當於變相的目錄格式。
pcppug.pdf 寫的
>> plib [@respfile] [option] libname [operations] [, listfile]
執行 PLIB 寫的
>> PLIB libname [/C] [/E] [/P] [/0] commands, listfile
CD4052/CC4052是一個差分4通道數位控制類比開關,有A、B兩個二進位控制輸入端和INH輸入,具有低導通阻抗和很低的截止漏電流。幅值為4.5~20V的數位信號可控制峰峰值至20V的類比信號。例如,若 VDD=+5V,VSS=0,VEE=-13.5V,則 0~5V 的數位信號可控制 -13.5~4.5V 的類比信號,這些開關電路在整個 VDD-VSS 和 VDD-VEE 電源範圍內具有極低的靜態功耗,與控制信號的邏輯狀態無關,當 INH 輸入端="1"時,所有通道截止。二位元二進位輸入信號選通 4 對通道中的一通道,可連接該輸入至輸出。
Truth Table
INHIBIT | B | A | "ON" CHANNELS |
0 | 0 | 0 | 0X,0Y |
0 | 0 | 1 | 1X,1Y |
0 | 1 | 0 | 2X,2Y |
0 | 1 | 1 | 3X,3Y |
1 | - | - | none |
Pin Define
PIN | Symbol | Function |
1,2,4,5 | IN/OUT | Y 通道輸入/輸出端 |
11,12,14,15 | IN/OUT | X 通道輸入/輸出端 |
9,10 | IN/OUT | 地址端 |
3 | OUT/IN | Y 公共輸出/輸入端 |
13 | OUT/IN | X 公共輸出/輸入端 |
6 | INH | 禁止端 |
7 | VEE | 類比訊號接地端 |
8 | Vss | 數位訊號接地端 |
16 | VDD | 電源+ |
參考資料
我使用是 WT61P9,板子是公司的,不知道跟公板有沒有差別,反正什麼資料都沒有,只好把自己試的結果記錄下來。
不管有沒有做好設定,都要按 Exit&Save 才能離開,右上角的 X 鈕根本沒用。按下 Exit&Save 後,會自動偵測 USB 是否有作用,如果 USB 沒接會出現 "NO USB Device Connect";如果有接上,則沒有任何訊息。雖然會偵測 USB 功能,但卻不會偵測 MCU type 有沒有選對喔。