飞思卡尔学习笔记

飞思卡尔学习笔记
飞思卡尔学习笔记

一般用于将C++代码以标准C形式输出(即以C的形式被调用),这是因为C++虽然常被认为是C的超集,但是C++的编译器还是与C的编译器不同的。C中调用C++中的代码这样定义会是安全的。

一般的考虑跨平台使用方法如下:

#ifdef ined(__cplusplus)||defined(c_plusplus) //跨平台定义方法

extern "C"{

#endif

//... 正常的声明段

#ifdef ined(__cplusplus)||defined(c_plusplus)

}

#endif

简单的用在windows下可以如下定义:

#ifdef__cplusplus

extern "C"{

//... 正常的声明段

}

#endif

#pragma

在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。

一般格式

其格式一般为: #pragma Para。其中Para 为参数,下面来看一些常用的参数message 参数

Message 参数能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:

#pragma message(“消息文本”)

当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。

当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法

#ifdef _X86

#pragma message("_X86 macro activated!")

#endif

当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_X86 macro activated! ”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。

code_seg

另一个使用得比较多的pragma参数是code_seg。格式如:

#pragma code_seg( ["section-name"[,"section-class"] ] )

它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它

#pragma once

(比较常用)

只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。

#pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。

#ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式

#pragma hdrstop

#pragma hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。

有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。你可以用#pragma startup指定编译优先级,如果使用了#pragma package(smart_init) ,BCB就会根据优先级的大小先后编译。

#pragma resource

#pragma resource "*.dfm"表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体外观的定义。#pragma warning

#pragma warning( disable : 4507 34; once : 4385; error : 164 )

等价于:

#pragma warning(disable:4507 34) // 不显示4507和34号警告信息

#pragma warning(once:4385) // 4385号警告信息仅报告一次

#pragma warning(error:164) // 把164号警告信息作为一个错误。

同时这个pragma warning 也支持如下格式:

#pragma warning( push [ ,n ] )

#pragma warning( pop )

这里n代表一个警告等级(1---4)。

#pragma warning( push )保存所有警告信息的现有的警告状态。

#pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告等级设定为n。

#pragma warning( pop )向栈中弹出最后一个警告信息,

在入栈和出栈之间所作的一切改动取消。例如:

#pragma warning( push )

#pragma warning( disable : 4705 )

#pragma warning( disable : 4706 )

#pragma warning( disable : 4707 )

//.......

#pragma warning( pop )

在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)。

pragma comment

pragma comment(...)

该指令将一个注释记录放入一个对象文件或可执行文件中。

常用的lib关键字,可以帮我们连入一个库文件。

每个编译程序可以用#pragma指令激活或终止该编译程序支持的一些编译功能。例如,对循环优化功能:

#pragma loop_opt(on) // 激活

#pragma loop_opt(off) // 终止

有时,程序中会有些函数会使编译器发出你熟知而想忽略的警告,如“Parameter xxx is never used in function xxx”,可以这样:

#pragma warn —100 // Turn off the warning message for warning #100

int insert_record(REC *r)

{ /* function body */ }

#pragma warn +100 // Turn the warning message for warning #100 back on

函数会产生一条有唯一特征码100的警告信息,如此可暂时终止该警告。

每个编译器对#pragma的实现不同,在一个编译器中有效在别的编译器中几乎无效。可从编译器的文档中查看。

#pragma pack(n)和#pragma pop()

struct sample

{

char a;

double b;

};

当sample结构没有加#pragma pack(n)的时候,sample按最大的成员那个对齐;

(所谓的对齐是指对齐数为n时,对每个成员进行对齐,既如果成员a的大小小于n则将a扩大到n个大小;

如果a的大小大于n则使用a的大小;)所以上面那个结构的大小为16字节.

当sample结构加#pragma pack(1)的时候,sizeof(sample)=9字节;无空字节。

(另注:当n大于sample结构的最大成员的大小时,n取最大成员的大小。

所以当n越大时,结构的速度越快,大小越大;反之则)

#pragma pop()就是取消#pragma pack(n)的意思了,也就是说接下来的结构不用#pragma pack(n)

#pragma comment( comment-type ,["commentstring"] )

comment-type是一个预定义的标识符,指定注释的类型,应该是compiler,exestr,lib,linker 之一。

commentstring是一个提供为comment-type提供附加信息的字符串。

注释类型:

1、compiler:

放置编译器的版本或者名字到一个对象文件,该选项是被linker忽略的。

2、exestr:

在以后的版本将被取消。

3、lib:

放置一个库搜索记录到对象文件中,这个类型应该是和commentstring(指定你要Linker搜索的lib的名称和路径)这个库的名字放在Object文件的默认库搜索记录的后面,linker搜索这个这个库就像你在命令行输入这个命令一样。你可以在一个源文件中设置多个库记录,它们在object文件中的顺序和在源文件中的顺序一样。如果默认库和附加库的次序是需要区

别的,使用Z编译开关是防止默认库放到object模块。

4、linker:

指定一个连接选项,这样就不用在命令行输入或者在开发环境中设置了。

只有下面的linker选项能被传给Linker.

/DEFAULTLIB ,/EXPORT,/INCLUDE,/MANIFESTDEPENDENCY, /MERGE,/SECTION

(1) /DEFAULTLIB:library

/DEFAULTLIB 选项将一个library 添加到LINK 在解析引用时搜索的库列表。用/DEFAULTLIB 指定的库在命令行上指定的库之后和.obj 文件中指定的默认库之前被搜索。忽略所有默认库(/NODEFAULTLIB) 选项重写/DEFAULTLIB:library。如果在两者中指定了相同的library 名称,忽略库(/NODEFAULTLIB:library) 选项将重写/DEFAULTLIB:library。

(2)/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]

使用该选项,可以从程序导出函数,以便其他程序可以调用该函数。也可以导出数据。通常在DLL 中定义导出。entryname是调用程序要使用的函数或数据项的名称。ordinal 在导出表中指定范围在 1 至65,535 的索引;如果没有指定ordinal,则LINK 将分配一个。NONAME关键字只将函数导出为序号,没有entryname。

DATA 关键字指定导出项为数据项。客户程序中的数据项必须用extern __declspec(dllimport)来声明。

有三种导出定义的方法,按照建议的使用顺序依次为:

源代码中的__declspec(dllexport).def 文件中的EXPORTS 语句LINK 命令中的/EXPORT 规范所有这三种方法可以用在同一个程序中。LINK 在生成包含导出的程序时还创建导入库,除非生成中使用了.exp 文件。

LINK 使用标识符的修饰形式。编译器在创建.obj 文件时修饰标识符。如果entryname以其未修饰的形式指定给链接器(与其在源代码中一样),则LINK 将试图匹配该名称。如果无法找到唯一的匹配名称,则LINK 发出错误信息。当需要将标识符指定给链接器时,请使用Dumpbin 工具获取该标识符的修饰名形式。

(3)/INCLUDE:symbol

/INCLUDE 选项通知链接器将指定的符号添加到符号表。

若要指定多个符号,请在符号名称之间键入逗号(,)、分号(;) 或空格。在命令行上,对每个符号指定一次/INCLUDE:symbol。

链接器通过将包含符号定义的对象添加到程序来解析symbol。该功能对于添包含不会链接到程序的库对象非常有用。用该选项指定符号将通过/OPT:REF 重写该符号的移除。

我们经常用到的是#pragma comment(lib,"*.lib")这类的。#pragma comment(lib,"Ws2_32.lib")表示链接Ws2_32.lib这个库。和在工程设置里写上链入Ws2_32.lib的效果一样,不过这种方法写的程序别人在使用你的代码的时候就不用再设置工程settings了

3#pragma disable

在函数前声明,只对一个函数有效。该函数调用过程中将不可被中断。一般在C51中使用较多。

#pragma data_seg

#pragma data_seg介绍[1]

用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为:

#pragma data_seg ("shareddata")

HWND sharedwnd=NULL;//共享数据

#pragma data_seg()

-----------------------------------------------------------------

1,#pragma data_seg()一般用于DLL中。也就是说,在DLL中定义一个共享的有名字的数据段。最关键的是:这个数据段中的全局变量可以被多个进程共享,否则多个进程之间无法共享DLL中的全局变量。

2,共享数据必须初始化,否则微软编译器会把没有初始化的数据放到.BSS段中,从而导致多个进程之间的共享行为失败。例如,

#pragma data_seg("MyData")

int g_Value; // Note that the global is not initialized.

#pragma data_seg()

DLL提供两个接口函数:

int GetValue()

{

return g_Value;

}

void SetValue(int n)

{

g_Value = n;

}

然后启动两个进程A和B,A和B都调用了这个DLL,假如A调用了SetValue(5); B接着调用int m = GetValue(); 那么m的值不一定是5,而是一个未定义的值。因为DLL中的全局数据对于每一个调用它的进程而言,是私有的,不能共享的。假如你对g_Value进行了初始化,那么g_Value就一定会被放进MyData段中。换句话说,如果A调用了SetValue(5); B接着调用int m = GetValue(); 那么m的值就一定是5,这就实现了跨进程之间的数据通信。

4应用实例(#pragma pack)

在网络协议编程中,经常会处理不同协议的数据报文。一种方法是通过指针偏移的方法来得到各种信息,但这样做不仅编程复杂,而且一旦协议有变化,程序修改起来也比较麻烦。在

了解了编译器对结构空间的分配原则之后,我们完全可以利用这一特性定义自己的协议结构,通过访问结构的成员来获取各种信息。这样做,不仅简化了编程,而且即使协议发生变化,我们也只需修改协议结构的定义即可,其它程序无需修改,省时省力。下面以TCP协议首部为例,说明如何定义协议结构。

其协议结构定义如下:

#pragma pack(1) // 按照1字节方式进行对齐

struct TCPHEADER

{

short SrcPort; // 16位源端口号

short DstPort; // 16位目的端口号

int SerialNo; // 32位序列号

int AckNo; // 32位确认号

unsigned char HaderLen : 4; // 4位首部长度

unsigned char Reserved1 : 4; // 保留6位中的4位

unsigned char Reserved2 : 2; // 保留6位中的2位

unsigned char URG : 1;

unsigned char ACK : 1;

unsigned char PSH : 1;

unsigned char RST : 1;

unsigned char SYN : 1;

unsigned char FIN : 1;

short WindowSize; // 16位窗口大小

short TcpChkSum; // 16位TCP检验和

short UrgentPointer; // 16位紧急指针

};

#pragma pop() // 取消1字节对齐方式

#pragma pack规定的对齐长度,实际使用的规则是:结构,联合,或者类的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度中,比较大的那个进行。但是,当#pragma pack的值等于或超过最长数据成员的长度的时候,这个值的大小将不产生任何效果。而结构整体的对齐,则按照结构体中最大的数据成员和#pragma pack指定值之间,较小的那个进行。

飞思卡尔智能车电机资料上课讲义

3.1.6驱动电机介绍 驱动电机采用直流伺服电机,我们在此选用的是RS-380SH型号的伺服电机,这是因为直流伺服电机具有优良的速度控制性能,它输出较大的转矩,直接拖动负载运行,同时它又受控制信号的直接控制进行转速调节。在很多方面有优越性,具体来说,它具有以下优点: (1)具有较大的转矩,以克服传动装置的摩擦转矩和负载转矩。 (2)调速范围宽,高精度,机械特性及调节特性线性好,且运行速度平稳。 (3)具有快速响应能力,可以适应复杂的速度变化。 (4)电机的负载特性硬,有较大的过载能力,确保运行速度不受负载冲击的 影响。 (5)可以长时间地处于停转状态而不会烧毁电机,一般电机不能长时间运行 于停转状态,电机长时间停转时,稳定温升不超过允许值时输出的最大堵转转矩称为连续堵转转矩,相应的电枢电流为连续堵转电流。 图3.1为该伺服电机的结构图。图3.2是此伺服电机的性能曲线。 图3.1 伺服电机的结构图

图3.2 伺服电机的性能曲线 3.1.7 舵机介绍 舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。其工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。一般舵机的控制要求如图3.3所示。图3.4为舵机的控制线。 图3.3 舵机控制要求

飞思卡尔K60 DMA 中文手册

/*----------------------------------------------------------------------------------------------------------------------------- 桂林电子科技大学 物联网工程 Editor:JaceLin Date:2014.2.5 -------------------------------------------------------------------------------------------------------------------------------- 一、DMA特性 1)k60有16个DMA通道 二、寄存器 1)控制寄存器:DMA_CR 31-18 reserved 17 CX 取消转移,0正常操作,1取消剩下数据转移 16 ECX 错误取消转移,0正常操作,1取消转移 15-8 reserved 14 EMLM 使能副循环映射 0 禁止,TCDn.word2 为32位 1 使能,TCDn.word被重新定义 6 CLM 持续连接模式,0当副循环结束后,再次激活DMA要通过裁决,1不用裁决 5 HALT 停止DMA操作,0正常模式,1停止DMA操作 4 HOE 错误时停止,0正常操作,1当有错误时HALT=1,也就是DMA停止 3 reserved 2 ERCA 使能循环通道裁决, 1 EDBG 使能调试,写0,调试也用DMA,写1,调试时DMA不可用 0 reserved 2)错误状态寄存器DMA_ES 31 VLD 所有错误状态位逻辑或,0没有错误,1表示至少有1个错误没有清除 30-17 保留 16 ECX 转移被取消0没有被取消的转移,1最后一次记录是被取消的转移 15 保留 14 CPE 通道优先错误,0没有通道优先错误,1有 13-12 保留 11-8 ERRXHN 错误通道位/被取消的位(最多16位) 7 SAE 源地址错误,0没有源地址配置错误,1有错误 6 SOE 源偏移错误,0没有源偏移配置错误,1有偏移配置错误 5 DAE 目标地址错误,0没有错,1有错误 4 DOE 目标偏移错误,0没有错误,1有 3 NCE NBYTES/CITER配置错误,0没有,1有 2 SGE Scatter/Gather配置错误,0没有,1有 1 SBE 源总线错误,0没有错误,1有

freescale MC9S12P128中文手册

1 Chapter1 Device Overview MC9S12P-Family 1.1介绍 The MC9S12P 系列单片机是经过优化后有着低成本、高性能、低引脚数的汽车专业级单片机产品,该产品倾向于弥补高端16位单片及产品如MC9S12XS和低端8位单片机产品之间的空缺。MC9S12P 主要针对于要求使用CAN 或者LIN/J2602通讯接口的汽车应用产品,典型的应用案例包括车身控制器、乘坐人员检测、车门控制、座椅控制、遥控车门开关信号接收器、智能执行器、车灯模块、智能接线器。 The MC9S12P 系列单片机使用了很多MC9S12XS系列单片机相同的功能,包括片内闪存错误纠正代码(ECC)、一个专为数据诊断或者数据存储的单独的数据闪存模块、高速AD转换器和高频调制锁相环(IPLL)有效改善电磁兼容性能。MC9S12P系列单片机提供的所有16为单片机优点和微处理器效率,同时保持飞思卡尔用户熟悉的8位及16位单片机,低成本,功耗,EMC和高效的代码80针QFP、64针LQFP、40针QFN封装产品,最大限度的与MC9S12尺寸的优点,如同MC9S12XS一样可以无需等待外围设备和内存的状态既可以运行16为带款的寻址,MC9S12P系列单片机主要有XS引脚兼容. I/O口在各种模式下都可以使用,同时具有中断功能的I/O口还可以在停止或等待模式下唤醒。 1.2 芯片特性 表一:提供了MC9S12P家庭成员特征摘要, 1.P或D寄存器擦除或者编程需要最低总线频率为1MHZ

1.2.2 芯片功能 ? S12 CPU 内核 ? 高达128 KB具有ECC功能的片上闪存 ? 4 Kbyte带ECC功能的数据闪存 ? 高达6 Kb片上静态存储器(SRAM) ? 具有内部滤波器的锁相环倍频器(IPLL) ? 4–16 MHz 皮尔斯振荡器 ? 1 MHz内部RC振荡器 ? 定时器(TIM) 具有16位输入捕捉、输出比较、计数器脉冲累加器功能 ? 具有8位6通道的脉冲调制模块(PWM) ? 10通道12位分辨率的逐次逼近AD转换器 ? 1个串行通信外部接口(SPI) ? 1个支持局域网通讯串行通信(SCI) 模块 ?一个多可扩展控制器区域网络(MSCAN) 模块(支持CAN 协议2.0A/B) ?片上电压调节器(VREG) 可对内部供电及内部电压整流 ? 自主周期中断(API) 1.3 模块特征 1.3.1 CPU S12 CPU 是一个高速的16位处理单元: ?全16-bit数据通道提供有效的数学运算和高速的数学执行 ? 包含很多单字节指令,可以有效的利用ROM空间 ? 宽域变址寻址功能: —采用堆栈指针作为所有变址操作的变址寄存器 —除了在自增或自减模式下都可以利用程序计数器作为变址寄存器 —使用A\B\D累加器做累加器偏移 —自动变址,前递增(++a)、前递减(--a)、后递减(a--)、后递增(a++)(by –8 to +8) 1.3.2 带ECC功能的片内闪存 ? 高达128 Kb程序闪存空间 — 32 位数据加7 位ECC (纠错码) 允许单字节纠错和双字节纠错 — 512字节擦出扇区空间 —自动编程和擦除算法 —用户设置读写页面边界 —具有可以防止偶然编程或者擦除的保护结构 ? 4 Kb 数据闪存空间 — 16 位数据加6位纠错码允许单字节和双字节纠错功能 — 256 字节的擦出扇区空间 —自动编程和擦除算法 —用户设置读写页面边界 1.3.3 片内静态存储器

飞思卡尔MC9S12XS128技术手册翻译AD

飞思卡尔MC9S12XS128技术手册(AD转换部分) 英文资料:飞思卡尔MC9S12XS256RMV1官方技术手册 1.1 XS12系列单片机的特点 XS12系列单片机特点如下: ·16位S12CPU —向上支持S12模糊指令集并去除了其中的MEM, WAV, WAVR, REV, REVW 五条指令; —模块映射地址机制(MMC); —背景调试模块(BDM); ·CRG时钟和复位发生器 —COP看门狗; —实时中断; ·标准定时器模块 —8个16位输入捕捉或输出比较通道;; —16位计数器,8位精密与分频功能; —1个16位脉冲累加器; ·周期中断定时器PIT —4具有独立溢出定时的定时器; —溢出定时可选范围在1到2^24总线时钟; —溢出中断和外部触发器; ·多达8个的8位或4个16位PWM通道 —每个通道的周期和占空比有程序决定; —输出方式可以选择左对齐或中心对其; —可编程时钟选择逻辑,且可选频率范围很宽; ·SPI通信模块 —可选择8位或16位数据宽度;

—全双工或半双工通信方式; —收发双向缓冲; —主机或从机模式; —可选择最高有效为先输出或者最低有效位先输出; ·两个SCI串行通信接口 —全双工或半双工模式 ·输入输出端口 —多达91个通用I/O引脚,根据封装方式,有些引脚未被引出; —两个单输入引脚; ·封装形式 —112引脚薄型四边引线扁平封装(LQFP); —80引脚扁平封装(QFP); —64引脚LQFP封装; ·工作条件 —全功率模式下单电源供电范围3.15V到5V; —CPU总线频率最大为40MHz —工作温度范围–40 C到125 C 第十章模拟—数字转换 10.1 介绍 ADC12B16C是一个16通道,12位,复用方式输入逐次逼近模拟—数字转换器。 ATD的精度由电器规格决定。 10.1.1 特点 ·可设置8位、10位、12位精度 ·在停止模式下,ATD转换使用内部时钟 ·转换序列结束后自动进入低耗电模式 ·可编程采样时间 ·转化结果可选择左对齐或右对齐

飞思卡尔KE02系列简介

1Kinetis E series Kinetis E series provide the highly scalable portfolio of ARM ? Cortex ?-M0+ MCUs in the industry. With 2.7–5.5 V supply and focus on exceptional EMC/ESD robustness,Kinetis E series devices are well suited to a wide range of applications in electrical harsh environments, and is optimized for cost-sensitive applications offering low pin-count option.The Kinetis E series offers a broad range of memory,peripherals, and package options. They share common peripherals and pin counts allowing developers to migrate easily within an MCU family or among the MCU families to take advantage of more memory or feature integration. This scalability allows developers to standardize on the Kinetis E series for their end product platforms, maximising hardware and software reuse and reducing time-to-market. Following are the general features of the Kinetis E series MCUs. ?32-bit ARM Cortex-M0+ core ?Scalable memory footprints from 8 KB flash / 1 KB SRAM to 128 KB flash / 16 KB SRAM ?Precision mixed-signal capability with on chip analog comparator and 12-bit ADC ?Powerful timers for a broad range of applications including motor control ?Serial communication interfaces such as UART, SPI,I 2C, and others. ?High security and safety with internal watchdog and programmable CRC module Product Brief Rev 3, 07/2013 KE02 Product Brief Supports all KE02 devices ? 2013 Freescale Semiconductor, Inc. Contents 1Kinetis E series..........................................................12KE02 sub-family introduction..................................23Block diagram...........................................................34Features.....................................................................45Power modes.. (136) Revision history (14)

飞思卡尔汽车芯片

飞思卡尔推出业界最强大的汽车动力总成系统微 控制器 2011-10-14 18:05:18 来源:与非网 关键字:飞思卡尔Qorivva MCU 动力总成控制系统 2011年10月12日-德国巴登(2011汽车电子系统展览会)–汽车厂商继续通过新的汽车设计将业界标准提升至新高度,通过交付具有更高燃油经济性和更低排放的汽车满足消费者的期望和政府的法规要求。高性能微控制器(MCU)在环保汽车设计领域扮演着重要角色,飞思卡尔半导体(NYSE:FSL)日前宣布推出强大的多核心汽车MCU系列中的第一款产品,帮助汽车设计者更加轻松地提高引擎效率并降低排放污染。 飞思卡尔新推出的多核心Qorivva 32位MPC5676R MCU在Power Architecture?技术的基础上构建,与上一代单核心MPC5566 MCU相比,性能提高了四倍、内存空间提高了一倍、并提供了更多功能。MPC5676R的多种优势允许全球汽车厂商在单一控制器中融合多种尖端技术,例如直喷、涡轮增压和有线系统全驱动。 飞思卡尔负责汽车MCU业务副总裁Ray Cornyn表示,“飞思卡尔充分了解帮助汽车厂商生产更加环保、燃油效率更高的汽车所需的关键技术及其重要性,长期以来我们一直与汽车行业合作,共同开发可以满足其最新一代设计需求的解决方案。在动力总成领域,我们的目标是生产最强大、最灵活的MCU,它可以同时管理最新引擎的所有复杂控制任务,为设计者提供了降低系统复杂性所需的工具和软件平台。” 90纳米双核心MPC5676R MCU配备了: ? 6 MB片上闪存 ?384 KB片上RAM ?三个高性能增强型时序处理器单元(eTPU)

飞思卡尔大赛资料总结

(论坛网友分享,在此分享给广大参加比赛的同学,预祝取得好成绩) 机械调整主销内倾3度主销后倾0到1度前轮外倾1度前轮前束6mm 3.1 前轮的调整 现代汽车在正常行驶过程中,为了使汽车直线行驶稳定,转向轻便,转向后能自动 回正,并减少轮胎和转向系零件的磨损等,在转向轮、转向节和前轴之间须形成一定的 相对安装位置,叫做车轮定位,其主要定位参数包括:主销后倾、主销内倾、车轮外倾 和前束。对于模型车的前轮四项定位参数均可调。 1)如图3-1 所示,主销后倾角是指主销装在前轴,上端略向后倾斜的角度。它使车 辆转弯时产生的离心力所形成的力矩方向与车轮偏转方向相反,迫使车轮偏转后自动恢 复到原来的中间位置上。因此,主销后倾角越大,车速越高,

前轮稳定性也愈好。但是 过大的主销后倾角会使转向沉重,容易造成赛车转弯迟滞。我们希望赛车能够转向灵活, 故把主销后倾角设定为1~5°。 图3-1 主销后倾纠正车轮偏转原理图 2)主销内倾角是主销轴线与地面垂直线在汽车横向断面内的夹角,它也有使车轮自 动回整的作用。主销内倾还会使主销轴线延长线与路面的交点到车轮中心平面的距离减 少,同时转向时路面作用在转向轮上的阻力矩也会减少,使得转向更轻便灵活。所以为 了使得赛车转向更加灵活,我们将主销内倾角控制在0 度左右。 方法(1)垫片(2)偏心凸轮(3)长孔(4)球头旋转(5)支柱旋转(7)楔形垫片(6)调整轴承座(8)偏心螺栓(7) 偏心衬套(10)偏置球头 3)如图3-2,前轮外倾角对赛车的转弯性能有直接影响,它的作用是提高前轮的转 向安全性和转向操纵的轻便性。前轮外倾角俗称“外八字”,如果车轮垂直地面一旦满载 就易产生变形,可能引起车轮上部向内倾侧,导致车轮联接件损坏。所以事先将前轮外

飞思卡尔 freescale Kinetis KL25系列资料大全及实例汇总

Freescale Kinetis KL25系列社区资料大全及实例汇总 介绍: Freescale 公司Kinetis KL25 MCU向L系列内增加了带集成低压稳压器的全速USB 2.0 OTG控制器,采用32位ARM Cortex-M0内核,拥有48MHz内核频率,工作电压为1.71V~3.6V,。KL25系列作为低功耗、低价格、高性能的微控制器,给工程师们提供了一个合适的入门级32位方案。 本文精选了Kinetis K25教程、例程、设计案例,以及基于Kinetis KL25的流行开发板,集结了国内外官方资料和资深工程师的经验,是学习Kinetis KL25 MCU的必备宝典。 Kinetis KL25 MCU 的功能框图 Kinetis KL25 MCU 教程篇

Kinetis KL25 MCU官方参考手册 Kinetis KL25 MCU 官方数据手册 飞思卡尔Kinetis系列产品开发资源链接总汇 包含Kinetis系列产品的参考手册、数据手册、编译环境、调试工具的相关资源链接。 KL25中文用户手册 官方Kinetis L系列三大特性演示视频(附中文说明文档) 你在设计中往往会忽略掉Kinetis L系列的重要的特性。如果你只是简单的把Kinetis L系列当做一般的Cortex-M0的单片机来使用的话,我们的设计人员估计要郁闷了。闲话少说,赶紧来看看你可能忽略的特性吧 Cortex-M0+, 到底“+”了什么(有视频,有中文文档) 飞思卡尔Kinetis L系列采用的内核是Cortex-M0+,而不是Cortex-M0。这个小小的加号到底增加了什么呢?小小视频讲的一清二楚。 根据KL系列芯片上的缩略标志识别具体型号 大家在使用kinetis芯片的时候,可能会发现一些比较小的芯片上并没有刻出芯片的具体型号,而是刻了一个缩略型号名称,那么如何根据这个缩略名称来识别具体的型号呢? 文中罗列了Kinetis L系列所有的缩略型号对应的芯片具体型号名称,方便大家识别。 KL25 TSI基本原理介绍 TSI(Touch Sensing Interface)模块是飞思卡尔为简化硬件设计人员开发而嵌入到Kinetis架构的电容触摸感应模块,本篇主要介绍TSI模块的基本原理。 KL25 ADC模块详细介绍 文中包含了ADC的模块框图以及对每个模块的详细介绍。 开发篇 FRDM-KL25 cdc win 7 DRIVER 下载 超核KL25固件库BetaV0.5 版 更新的主要内容: - 完善了几乎所有模块的注释,大家使用起来更方便

飞思卡尔的汽车仪表完整解决方案

飞思卡尔的汽车仪表完整解决方案(图) 作者:日期:2010-1-18 来源:本网 字符大小:【大】【中】【小】 涵盖入门级两轮摩托车仪表、高端仪表以及超高端虚拟仪 表 2010年1月初“飞思卡尔充电吧”技术座谈会上展 示并探讨了汽车仪表完整解决方案。论坛吸引了众多工程 师、专家学者和从业人员就仪表类型、功能及适用范围展 开了积极讨论。飞思卡尔半导体全球汽车微控制器产品市 场工程师张曦先生,从目前主流汽车仪表市场的划分和技 术热点入手,与网友一起分享了作为全球最大的汽车电子 半导体供货商,飞思卡尔独特技术及先进理念。此次座谈会讨论对象涵盖了各种不同档次的汽车仪表,包括入门级两轮摩托车用仪表、六表头配合高分辨率彩色显示屏的高端仪表以及超高端针对高动态内容显示的高性能显示屏虚拟仪表。 入门级汽车应用是汽车产业发展最为迅速的一个细分市场之一。飞思卡尔入门级双表头黑白段码显示仪表是飞思卡尔为各种汽车仪表和工业控制所提供的经济高效的液晶显示器(LCD)控制解决方案,即8 位微控制器(MCU)系列中的MC9S08LG32 MCU。S08LG 系列为电表应用、HVAC 控制、数字恒温器、家用电器和健身器材提供经济高效的嵌入式控制和用户界面解决方案。此外,S08LG 器件还是各种车身控制应用的理想选择,如用于新兴市场入门级车辆的组合仪表等。 该解决方案的优势主要有两点。首先,提供了各种闪存规模的S08LG器件采用5V电源,灵活的LCD模块电源管理配置有助于降低总功耗;其次,汽车级的8 位 MCU能够提供优良的电磁干扰(EMI)和电磁兼容(EMC)性能。 S08LG系列是飞思卡尔日益壮大的汽车仪表MCU产品系列阵容的成员,具有片上 LCD 驱动。S08LG MCU 系列的技术特性包括: * 速率高达 40 MHz 的HCS08 CPU 内核 * EEPROM 仿真的高达 32 KB 的片上双库闪存 * 高达2 KB的片上RAM * 集成的LCD 驱动,最搞可配置为8 x 37 或 4 x 41 个分段 * 所有 LCD 引脚均用通用输入/输出(GPIO)复用 * 其他产品规范和技术数据请参阅飞思卡尔相关网页https://www.360docs.net/doc/f1731005.html,/files/pr/lcd.html 同时专为入门级汽车的电子仪表板而设计的还有16位S12HY微控制器系列。该系列带有集成LCD和步进电机驱动,作为飞思卡尔阵容不断扩大的16位MCU系列的最新成员,集经济实用的16位性能和最佳片上功能于一身,非常适用于新兴汽车市场中成本敏感型仪表板应用。

飞思卡尔ISO26262 ASIL-D电子助力转向演示系统设计

飞思卡尔ISO26262 ASIL-D 电子助力转向演示系统设计 1. 概述汽车电子助力转向系统(EPS)可以降低能耗,提高驾控智能水平,且更容易与其它高级安全系统集成,因而近年来在汽车中得到了大力的推 广和发展。在这个领域,国内EPS 供应商与国外供应商的主要差距体现在EPS 控制技术和系统安全设计两方面。飞思卡尔半导体公司在2011 年推出了“采用永磁同步电机的汽车电子助力转向电控单元解决方案”,旨在帮助国内EPS 供应商掌握永磁同步电机的控制技术。这一方案获得了《世界电子元器件》期 刊“2012年全国优秀IC 和电子产品解决方案”最佳方案奖。在2012 年的飞思卡尔中国技术论坛上,飞思卡尔又推出了针对道路车辆-功能安全国际标准 ISO26262 ASIL-D 等级的EPS 演示系统方案。该方案不仅演示了采用飞思卡尔功能安全品牌SafeAssure 的软硬件产品,如何方便快捷地实现ASIL-D 级别的EPS 系统,同时也提供了整个开发阶段所涉及的安全设计文档,包括:·项目定义·危险分析和风险评估·功能安全概念·系统开发·安全确认。本文 将根据图1 所示的ISO26262 安全生命周期模型来阐述飞思卡尔如何根据 ISO26262 规范来开发ASIL-D 等级的EPS 演示系统。图1:ISO26262 安全生命周期模型 2. 功能安全概念设计在概念阶段设计项目(或产品)定义、危险分析和风险评估和功能安全概念。 2.1 项目定义项目定义描述了EPS 系统的主要功能,如下所述:·根据司机意图,提供转向支持·主动回正·向车内其它系统提 供转向角度(通过CAN 网络) 2.2 危险分析和风险评估危险分析和风险评估需要考虑的要素有:安全功能、失效模式、驾驶场景、严重性、暴露的可能性、可控性以及安全目标、ASIL 等级、安全时间和安全状态。根据分析,EPS 系统有如下危险分析和风险评估结果:·安全目标1:防止电机产生自主扭矩

飞思卡尔智能车简介

智能车制作 F R E E S C A L E 学院:信息工程学院 班级:电气工程及其自动化132 学号:6101113078 姓名:李瑞欣 目录: 1. 整体概述 2.单片机介绍 3.C语言 4.智能车队的三个组 5.我对这门课的建议

一、整体概述 智能车的制作过程包括理论设计、实际制作、整车调试、现场比赛等环节,要求学生组成团队,协同工作。内容涵盖自动控制、模式识别、传感技术、电子、电气、计算机、机械与汽车等多学科多专业。 下面是一个智能车的模块分布: 总的来说智能车有六大模块:信号输入模块、控制输出模块、数据处理模块、信息显示模块、信息发送模块、异常处理模块。 1、信号输入模块: 智能车通过传感器获知赛道上的路况信息(直道,弯道,山坡,障碍物等),同时也通过传感器获取智能车自身的信息(车速,电磁电量等)。这些数据构成了智能车软件系统(大脑)的信息来源,软件系统依靠这些数据,改变智能车的运行状态,保证其在最短的时间内按照规定跑完整个赛道。 2、控制输出模块: 智能车在赛道上依靠转向机构(舵机)和动力机构(电机)来控制运行状态,这也是智能车最主要的模块,这个模块的好坏直接决定了你的比赛成绩。 电机和舵机都是通过PWM控制的,因此我们的软件系统需要根据已有的信息进行分析计算得到一个合适的输出数据(占空比)来控制电机和舵机。 3数据处理模块: 主要是对电感、编码器、干簧管的数据处理。信号输入模块得到的数据非常原始,有杂波。基本上是不能直接用来计算的。因此需要有信号处理模块对采集的数据进行处理,得到可用的数据。 4信息显示模块: 智能车调试过程中,用显示器来显示智能车的部分信息,判断智能车是否正常运行。正式比赛过程中可关闭。主流的显示器有:Nokia 5110 ,OLED模块等,需要进行驱动移植。

MC9S08AC16数据手册(中文)

MC9S08AC16 参考手册 苏州大学飞思卡尔嵌入式系统研发中心翻译 https://www.360docs.net/doc/f1731005.html, 2009年11月

MC9S08AC16系列特点 MC9S08AC16系列特点 z消费&工业 MC9S08AC16 MC9S08AC8 z汽车 MC9S08AW16A MC9S08AW8A 8位HCS08中央处理单元(CPU) z40-MHz HCS08CPU(中央处理单元) z20-MHz内部总线频率 z HC08指令集,增加了BGND指令 z背景调试系统 z在线调试(in-circuit debugging)期间可以设置单个断点(在片上调试模式时可以在增加两个断点) z调试模式包括2个比较仪和9个触发器模式。8个FIFO来存储流控制地址和事件数据。调试模式支持标签和强制断点 z支持高达32个中断/复位源 存储器选项 z高达16KB的片上在线可编程FLASH存储器,有块保护和安全选项 z高达1KB的片上RAM 时钟源选项 z时钟源选项包括晶体,蜂鸣器,外部时钟,或能够NVM调整的精确的内部集成时钟 系统保护 z可选的系统正常操作(COP)复位,使用独立的内部时钟源或总线时钟运行 z低压检测复位或中断 z非法操作符检测复位 z非法地址检测复位 省电模式 z增加了两种停止模式 外部设备 z ADC-8通道,10位AD转换器,包含自动比较功能 z SCI-两个串行通信接口模块,可选的13位停止符 z SPI-串行外设接口模块 z IIC-内部集成电路总线模块,可以工作在100kps的最大总线负载上,减少负载将会允许更高

的波特率 z定时器-3个16位定时器/脉宽调制(TPM)模块-2个2通道和1个4通道;每个定时器在每个通道上都有可选的输入捕捉,输出比较,PWM。每个定时器在每个通道上都可以配置为带缓冲,中心PWM(CPWM) z KBI-7引脚键盘中断模块 输入/输出 z高达38个通用输入/输出(I/O)引脚 z输入时,每个端口都有软件选择的上拉电阻 z输出时,每个端口都有软件选择的转换速率控制 z输出时,每个端口都有软件选择的驱动强度 z主机复位引脚和上电复位(POR) z RESET,IRQ,BKGD/MS引脚在内部上拉以减小系统消耗 封装选择 z48引脚QFN z44引脚LQFP z32引脚LQFP

飞思卡尔9S12G系列单片机中文简介

飞思卡尔9S12系列单片机中文简介 1.1介绍 MC9S12G系列是一个专注于低功耗、高性能、低引脚数量的高效汽车级16位微控制器产品。这个系列是桥连8位高端微机和16位高性能微机,像MC9S12XS系列。MC9S12G系列是为了满足通用汽车CAN或LIN/J2602通信应用。这些应用的典型例子包括body controllers, occupant detection, doormodules, seat controllers, RKE receivers, smart actuators, lighting modules, and smart junction boxes. MC9S12G系列使用了许多MC9S12XS系列和MC9S12P系列里面的相同特性,包括在闪存(flash memory)上的纠错指令(ECC),一个快速A/D转换器(ADC)和一个为了改善电磁兼容性(EMC)性能的频率调制相位锁存循环(IPLL). MC9S12G系列是高效的对较低的程序存储器至16K。为了简化顾客使用它,特制了一个4字节可擦除扇区的EEPROM。 MC9S12G系列传送所有16位单片机的优势和效率,定位于低成本,低功耗,EMC,现行代码尺寸效率优势被现存8位和16位单片机系列的使用者所分享。像MC9S12XS系列,MC9S12G 系列运行16位位宽的访问对所有的周期和存储器状态都不用等待。 MC9S12G系列可得到的封装有100-pin LQFP, 64-pin LQFP, 48-pinLQFP/QFN, 32-pin LQFP and 20-pin TSSOP,特别是对较少引脚的封装发挥出最大的功能。此外,在每个模块中可得到的I/O口,进一步的可用于中断的I/O口允许从停止或等待模式中唤醒。 1.2特点 这部分说明了MC9S12G系列的关键特性。 1.2.1MC9S12G系列比较 表1-1提供了MC9S12G系列不同型号特点的概要。这个微机系统提供了一个明确的功能范围信息。 表1-1 MC9S12G系列概述

飞思卡尔MC9S12C中文介绍以及简单编程编程

Freescale Semiconductor Confidential and Proprietary Information. Freescale? and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. ? Freescale Semiconductor, Inc. 2005. TM Freescale MC9S12C64 介绍及编程练习 Terry Tian R63492@https://www.360docs.net/doc/f1731005.html, 2005.12TM Freescale Semiconductor Confidential and Proprietary Information. Freescale? and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. ? Freescale Semiconductor, Inc. 2005. Slide 1 8/16/32-位内核定位 性 能PowerPC Hawk MCU 56F8300 功能 MAC7x00 (ARM 7) S12X HCS12 S08 HC08 发动机管理 信息娱乐 底盘/电机控制 中/高级车身控制 安全/ 仪表/ 音响 HV AC(空调)/ ISU CAN & LIN 主节点 低端CAN LIN 从节点TM Freescale Semiconductor Confidential and Proprietary Information. Freescale? and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. ? Freescale Semiconductor, Inc. 2005. Slide 2 MC3S12R64 ROM 1xCAN (No EE) MC9S12B256 1x msCAN 128K 32K 256K

飞思卡尔智能车及电子设计大赛简介

飞思卡尔智能车 各位同学你们好,下面由我来给大家介绍一些我参加飞思卡尔智能车大赛以及电子设计大赛的心得,和一些入门知识,时间仓促,文笔有限,有不合理的地方望大家见谅。 一.几个基本要求:(依据第一届的选人方式) 1.做事情认真、积极、负责,且有毅力。 2.有团队精神。 3.专业知识越强当然也会越有利,但自学能力也非常非常重要。 注释: 因为大家基本都是头一次做这个项目,功底都差不多,按上一届选人的标准来看,那些老师可能会比较看重学生的这些特质。(当然事先有准备相关的知识以及自身的专业能力也是必须的啦)。 解释一下为什么要上述那几点: 1.做事情认真、积极、负责,且有毅力。认真是必须的,那个单片机很容易烧毁,并且还挺贵的,上一次由于没经验就烧了挺多个。积极跟负责,做这个比赛,就要多花点时间在上面,三天两头都见不到你的人,队友很容易会有意见,很快对你就会排斥,还有该是你负责的部分你就要努力去搞定,而不是一副事不关己的样子。毅力,这是必须的,在时间紧张的时候免不了要在生化楼通宵熬夜的,没点毅力,两三天你就夸了。 2.有团队精神。这点很重要,能不能和队友默契的合作往往能左右这个队伍的成绩,合作在于沟通,能心平气和地与别人沟通的会比较受青睐。有意见大家好好说,别太冲动跟倔强。 3.专业知识越强当然也会越有利,但自学能力也非常非常重要。因为我们专业的人过去主要是负责硬件部分,所以电路设计,焊电路板是必不可少的,没有电专业知识是不成的,自学能力是非常重要的,因为那边基本没老师给你培训,上一届的同学也不可能手把手教你怎么弄,所以大部分还是靠自己的自学能力啦。懂得从各届智能车比赛的优秀技术报告学习,从网上查找芯片资料。 二.相关硬件知识简介: 系统硬件结构主要由HCS12(单片机)控制核心、电源管理单元、传感器、车速检测模块、转向伺服电机控制电路和直流驱动电机控制电路组成,其系统硬件结构如图1 所示

飞思卡尔智能车入门指南

飞思卡尔智能车入门指南 概述 智能车巡线是一个半实时随动系统。系统不断传感前方赛道的信息,根据赛道偏转情况计算前轮转向角度,再配合后轮的动力,达到巡线的目的。如下图: 该系统主要涉及知识领域有:单片机、传感器、电机、舵机、电路等,附带着涉及到一些调试手段知识。以下就从这几方面简要介绍。 速度控制 给电机加一个恒定的电压,电机最终会以某个恒定速度转动。适当增加电压,电机速度会加快,最终稳定在一个更快的速度。故调节电机所加电压即可调节电机转速。由于单片机是数字电路,只能控制电压为“有”或“无”,于是我们让电压在“有”和“无”之间反复跳动,那么电压的有效值在电池电压到0之间可连续变化。实际加载在电机上的电压是一个方波,方波的高电平时间长度比方波周期为占空比,占空比越高电压的有效值越高。100%占空比相当于电池直接接在电机上,0%占空比相当于断路,0~100%相当于降压。 单片机普通输出口只能提供小电流的信号电,无法给电机提供功率,故使用MOS管。用单片机的信号控制MOS管的通断,起到开关的作用。开关串联在电池与电机之间,即可给电机提供功率。 单片机方波信号的频率一般在K的数量级(1000Hz)。假设现在给电机50%占空比的方波,信号频率为1K,电机以某个恒定速度转动。适当改变信号周期会发现电机转速略有变化。信号频率很小(例如几十赫兹)或者很大(例如几兆赫兹)时,电机转速会较慢,在某个适中的值时速度达到最大值。此时电机能量转化效率最高。此时固定信号频率不变,改变信号占空比,电机转速和占空比基本成正比。 若以恒定占空比驱动电机,在负载发生变化时,电机速度也会发生变化。若希望电机负载变化而电机仍能匀速转动,应采用闭环控制。给电机安装速度传感器(例如:光电编码器),每隔固定的时间检测光电编码器旋转的圈数(例如:每10ms检测一次光电编码器在过去的10ms内旋转了多少圈),该圈数即可换算成速度。当发现实际转速比目标转速慢时,适当增

Freescale CAN模块用户手册

CAN模块用户手册 1.引言 FlexCAN (FC)模块实现控制器局域网络协议(CAN)通信。CAN是一种用于汽车和工业控制系统异步通讯协议,是高速(1Mbit/sec)、短时间间隔、基于优先级的协议,能够使用多种通讯媒介(例如:光缆,非屏蔽线对等)。FlexCAN 模块同时支持CAN协议规范2.0版、B部分所规定的标准帧和扩展帧。 CAN协议主要——但不是仅仅地用于车辆串行总线,面对这样的特殊要求现场:实时处理、车辆电磁干扰环境的可靠操作、成本效率和需要的带宽等。本文档理论上采用CAN 协议2.0版的一般应用知识。更详细的参见CAN协议规范2.0版。 2.功能说明 ?基于并包含所有现有的TouCAN 模块功能。 ?IP接口结构。 ?完全实现CAN协议规范2.0 —标准数据和远程帧(直到109位长度) —扩展数据和远程帧(直到127位长度) —0—8字节数据长度。 —可编程位速率直到1Mbit/sec。 ?多达16个0—8字节长度的弹性信息缓存器,各自可以配臵为接收或传输,所有的都支持标准帧和扩展帧。 ?允许单侦听模式。 ?内容相关的寻址。 ?无读/写信号。 ?三个可编程过滤寄存器: —全局过滤(用于MBs 0-13) —MB14专用 —MB15专用 ?独立于传输介质(假设使用外部收发器)。 ?开放的网络架构。 ?多主总线。 ?高度抗电磁干扰。 ?高优先级信息短延迟时间。 ?低功耗睡眠模式,可编程 总线活动唤醒。 3.结构图 图1:

4.典型的CAN系统图 图2 每个CAN站点物理上通过一个收发器连接到CAN总线,收发器提供CAN总线上通讯所需的传输驱动、波形,以及接受/比较等功能,还提供保护以预防不良的总线或站点对FlexCAN模块造成损坏。 5.信息缓存 5.1信息缓存器结构。 图3 说明扩展(29-bit) ID信息缓存器结构;图4说明标准(11-bit) ID 信息缓存器结构。 图3 图4

飞思卡尔学习笔记

一般用于将C++代码以标准C形式输出(即以C的形式被调用),这是因为C++虽然常被认为是C的超集,但是C++的编译器还是与C的编译器不同的。C中调用C++中的代码这样定义会是安全的。 一般的考虑跨平台使用方法如下: #ifdef ined(__cplusplus)||defined(c_plusplus) //跨平台定义方法 extern "C"{ #endif //... 正常的声明段 #ifdef ined(__cplusplus)||defined(c_plusplus) } #endif 简单的用在windows下可以如下定义: #ifdef__cplusplus extern "C"{ //... 正常的声明段 } #endif #pragma 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 一般格式 其格式一般为: #pragma Para。其中Para 为参数,下面来看一些常用的参数message 参数 Message 参数能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #pragma message(“消息文本”)

当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法 #ifdef _X86 #pragma message("_X86 macro activated!") #endif 当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_X86 macro activated! ”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。 code_seg 另一个使用得比较多的pragma参数是code_seg。格式如: #pragma code_seg( ["section-name"[,"section-class"] ] ) 它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它 #pragma once (比较常用) 只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。 #pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。 #ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式 #pragma hdrstop #pragma hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。 有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。你可以用#pragma startup指定编译优先级,如果使用了#pragma package(smart_init) ,BCB就会根据优先级的大小先后编译。

相关文档
最新文档