芯源 CW32 系列在低功耗和通用控制场景使用较广,C 语言编程中有几个容易踩到的点:
1. 低功耗模式下要保证变量不被优化掉:进入睡眠前写入的唤醒标志建议用 volatile 修饰,否则编译器可能认为该变量后续无用而删掉写操作。
2. 开优化后延时循环可能被直接优化为空,做精确短延时要使用带 volatile 的计数变量或者调用库函数。
3. 弱符号(weak)常用于中断服务函数的默认实现,用户重定义时函数名和参数要完全一致,否则会链接到默认空实现,中断静默丢失。
4. 使用位带访问外设时,要按字地址映射计算别名地址,算错会写到相邻寄存器上。
5. 用结构体指针访问寄存器组时定义为 volatile 指针,避免编译器把多次读合并成一次。
以上,供参考。 |