"#pragma CODE_SEG __NEAR_SEG NON_BANKED"这句有什么用?
2017-03-01 14:43
316 查看
飞思卡尔S12单片机? 这句话是将接下来的代码(一般是中断函数)置于非分页区。请参看我对S12单片机中断函数的回答。http://zhidao.baidu.com/question/224213298.html #pragma CODE_SEG __NEAR_SEG NON_BANKED //中断函数置于非分页区内 interrupt VectorNumber_Vtimch7 void ICU_Ch7Int(void) { TFLG1_C7F = 1; //清中断标志位 } #pragma CODE_SEG DEFAULT //后续代码置于默认区域内 我一般是用上述方式声明中断函数。 由于飞思卡尔16位单片机的中断向量是16位,所以中断函数只有被置于非分页区内才能被寻址到,这就是第一行的作用。 第二行中“VectorNumber_Vtimch7”是中断号,它是由文件“MC9S12XS128.h”中定义的宏,这个中断号在它的技术手册中找到,但是我建议你采用这种宏的形式,因为这个宏不容易出错,可读性较高,比如“VectorNumber_Vtimch7”即为定时器(TIM)通道7(CH7)所对应的中断号。中断函数名“ICU_Ch7Int”可任意取,没有影响。 由于单片机内部非分页区大小有限,非中断函数一般置于分页区内,最后一行即为此作用。
一定要置于非分页区才能被寻址到吗?我写的中断没有用#pragma CODE_SEG __NEAR_SEG NON_BANKED #pragma CODE_SEG DEFAULT 划分也可以执行?是否寻址和执行是两回事?
呃,S12单片机的话有分页区,地址空间超过了16位的寻址空间64K,但是它的中断向量地址只有16位,所以中断程序要执行,就得在它16位的寻址空间也即非分页区内,这就是为什么会将S12的中断函数置于非分页区的原因。当然,如果你是其它单片机,那可能情况会不一样。
相关文章推荐
- "#pragma CODE_SEG __NEAR_SEG NON_BANKED"这句有什么用?
- "#pragma CODE_SEG __NEAR_SEG NON_BANKED"这句有什么用?
- "#pragma CODE_SEG __NEAR_SEG NON_BANKED"这句有什么用?
- #pragma CODE_SEG __NEAR_SEG NON_BANKED详解
- #pragma CODE_SEG __NEAR_SEG NON_BANKED/#pragma CODE_SEG DEFAULT
- 为什么在写中断函数时要写#pragma CODE_SEG __NEAR_SEG NON_BANKED这句话,是不是没什么实际作用的啊 '中断函数置于非分页区内'这是什么意思啊,非分页区是什么啊
- #pragma CODE_SEG __NEAR_SEG NON_BANKED详解
- #pragma code_seg("INIT")/code_seg("PAGE")
- txtPlantCode_d.Text = Format(CInt(strTmp), "000")这段程序是什么意思?
- 声明中"AutoEventWireup"、"Codebehind"、"Inherits"分别表示什么
- android.database.sqlite.SQLiteException: near "where": syntax error (code 1): ,
- pragma code_seg
- #pragma comment(lib,"wsock32.lib")是干什么用的?
- 有关#pragma warning,#pragma message,#pragma code_seg,#pragma comment
- 声明中"AutoEventWireup"、"Codebehind"、"Inherits"分别表示什么意思?
- #pragma comment(lib,"ws2_32.lib")是什么意思
- #pragma comment(lib,"wsock32.lib")是干什么用的?
- <meta http-equiv="pragma" content="no-cache"/>是什么意思?
- android.database.sqlite.SQLiteException: near "order": syntax error (code 1):数据库报错
- 声明中"AutoEventWireup"、"Codebehind"、"Inherits"分别表示什么意思?