|
老整这些没有,这些需要用STM8S的早就自己download到了,希望斑竹对自己或客户遇到的问题,能整理下发出来,尤其是cosmic与其它编译器不同之处,在应用中尤其需要注意的东西,比如说,printf函数,入口参数必须是u16,如果传入的是u8,则打印出错,必须强制转换,还有u32类型的使用必须谨慎,我就遇到个奇怪的问题,整了我一下午,
#define HISSECTORLENGTH ((u32)0x1000)
BaseAddr->ToAddr += (u32)64;
if ((BaseAddr->ToAddr % HISSECTORLENGTH) == 0) {//这样有问题
IO_Erase_Sector(BaseAddr->ToAddr);
}
原意是每到4K擦除这个扇区,ToAddr的类型是u32,如果像上面这样写,逻辑上是对的,但实际运行就不正确,当ToAddr=0x20040、80、c0等,基本上都会进入Erase,就是说条件成立
必须这样写,才能达到你想要的结果
if ((u16)((BaseAddr->ToAddr % HISSECTORLENGTH)) == 0) {//加上强制转换
IO_Erase_Sector(BaseAddr->ToAddr);
} |
|