




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言扩展部分1.1.1 扩展关键字1. asm也可以写成 _asm。功能是在c程序中直接嵌入汇编语言。Asm(“string”);其中string必须是有效的汇编语句。2. _interrupt放在函数前面,标志中断函数。下面这段程序是异步串行口UART0的接受中断函数。UART0RX_VECTOR为异步串行口UART0的接受中断向量。举例:#pragma vector=UART0RX_VECTOR_interrupt void UARTO_R(void)TXBUF0=RXBUF0;3. _monitor放在函数前面,功能是当这一函数执行的时候自动关闭中断。应该尽量缩短这样的函数,否则,中断事件无法得到及时的响应。4. _no_init放在全局变量前面,功能是使程序启动时不为变量赋初值。5. _raw编译中断函数时,编译器会自动生成一段代码,首先保存当时所用到CPU内寄存器的内容,退出中断程序时再进行恢复。将_raw放在中断函数前可禁止保存CPU内寄存器的过程,当然退出时也不会恢复。是否为中断函数使用此关键字需要更具具体情况而定。6. _regvar放在变量前面,作用是声明变量为寄存器变量。可以用于整数、指针、32位浮点数以及只含有一个元素的结构和联合体。寄存器变量的地址只能为R4或者R5,也不能使用指针指向这个寄存器变量,而且必须用_no_init禁止初始化。如:_regvar _no_init unsigned char q0 _R4;其他不常用的关键字还有:_data16、_intrinsic、_noreturn、_root、_task、_word16。1.1.2 内部函数1. _bcd_add_shortUnsigned short _bcd_add_short(unsigned short,unsigned short);功能:两个16为BCD格式的数字相加,返回和。2. _bcd_add_longUnsigned long _bcd_add_long(unsigned long,unsigned long);功能:两个32位BCD格式的数字相加,返回和。3. _bcd_add_long_long功能:两个64位BCD格式的数字相加,返回和。4. _bic_SR_registerVoid _bic_SR_register(unsigned short);功能:将CPU中SR寄存器中的某些位清零。其参数为屏蔽码,需要清零的位为1。5. _bic_SR_register_on_exitVoid _bic_SR_register_on_exit(unsigned short);功能:用于一个中断函数或者不可中断函数(标志为_monitor)返回时,将CPU内SR寄存器中得某些位清0.其参数为屏蔽码,需要清零的位为1.6. _bis_SR_registerVoid _bis_SR_register(unsigned short);功能:将CPU中SR寄存器中得某些位置1.其参数为屏蔽码,需要置1的位为1.7. _bis_SR_register_on_exitVoid _bis_SR_register_on_exit(unsigned short);功能:用于一个中断函数或者不可中断函数(标志为_monitor)返回时,将CPU内SR寄存器中得某些位置1.其参数为屏蔽码,需要置1的位为1.8. _disable_interruptVoid _disable_interrupt(void);功能:关闭全局中断。先执行DINT指令,关闭全局中断,然后再执行NOP指令。空指令是为了确保关闭了全局中断之后再执行下面的程序。9. _enable_interruptVoid _enable_interrupt(void);功能:使用NINT指令打开全局中断。10. _even_in_rangeUnsigned short _even_in_range(unsigned short value,unsigned short upper_limit);功能:只能与switch语句结合使用,判断value是否为偶数且小于等于upper_limit.举例:Unsigned int MoonRiver,iq0;Iq0=2;Switch(_even_in_range(iq0,4)Case 0:MoonRiver=0;Break;Case 2:MoonRiver=2;结果:假设iq0的值为2,执行完毕时MoonRiver=2.否则,与普通的switch语句一样,跳过case部分,直接执行下面的程序。使用_even_in_range的好处是可以生成效率比较高的代码,在判断多中断源时可以使用此函数。11. _get_interrupt_stateIstate_t _get_interrupt_state(void);功能:返回当前的中断状态。返回值istate_t为一结构,通过此函数可以将获得当前的中断状态并保存,将来可以使用_set_interrupt_state恢复中断状态。12. _get_R4_registerUnsigned short _get_R4_register(void);功能:返回寄存器R4的值,只在R4被锁定时有效。13. _get_R5_registerUnsigned short _get_R5_register(void);功能:返回寄存器R5的值,只在R5被锁定时有效。14. _get_SP_registerUnsigned short _get_SP_register(void);功能:返回堆栈指针寄存器SP的值。15. _get_SR_registerUnsigned short _get_SR_register(void);功能:返回CPU中状态寄存器SR的值。16. _get_SR_register_on_exitUnsigned short _get_SR_register_on_exit(void);功能:用于一个中断函数或者不可中断函数(标志为_monitor)返回时,返回状态寄存器SR的值。只在中断函数或者不可中断函数中有效。17. _low_power_mode_nVoid _low_power_mode_n(void);功能:进入低功耗模式04.18. _low_power_mode_off_on_exitVoid _low_power_mode_off_on_exit(void);功能:从一个中断函数或者不可中断函数(标志为_monitor)返回时退出低功耗模式。只在 中断或者不可中断函数中有效。19. _no_operationVoid _no_operation(void);功能:执行NOP指令。20. _op_code_op_code(unsigned short);功能:在指令流中插入一个常数。21. _segment_beginVoid *_segment_begin(segment);功能:segment 是段的名字,必须是字符串。返回指向segment段的地址。此处的段是程序中定义的数据段、代码段、堆栈段等,一般用户可以使用编译器的默认设置。22. _segment_endVoid *_segment_end(segment);功能:segment是段的名字,必须是字符串。返回指向segment 段结束后的第一个字节的地址。23. _set_interrupt_stateVoid _set_interrupt_state(istate_t);功能:恢复istate_t中保存的中断状态。24. _set_R4_registerVoid _set_R4_register(unsigned short);功能:将unsigned short值赋给寄存器R4,只在R4被锁定时有效。25. _set_R5_registerVoid _set_R5_register(unsigned short);功能:将unsigned short 值赋给寄存器R5,只在R5被锁定时有效。26. _set_SP_registerVoid _set_SP_register(unsigned short);功能:给堆栈指针寄存器SP赋值。27. _swap_bytesUnsigned short _swap_bytes(unsigned short);功能:一个16位的无符号整数,高8位与低8位进行交换。如0x1234交换后0x3412.1.1.3 扩展定义1. PxIN、PxOUT、PxDIR、PxSELX为端口号。IN为端口输入寄存器,OUT为端口输出寄存器,DIR为端口方向控制寄存器,SEL为端口第二功能选择寄存器。举例:Moon=P1IN;/读端口P1的值P3OUT=5;/P3端口输出5P2DIR=0XF0;/P2端口的高四位为输出,低4位为输入P6SEL=0XF;/P6端口的高四位用作I/O端口,低4位用于第二功能2. BITxX的取值范围为0F。代表寄存器的某一位。其定义为:#define BIT0 (0X0001)#define BIT1 (0X0002)#define BITE (0X4000)#define BITF (0X8000)BIT0为最低位,BITF为最高位。MSP430是不支持位操作的,如果想对位操作,最好的方法就是通过位屏蔽来实现。举例:P1OUT|=BIT0;/将P1口的最低位输出置1P1OUT&=BIT7;/将P1口的最高位输出清0,P1口只有8位3. LMPxX:04.进入04低功耗模式。其定义为:#define LPM0_BIS_SR(LPM0_bits)/进入低功耗模式0#define LPM0_BIS_SR(LPM4_BITS)/进入低功耗模式4从以上代码可以看出扩展定义是对内部函数的二次包装举例:LPM0;/进入低功耗模式0LPM4;/进入低功耗模式44. LPMx_EXITX:04。退出04低功耗模式。其定义为:#define LPM0_EXIT _BIC_SR_IRQ(LPM0_bits)/退出低功耗模式0#define LPM4_EXIT _BIC_SR_IRQ(LPM4_bits)/退出低功耗模式4举例:LPM0_EXIT;LPM4_EXIT;5. _EINT()打开全局中断控制,使GIE=1。6. _DINT()关闭全局中断控制,使GIE=0.执行_disable_interrupt指令。7. _NOP()空操作。执行_no_operation指令。8. _OPC(x)在指令流中插入一个常数。X为unsigned char 类型。执行_op_code指令。9. _SWAP_BYTES(x)X是一个16位的无符号整数,高8位与低8位进行交换。执行_swap_bytes指令。10. _no_init 数据类型 变量名 地址在某一固定地址处定义一个不进行初始化的变量,地址可以在RAM或FLASH内。如果使用此方式定义在RAM内的变量需要赋值,那么必须先定义,然后才能赋值。举例:/*分配变量MoonRiver在RAM地址0x210*/_no_init unsigned int MoonRiver 0x210;/没有初始化MoonRiver=100;/初始化MoonRiver 为100/*分配变量MoonRiver在FLASH地址0XFFC0*/_no_init float MoonRiver 0Xffc0;/*分配数组MoonRiver3 在RAM地址0X200*/_no_init char MoonRiver3 0x200;/*分配结构sMoonRiver在RAM地址0X200*/typedef structUnsigned char q0;Unsigned char iq0;sMoonRiver;/定义一个结构型的数据类型,名为sMoonRiver_no_init sMoonRiver MoonRiver 0x200;/声明变量MoonRiver,其数据类型为sMoonRiverMoonRiver.q0=100;MoonRiver.iq0=1000; /为MoonRiver赋初值11. Const 数据类型 变量名 地址在某一固定地址处定义一个只读变量,并且只能在定义的时候赋初值。这种定义变量的方式在FLASH的固定地址处分配变量时非常有用。举例:/*分配变量MoonRiver在RAM地址0x210*/Const unsigned int MoonRiver 0x210 =100;/初始化MoonRiver为100/*分配变量MoonRiver在FLASH地址0XFFC0*/Const float MoonRiver 0XFFC0=32.5;/初始化MoonRiver为32.5/*分配数组MoonRiver3在FLASH地址0XFF00*/Const char MoonRiver3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年施工员专业基础知识全真模拟试卷及答案(共七套)
- 精明宝宝测试题及答案
- 新型纳米材料的合成挑战试题及答案
- 安全工程师考试中关于事故处理的求解考题试题及答案
- 有机合成反应类型试题及答案
- 黄石社区面试真题及答案
- 2025年公务员考试题目及答案
- 家具设计师的创新思维与案例分析试题及答案
- 小学教育教学反思对教师发展的重要性试题及答案
- 中药现代化进程中的国际市场中药产品价格策略研究报告
- 2025年春季形势与政策-从教育大国迈向教育强国
- 江苏省盐城市2023-2024学年高一下学期6月期末考试 生物 含解析
- 啤酒厂精酿生产线安全操作规程
- 2024年秋季学期新外研版(三起)英语三年级上册课件 Unit6 Part1
- 外研版(2025新版)七年级下册英语Unit 1 学情调研测试卷(含答案)
- 前程无忧测评题库及答案
- 桩基础工程施工进度计划及工期保证措施
- 岗位职责会议组织模板
- 《边防检查法律法规》课件
- 颂钵疗愈师培训
- 2023中华护理学会团体标准-注射相关感染预防与控制
评论
0/150
提交评论