#pragma
inline = forced: 强制编译器对紧随其后的函数进行inline处理
// tft.c中定义内联函数
#pragma inline = forced //强制inline
void TFT_Write_Colour(const RGB_COLOUR *rgb)
{
//...code....
}
// tft.h中声明函数
void TFT_Write_Colour(const RGB_COLOUR *rgb);
// main.c中调用函数
// 编译报错:main中引用了未定义的外部函数TFT_Write_Colour。
// tft.h中“定义函数”
#pragma inline = forced //在IAR EW430中,这里必须用强制inline;用inline可能导致编译器忽略内联,而定义成普通函数而出错。
void TFT_Write_Colour(const RGB_COLOUR *rgb)
{
//...code....
}
// main.c中包含tft.h,并调用函数
// 结果:编译正确
不过在IAR IDE下使用inline 定义的函数很多时候不会如程序设计者所愿的内联到代码中,会仍旧以函数调用的形式存在。inline关键词本身就是推荐编译器进行内联,不过编译器不接受推荐,那么自然就没用了。IAR IDE在采用默认设置时是不接受inline建议的,想让其按照程序设计者的意愿内联函数的话,需要在优化选项中进行设置。
设置选项在:Options->C/C++ Compiler->Optimizations。
只有把优化等级开到High才能在右边的Enable复选框中选择Function inlining。选择这两个之后inline定义的函数就可以正常的在汇编代码中结合在一起,不过因为是开了优化,有些并没有inline定义的函数也会被内联。不过编译器的智能程度还是比较喜人的,目前没发现什么特别差的优化结果。