1、什么时候用inline,什么时候不用。
一般情况下,inline函数会增大代码size,会增加代码执行效率(减少了函数跳转的开销)。如果你的运行环境内存空间很充裕,那就inline呗。但对于大部分嵌入式开发的情况,内存都很有限的,能减少一些size,还是减少的好。都是成本呐。
但在一些情况下,一定要用inline或者宏定义,因为代码size基本上也不会增加很多。比如:
void reg32_write(uint32 addr, uint32 val)
{
80201e90: d5033fbf dmb sy
80201e94: 2a0003e0 mov w0, w0
80201e98: b9000001 str w1, [x0]
80201e9c: d65f03c0 ret
}
这样的汇编后,小于等于4行的,不要再做一个函数了,因为函数跳转也需要4行汇编。有些情况,编译器优化后,会更少一些。
SETREG32(reg_addr_base + MicroContMuxSel,0x0); // MicroContMuxSel
80202394: b9424aa0 ldr w0, [x21,#584]
80202398: 52800001 mov w1, #0x0 // #0
8020239c: 114d0000 add w0, w0, #0x340, lsl #12
802023a0: 97fffebc bl 80201e90 <reg32_write>
具体看自己的代码了,建议自己做一下inline和非inline的比较,size差别不大,就用inline吧。