最近这几天都在调试LM3S8962在uc\os-II系统下的程序,不是很顺利,给串口发数据的时候经常出现系统死掉的现象,而且是随机的,有时发一次数据就死,有时发好几次才死。每次都是死在默认的中断服务程序中,死循环,也不知道是哪个中断引起的。后来我就模仿STM32的中断程序那种格式,给每个中断都写一个单独的中断服务程序,但函数是空的,进入中断后什么都不干。结果这样做了以后,系统就不死了,不会进入不该有的死循环。
我是把数据发给串口然后回传回来,但我发现回传回来的数据字节数跟发过去的不一样,而且是随机的,很纳闷,跟踪计数数据长度的那个变量,发现每次计数的数值跟实际发送数据的长度不对,想了半天觉得可能是因为变量没有赋初始值,赋初始值以后果然一切都正常了,回传的数据和发送的一致,在一定范围内多长的数据都没关系。
不同的编译器对变量初始值有不同的处理,我记得AVR GCC里面变量默认的初始值就是0,我也一直这么用的,看来处理这些数据还是要小心一点。 |