【国产mcu填坑篇】------芯联发(中微)

 开发中遇到的莫名其妙的问题,以记录

  • 需要读的IO第一次读异常,要第二次才可以,在需要进睡眠的时候注意
  • 单片机计时标记最好使用加,不要用减,否则可能会减不到0
  • 仿真时加volatile可以看变量,否则未调用会被优化,这个大多编译器都会有
  • 自带的触摸生成器,有时会把按键自动置1,但重新生成一次就又好了,代码看上去相同,暂时不清楚原因
  • c语言编译器大括号不要省,否则断点可能打不进去
  • 复位并不能保证真正复位,要重新下载才能真正复位
  • 监视并不准确,和运行的判断有冲突,只能参考
  • 少用switch,换成if else if else 
  • bit变量不能初始化,要求初始值的要进主函数重新初始化,定义时为0不报错,但并未初始化为0,如果为0,那只是说明初始值是0,为1直接报错
  • 睡眠前关GIE并不会按规格书说的不进中断,还是会
  • 所有变量,建议仿真看看进死循环前的值是否和自己的期望一样,不是的话就在前面初始化,定义初始化有时有问题
  • adc在刚上电或者刚唤醒时读不准,这个是我搞错了,是电阻取太大了,睡眠前又设为了输出。
  • datasheet 中eeprom寄存器名称有错误,c的头文件中又没有eeprom的完整寄存器定义????简直了!!8f2850的情况,其他没看。经咨询专业人士后得知该型号不支持,纳闷,不支持往规格书里写啥啊。。。
  • 编译器宏定义相关很多提示数据类型转换警告,后面加 |0 可以让碍眼的警告消失
  • 规格书电气说明不全是一大坑,不清楚低功耗最低能做到什么情况
  • 烧录器奇葩,otp和mtp有好多种,版本又很多,还不支持固件升级,自家和别家的脚位不兼容就算了,他自己同一个系列的也大多不兼容,脚位排列随心所欲,奇葩中的战斗机
  • 不同系列管脚命名规则不一样,内核稍有差异,比如t0有的有单独使能,有的没有,管脚有的是叫RBX,有的叫PBX
  • 有些型号要使能t0中断的话要把预分频器分配给T0,分配给看门狗进不了中断,1152a的情况,1151a可以,奇怪的问题总是很多
  • 触摸仿真失灵时在触摸电容口接一个103电容,即可正常,不接的话程序可能还会乱跑
  • asm()指令里面什么都不会报错
  • 触摸库说明不是很清楚,keysever函数不知道干什么的,默认生成的不能用来唤醒,把这个东西删掉就基本能用了,看了半天实在搞不懂为什么要操作非触摸口的io口,位异或操作不知道在干什么,B_OnOff这个标志位按下两次才能清零,导致按两次才有一次进睡眠,另一次还要等B_OnOff这个标志位反过来,看上去像个没写完的半成品。。不过把这个函数删掉就容易想办法了,把keysever函数开头的B_OnOff用KeyFlag的按键值替换比较好,不要拘束于他生成的代码,要能用还是要做改动
  • 函数内静态变量初始化有时无效
  • 函数带参数和返回值,容易莫名跑飞

你可能感兴趣的:(单片机,单片机,c语言)