« 上一篇下一篇 »

int类型在不同平台上的大小

8位51单片机:int类型为2字节,即16位,其取值范围为:-32768~32767。

32位ARM处理器:int类型为4字节,即32位,其取值范围远远大于51单片机上的int类型。若要兼容8051的int类型,则在ARM平台上应使用short int类型,而不是原来的int类型。

由于这个原因,故而在将程序从8位机移植到32位机的时候,要非常注意数据类型的选择,不能照搬,否则结果会不一样。当然,为了尽量方便移植,则代码编写一定要规范!要考虑到跨平台移植的可能。


关于keil中断点所在的代码执行与否的问题:

答案是:断点所在行不执行,验证可以用给一个变量赋不同的值,然后设置断点来查看变量值有无改变来进行验证!


很久没有静下心来写总结了,事实证明,如果不总结,不反思,不牢记,那么你就会在同一种问题上多次跌倒。

今天因为A7105无法进行通信,而调试了一整天,可是晚上却用示波器看时,却发现原来时钟线根本没有信号输出,仔细看了下代码,原来时钟线所在的引脚根本没有初始化,没有进行输出状态设置,fuck,就因为这个原因,乱七八糟调试了这么久,亲,你分析代码时严谨一点好不,细心一点好不。

以后给我记住,一定要记得先初始化IO,然后出问题了先看IO是否对应,是否配置好了,包括方向、功能、哪个IO等都要仔细核对。

再一个,数据通信之类的工作,如果有问题,不要老是用眼睛看代码,你眼睛能看出什么?先用示波器看了再说,这样即使你粗心大意,没有初始化IO,示波器一看就看出来了,哪里需要搞得那么麻烦,多用用示波器,如果不用,那还要示波器这种东西干什么呢?


记住:同一条代码,在不同时刻下执行,它的运行时间是不完全一样的,比如我写的7105代码中的

SCH_H;
SCH_L;

这两条代码,在示波器上看到的是,有几次执行,高电平的时长为70几ns,但有几次却接近500ns,中间差了好几倍,所以,千万不要天真的以为,同样的代码每次执行的时间都相同,事实上,基本上是不可能相同的。


有关电脑在使用USB转串口时蓝屏的避免:

    1、不要同时使用两个USB转串口来传输数据,这样几乎必定会蓝屏。

    2、串口通信的速率不要太快,太快容易导致蓝屏。

    3、如果串口上接不到数据,先换个USB转串口模块试试,如果还是不行,就基本上单片机的问题了,用示波器看下单片机的UART的两个引脚有无信号。


调试相关:

    1、不要再用Keil MDK的Debug来测量时间或是什么的了,既费时又没什么卵用,除了偶尔用来看看变量值的变化,其他场合就不要再用这东西了。