日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

M16C

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 M16C 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
R8C/M16C提供一系列預處理指令,能夠很好的優化C代碼。?
本文以nc30編譯器為例,談談#pragma的用法。?

1)。與內存有關的命令?
#pragma ROM?
將一個變量放入ROM里面,比如:?
#pragma ROM aa?
int aa;?

#pragma BIT?
位變量申明。表示將一個變量放在能夠進行位操作指令的地址區,比如:?
#pragma BIT aa;?
struct _aa{?
char bit0:1;?
char bit: 7;?
}aa;?
aa.bit0 = 1;?

#pragma SBDATA?
申明訪問變量是基于SB寄存器尋址的方式,如:?
#pragma SBDATA aa;?
int aa;?
訪問aa時,是基于SB寄存器尋址的?

#pragma SECTION?
將程序或變量什么在某個區域?

#pragma STRUCT?
結構體對齊申明?
#pragma STRUCT _aa unpacked?
struct _aa{?
int aa;?
char bb;?
};?
表示結構體_aa不對齊?

#pragma EXT4MPTR?
表示將變量申明在大于4MB的區域?
#pragma EXT4MPTR aa?
int _far aa;?


2),針對目標平臺的預處理指令?
#pragma ADDRESS?
絕對地址申明,將變量放入某個絕對地址,例如?
#pragma ADDRESS aa 0xff000?
int aa;?

#pragma BITADDRESS?
位絕對地址申明。典型應用是申明一個bool變量到某個絕對地址?
#pragma BITADDRESS aa 0 0xff000?
_Bool aa;?

#pragma INTCALL?
申明一個軟中斷(int指令)函數?
#pragma INTCALL 25 func()?
void main(void)?
{?
func();?
}?
執行func()時,相當于執行int 25指令?

#pragma INTERRUPT?
這個就不多說了,申明一個中斷服務子函數?
#pragma INTERRUPT isr1(vect = 20)?
void isr1(void);?

#pragma PARAMETER?
申明通過寄存器傳遞參數到匯編函數?
int asm_func(int, int);?
#pragma PARAMETER asm_func(R0,R1)?
void main(void)?
{?
int i,j;?
asm_func(i,j);?
}?
表示i,j參數通過寄存器R0,R1傳遞到匯編函數asm_func();?


3),匯編預處理指令?
#pragma ASM?
#pragma ENDASM?
內嵌匯編指令,例如:?
void fun(void)?
{?
#pragma ASM?

fset i?
nop?
#pragma ENDASM?
}?

#pragma JSRA?
申明調用一個函數時,使用JSR.A指令?
extern void func();?
#pragma JSRA func?
void main(void)?
{?
func();?
}?

#pragma JSRW?
類似于#pragma JSRA?


后記:?
還有基于M16C系列RTOS的預處理指令,例如?
#pragma TASK tsk1?
void tsk1(void)?
{?
}?
表示申明tsk1為一個任務(線程)。?
等等。

總結

以上是生活随笔為你收集整理的M16C的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。