msp430 问题及解决记录
-----------------------------
2015.4.28
问题:开发板串口显示的内容为乱码
解决:使用的是原先产品主板的15200的波特率设置,但看来或者是开发板不支持115200或者是设置不正确。
错误的波特率设置:
UCA3BR0 = 9; // 1MHz 115200 (see User's Guide)
UCA3BR1 = 0;
正确的波特率设置:
UCA3BR0 = 0x03 ; // 32kHz/9600=3.41
UCA3BR1 = 0x00
-----------------------------
2015.4.29
问题:程序跑飞
解决:越界访问局部变量导致的。
详情:
函数中声明了一个局部变量: char cpTempSensorValue[20];
然后使用sprintf语句给格式化cpTempSensorValue,但是操作的字符串的长度大于20,而程序中又没有进行越界检查,因此导致跑飞。
-----------------------------
2015.5.8
问题:8025 IIC 调试不通
描述:使用硬件IIC而不是IO模拟来实现,但并没有采用IIC中断。卡在以下程序(直接从 return 1 返回了):
// 等待UCTXIFG=1与UCTXSTT=0 同时变化等待一个标志位即可
while(!(UCB2IFG& UCTXIFG))
{
if( UCB2IFG& UCNACKIFG ) // 若无应答 UCNACKIFG=1
{
return 1;
}
}
解决:最后发现是从机地址的问题,从8025芯片手册上看到的地址为 0x64,但是MSP430在实际使用需要往地址寄存器中放入7位地址(即不包含读写位),因此需要使用右移1位的地址,即:0x64>>1
-----------------------------
2015.5.8
问题:8025 IIC 设置控制寄存器问题
描述:IIC 虽然调试通了,但是程序初始化时需要把8025的控制寄存器设置为24小时模式,因此需要写往0x0E寄存器中写入0x20;但是,每次写入完后发现rtc读出的秒都被重置为某个值。
解决:参考了其他程序,给IIC的UCB2TXBUF寄存器写入的控制寄存器地址应该左移4位。即:0x0E<<4
备注:虽然问题解决了,但依然没有搞清楚。
-----------------------------
2015.5.18
问题:fabs错误
描述:fabs的结果不正确,经检查发现编译时有fabs的警告,
解决:增加“#include <math.h>”
备注:估计还有其他地方也实现了fabs。
-----------------------------
2015.5.25
问题:debug时跳转不到main函数,发现一直在 data16_memzero函数中死循环。
解决:参考了网友的解决办法,详情如下:
一直在_data16_memzero里死循环可能是因为程序最开始初始化变量的时候有大数组需要初始化。导致看门狗不断复位。这个初始化的过程是在进入main之前,有2种方式你可以尝试:
1.对你的数组用 __no init_定义,上电编译器不产生特殊的附加函数去初始化RAM
2. B修改IAR中Cstartup.S43文件中__program_start子程序,增加一个关闭WDT的操作或者设置WDT时间长度超过32MS
C在Project--Options--Linker--Config中选择 Override default programe,并将Entry lib设置成__program_start
事实也确实如此,Cstartup.S43是MSP430的启动文件,里面默认是打开看门狗的,添加个宏定义把看门狗关闭就解决了问题。
具体操作如下:
在安装文件:C:\……\src\lib\430 中找到启动文件:cstartup.s43
拷一个cstartup.s43,然后将其只读属性去掉。用记事本等打开cstartup.s43文件,看到文件内有如下语句:
#ifdef DISABLE_WATCHDOG
MOV #WDTPW + WDTHOLD, &WDTCTL
#endif
说明文件内已经有关闭看门狗的条件编译语句,只要我们定义条件,这样启动代码中的该语句就生效了,我们在文件头添加一句:
#define DISABLE_WATCHDOG
保存,然后再工程中将cstartup.s43文件添加到我们的工程当中。
在Project->Options->Linker->Config页中选择Override default programe ,并将Entry symb 设置成__program_start。
把debugger->setup->Run to main销掉,这样我们就能够从启动代码开始一句一句的看了。
cstartup.s43在iar310a的路径如下$TOOLKIT_DIR$\src\LIB\
-----------------------------
2015.5.27
问题:变量类型转换的不正确使用
1、 ff = (float)g_iPicDataLength/(float)(CAMERA_PACKAGE_SIZE-6);
2、 ff = g_iPicDataLength/(CAMERA_PACKAGE_SIZE-6);
类型说明:ff为float; g_iPicDataLength CAMERA_PACKAGE_SIZE为int
例如对于 17116÷506 正确的结果应该是33.8
如果采用1可以得到正确的结果,如果采用2则得到33.0
而我正好使用到了ceil函数:
int i = ceil(ff);
这样用时,1和2两种不同的方法计算的结果不同,1的结果为34,而2的结果为33
-----------------------------
2015.6.25
问题:收串口相机的图像数据时会稳定地丢数据
描述:串口相机的默认数据包长度为512,使用这个长度时没有任何问题。但是为了一次能传送更多的数据,我希望能增加数据包的长度,我修改为1024,但是发现无论如何会固定地丢失3个字节的数据(丢第510,511,512三个字节,注意计数从1开始)。
解决:各种尝试后找到问题。时钟中断触发的很频繁,并且430默认的不允许中断嵌套,这样会导致系统处理时钟中断的时候丢失掉串口收数据的中断。解决方法是在时钟中断中开中断。
-----------------------------
2015.6.26
问题:同样的程序在一个串口相机可以采集到数据,而在另外一个串口相机采集不到
解决:经分析后发现,这两个串口相机还是有略微的不同,软件版本应该有所差别。用串口助手对串口相机与其自带测试软件的通讯过程进行了监测之后,发现了问题。正常的串口相机在重新加电后,只要发送一两次同步命令就可以同步上,但是不正常的串口相机在重新加电后却要发送10多次同步指令才可以同步上。针对这个研究结果,做了针对性的处理:发送一次同步命令之后,过一定时间间隔[称为间隔1]如果收到了相机的回应就不再发同步指令,而是执行后续操作,而如果过一定时间间隔没有收到了相机的回应就重新发送一次同步指令,这样重复多次。
但是发现还有问题,经研究发现,问题出在:程序中有这样的处理(在串口发送数据的过程中,如果间隔[称为间隔2]一定时间没有发送数据了,就认为之前的数据是完整的一包数据,可以对其进行处理了),但是重复发送同步命令的间隔1小于间隔2,因此在重复发送同步命令时,同步回应还在路上呢,所以系统总是判断没有收到正确的同步回应。把间隔2调整使其小于间隔1后该问题解决。
处理之后,发现还有问题:即拍照命令总是失败。调试后发现,是因为调整了间隔2之后,拍照的回应只收到了6个字节后就处理了,而系统的处理是发现这6个字节不是想要的12个字节,因此就抛弃了这6个字节,所以虽然马上又过来了6个字节,但是系统也仍然认为是错误的拍照响应。处理的方法为:当响应数据不够12个字节时先缓存该收到的内容,等收到的内容大于等于12个字节后再处理。
之后再测试,在两个串口相机上,所有问题解决。
-----------------------------
2015.6.30
问题:从上位串口执行获取系统参数命令,但得到的结果中SensorEnable的值为(Null Pointer)
解决:设备使用了sprintf来格式化输出字符串,SensorEnable是字符串类型,因此使用了%s来格式化。以为是字符串本身的问题,但各种尝试后没找到问题原因。怀疑是sprintf中其他的格式化内容影响了SensorEnable,尝试后的确实是。Interval=%d格式化部分对应的变量是gs_stSetup.m_iReportInterval,而该变量原本是long long unsigned int型的,编译时系统有警告,但是我忽略掉了;查了资料,说是格式化时应该使用Interval=%llu,但iar系统似乎不能识别llu,这能识别lu。
最终,把gs_stSetup.m_iReportInterval的类型修改为long unsigned int,并把格式化内容修改为Interval=%lu后问题解决。
msp430 问题及解决记录的更多相关文章
- ie6,ie7,ie8 css bug兼容解决记录
ie6,ie7,ie8 css bug兼容解决记录 转载自:ie6,ie7,ie8 css bug兼容解决记录 - 前端开发 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面 ...
- 解决记录:win10 无法安装VS2017,visual studio installer下载进度始终为0
问题描述:win10 下无法安装VS2017,visual studio installer下载进度始终为0,点击取消按钮后,也没有反应,visual studio installer也关闭不掉: 具 ...
- 错误解决记录------------rhel安装Mysql软件包依赖 mariadb组件
错误解决记录------------软件包依赖 mariadb组件 错误信息: 错误:软件包:akonadi-mysql-1.9.2-4.el7.x86_64 (@anaconda) 需要:maria ...
- Apache coredump 问题发现与解决记录
目录 Apache coredump 问题发现与解决记录 背景 发现问题 解决问题 方法 1 方法 2 总结 Linux 程序编译链接动态库版本问题 ldd 命令 动态库的编译和 soname 线上 ...
- Android开发-Android Studio问题以及解决记录
[Android开发] Android Studio问题以及解决记录 http://blog.csdn.net/niubitianping/article/details/51400721 1.真 ...
- [Dynamic Language] Python3.7 源码安装 ModuleNotFoundError: No module named '_ctypes' 解决记录
Python3.7 源码安装 ModuleNotFoundError: No module named '_ctypes' 解决记录 源码安装时报错 File "/home/abeenser ...
- CentOS 8.2远程连接vncserver升级后1.10.1无法启动解决记录
CentOS 8.2远程连接vncserver升级后1.10.1无法启动解决记录 问题起源:手贱yum upgrade,重启服务器后无法使用vnc viewer远程连接 查看状态 # system ...
- SQLSERVER吞噬内存解决记录
现在手上有一个不大不小的系统,运行了一段时间,因为是24*7不断运行,所以内存逐渐增高,慢慢的会飙到95%以上,然后不得不重启电脑,因为用的是云,怕虚拟机重启down掉起不来,重启操作还只能在凌晨4. ...
- git分支与版本管理、版本回退、冲突解决记录
一.基础使用 1.初始化本地仓库 git init 2.关联远程仓库 git remote add origin git@github.com:用户名/仓库名.git 3.添加远程仓库文件到本地 gi ...
随机推荐
- BZOJ3696 化合物
我们可以树形dp... 令f[p][d]表示以p为根的子树,与p距离为d的结点数 然后我们计算答案: 一种是从某个节点q到根p的方案,对和为d的贡献是1 另一种是p的一个子树中的节点x到另一个子树中的 ...
- POJ 2262 Goldbach's Conjecture 数学常识 难度:0
题目链接:http://poj.org/problem?id=2262 哥德巴赫猜想肯定是正确的 思路: 筛出n范围内的所有奇质数,对每组数据试过一遍即可, 为满足b-a取最大,a取最小 时空复杂度分 ...
- Achieving High Availability and Scalability - ARR and NLB
Achieving High Availability and Scalability: Microsoft Application Request Routing (ARR) for IIS 7.0 ...
- 精通JS 笔记
一,javascript数据类型:undefined,null,boolean,number,string,object 五种加一种复杂类型. 注意大小写,区分大不写函数:functiontypeof ...
- Program B 暴力求解
Given a sequence of integers S = {S1,S2,...,Sn}, you should determine what is the value of the maxim ...
- 记一个有想法却没能力实现的硬件产品——mp3校时闹钟
枕头旁的闹钟,我想大家都用过,很便宜.用一节干电池供电.但其最大的缺点就是不太准,不能校时. 电池啥事用光,也不知道.钟是走的很慢,没按时闹,搞的自己迟了到. 于是就有了我的漫长思考过程... 先说手 ...
- iPhone 6/6 Plus国行版开卖当日抢购攻略
在距离苹果首批发售时隔一个月也就是北京时间10月17日,苹果iPhone 6.iPhone 6 Plus终于也要在中国大陆开卖,众多国内用户终于有机会安排自己的购机计划.据不完全数据显示,目前iPho ...
- 乌龟棋(noip2010)
分析:该题是经典的动态规划题目. 题目中涉及到卡片数.卡片分4类.格子数等若干信息,又每张卡片仅能使用一次.求到达终点最多能能获得多少分. 从题目中可知卡片的使用顺序影响最终得分,我们可知状态转移和使 ...
- BroadcastReceiver的最简单用法
android系统下的广播: 电池电量低.电池充电完成.短信到来了.程序安装卸载.sd卡卸载安装 等 BrocastReceiverDemo.java public class BrocastRece ...
- C/C++ static vs global
static has a very simple logic to it. If a variable is static, it means that it is a global variable ...