OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8071|回复: 1

在程序调试中遇到的串口打印输出问题

[复制链接]

6

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2011-8-30
在线时间
3 小时
发表于 2011-11-15 12:49:17 | 显示全部楼层 |阅读模式
 一.问题

以上的问题是我在程序调试中实验的结果:

实际遇到的问题是:要验证读写寄存器是否正确,如

把数据写入寄存器地址:

WriteRegister( adderss, data );

WriteRegister( 1, 15 );

fficeffice" /> 

读数据寄存器地址:

ReadRegister(address);

ReadRegister(1);

 

二.设计的解决问题方法

但这个过程是在单片机里面实现的,现在程序不能通过,我不能确认出现是在那个地方出现了问题。

现在要设计一个步骤来检查子程序是否正确。我觉得pfintf是一个好方式,可以这样设计:

unsigned char i;

i= ReadRegister(1);

printf("i的值为:%d ;",i);

这样可以认为i=15那么我的读写寄存器子程序就没有问题,如i=别的值这个读写寄存器子程序就不正确。

 

三.串口打印中遇到的问题

printf("15\n ");

在打印输出中可以得到结果:15.

 

而换一种方式:

i=15;

printf("i的值为:%d ;",i);

可以得到i的值为:3840.  想知道原因,求解决办法。

 

四.对问题的总结
1.求问思路是否正确。

2.所有问题是怎么验证在编程过程中我所编的子程序正确性,如果本身语法没有问题。对于像我这种刚学习编程的人来说,手里面没有验证过的保证正确的子程序,是个很大的问题。

如果谁又好的方法请不吝赐教,我在这膜拜了。

3.求解printf是否能读出寄存器里面的值

printf输出是个好方法,但不是这么直接用,我在网上少见有人讨论,我了解的是要把十六进制转换成ASICII后才能显示。

我不晓得事实是不是这样,如果是,请高手指教。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-11-15 12:56:38 | 显示全部楼层
回复【楼主位】ljc2046:
---------------------------------
思路是对的.
至于i是3840,我也表示怀疑.不应该是3840的.
printf可以设置输出格式的.如果是%d,表示十进制.

楼主可以参考下我们的usmart,你的这些在usmart上直接就有实现.
搜索论坛.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 11:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表