#pragma用法_汇总.doc
#pragma用法 汇总 doc 最近总有人问#pragma CODE SEG NEAR SEG NON BANKED 还有#pragma LINK INFO DERIVATIVE "mc9s12xs128"这些函数是什么意思 我在网上收集了一些资料希望能解大家疑惑 #pragma LINK INFO DERIVATIVE "mc9s12xs128“ 是用来改变mcu的 有了这句就不用手工改了 自动修改 你可以试一下 建一个工程 然后改变mcu具体:你先建一个工程 然后改变mcu 在工程窗口里有一个类似芯片的按钮按一下 或者在工程里面点击change mcu 然后你在查看一下工程文件 就会自动改变相应的文件 #pragma CODE SEG NEAR SEG NON BANKED前一段时间写函数中断时 经常要加上#pragma语句 否则 编译就会出错 有飞思卡尔的16位单片机写过中断函数的人 就会知道在中断函数前必须加上代码 #pragma CODE SEG NEAR SEG NON BANKED 函数结束的时候最好加上#pragma CODE SEG DEFAULT(这个也可不加 但最好加上 以防出现bug ">#pragma用法 汇总 doc 最近总有人问#pragma CODE SEG NEAR SEG NON BANKED 还有#pragma LINK INFO DERIVATIVE "mc9s12xs128"这些函数是什么意思 我在网上收集了一些资料希望能解大家疑惑 #pragma LINK INFO DERIVATIVE "mc9s12xs128“ 是用来改变 [更多] `#pragma`是C语言中的一种预处理器指令,用于向编译器提供特定的命令或信息,以控制编译过程。在嵌入式系统开发,尤其是针对特定微控制器(MCU)的编程中,`#pragma`指令尤其有用。本文将详细介绍其中两个常见的`#pragma`用法:`#pragma CODE_SEG`和`#pragma LINK_INFO DERIVATIVE`,以及其它一些常见的`#pragma`指令。 1. **`#pragma LINK_INFO DERIVATIVE`**: 这个指令主要用于指定链接器(linker)在生成可执行文件时应使用的微控制器型号。在描述中提到的例子中,`#pragma LINK_INFO DERIVATIVE "mc9s12xs128"`告诉链接器目标系统是基于`mc9s12xs128`的微控制器。这有助于自动化更改工程配置,避免手动修改所有相关文件。当改变MCU类型时,编译器和链接器可以自动调整以适应新硬件的需求。 2. **`#pragma CODE_SEG`**: 这个指令用于指定代码段(code segment),它告诉编译器将特定的函数或代码块放入内存的某个特定区域。在16位单片机编程,尤其是飞思卡尔(现为NXP)的MCU中,中断服务例程通常需要在非分页(non-banked)的内存区域中。`#pragma CODE_SEG __NEAR_SEG NON_BANKED`确保中断服务函数位于非分页存储区,因为中断处理通常需要快速访问的数据,而分页存储可能增加访问延迟。`#pragma CODE_SEG DEFAULT`则恢复到默认的代码段设置,通常在函数结尾使用,以防因未正确设置代码段导致问题。 除此之外,还有一些其他常见的`#pragma`指令: 3. **`#pragma message`**: 用于在编译期间输出自定义的提示信息,帮助开发者追踪代码的编译过程。 4. **`#pragma once`**: 确保头文件只被包含一次,避免重复包含导致的问题。 5. **`#pragma hdrstop`**: 结束当前头文件的预编译,防止包含的其他头文件被进一步处理。 6. **`#pragma warning`**: 控制警告信息的显示,可以禁用、启用或提升警告级别为错误。 7. **`#pragma comment`**: 在生成的.obj或.exe文件中添加注释,通常用于指定需要链接的库文件,如`#pragma comment(lib, "user32.lib")`将用户界面库user32.lib链接到项目中。 8. **`#pragma pack`**: 设置结构体成员的对齐方式,影响内存分配和数据存取效率。 了解并熟练运用`#pragma`指令,能显著提高代码的移植性、效率和可维护性。在编写特定平台的嵌入式软件时,这些工具是不可或缺的。希望这些信息能解答大家关于`#pragma`用法的疑惑,并帮助你更好地理解和使用这些功能。