[牛人杂谈] 发现半主机调试的一个问题

[复制链接]
4319|27
 楼主| 与时俱进 发表于 2014-4-5 12:09 | 显示全部楼层 |阅读模式
发送到串口的字符有时会被吃掉最后的几个。
比如:
     for( i=0; i<256; i++)
          PrintHex(i);
        while(1);
在keil的UART1窗口显示 0x00 0x01 0x02……0xFD

到0xFD就结束了,后面的0xFE 0xFF被吃掉了。
从小木丁丁 发表于 2014-4-5 12:17 来自手机 | 显示全部楼层
吃掉了?
niuyaliang 发表于 2014-4-5 20:41 | 显示全部楼层
PrintHex(i);
不可能我看看你的这个函数写的了
 楼主| 与时俱进 发表于 2014-4-5 21:43 | 显示全部楼层
本帖最后由 与时俱进 于 2014-4-5 21:47 编辑

移植圈圈写的函数
char HexTable[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

void PrintHex(char x)
{
SendChar('0');
SendChar('x');
SendChar(HexTable[x>>4]);
SendChar(HexTable[x&0xf]);
SendChar(' ');
}
 楼主| 与时俱进 发表于 2014-4-5 21:56 | 显示全部楼层
niuyaliang 发表于 2014-4-5 20:41
PrintHex(i);
不可能我看看你的这个函数写的了

它不是真正被“吃掉”,是暂时的,如果有后续字符发送,被吃掉的又会显示出来。
江枫渔火 发表于 2014-4-6 01:28 | 显示全部楼层
好像是有这个问题。楼主细心。
去年的某次我也试过用半主机,当时好像也有这个情况,没放心头。

前段时间用ITM,就没这问题,楼主可以换用ITM,放了半主机吧
 楼主| 与时俱进 发表于 2014-4-6 07:10 | 显示全部楼层
江枫渔火 发表于 2014-4-6 01:28
好像是有这个问题。楼主细心。
去年的某次我也试过用半主机,当时好像也有这个情况,没放心头。

ITM似乎有些复杂?
niuyaliang 发表于 2014-4-6 07:16 | 显示全部楼层
半主机这么用?不是吧,我直接用printf()函数打印,从来没错过,LZ那是用的串口打印。。。
niuyaliang 发表于 2014-4-6 07:17 | 显示全部楼层
江枫渔火 发表于 2014-4-6 01:28
好像是有这个问题。楼主细心。
去年的某次我也试过用半主机,当时好像也有这个情况,没放心头。

这样用不叫半主机吧。。。顶多叫串口打印
niuyaliang 发表于 2014-4-6 07:18 | 显示全部楼层
与时俱进 发表于 2014-4-5 21:56
它不是真正被“吃掉”,是暂时的,如果有后续字符发送,被吃掉的又会显示出来。 ...

没全部读出来?我回家了,手头没片子,无法验证,你试试直接用printf打印
john_lee 发表于 2014-4-6 08:37 来自手机 | 显示全部楼层
貌似缓冲了,查查有没有类似flush的功能,把缓冲强制输出。

评分

参与人数 1威望 +5 收起 理由
xyz549040622 + 5

查看全部评分

江枫渔火 发表于 2014-4-6 12:39 | 显示全部楼层
niuyaliang 发表于 2014-4-6 07:16
半主机这么用?不是吧,我直接用printf()函数打印,从来没错过,LZ那是用的串口打印。。。 ...

楼主说的就是半主机,是printf是输出在mdk的界面,但经常是漏掉最后一两个字符的样子,如果后面再输出一次,那前面漏掉的又输出来了。比如你printf("abc"),可能c不见了,但你又再次printf("def"),输出则是“cde”,说的是这个情况,以前遇到过,但不记得解决了没有。现在不用那个了。用ITM也很好。

评论

对,就是这个意思。  发表于 2014-4-6 15:36
江枫渔火 发表于 2014-4-6 12:40 | 显示全部楼层
与时俱进 发表于 2014-4-6 07:10
ITM似乎有些复杂?

网上有教程,也很简单的说。printf 输出时在debug printf,而不是uartxxx
john_lee 发表于 2014-4-6 14:07 来自手机 | 显示全部楼层
cortex-m0没有itm。
 楼主| 与时俱进 发表于 2014-4-6 15:44 | 显示全部楼层
江枫渔火 发表于 2014-4-6 12:39
楼主说的就是半主机,是printf是输出在mdk的界面,但经常是漏掉最后一两个字符的样子,如果后面再输出一 ...

请教一个问题:程序中没找到#define _NO_USE_HXT_,可是#ifdef _NO_USE_HXT_分支被编译了,为什么?_NO_USE_HXT_符号与config设置有关是吗?
 楼主| 与时俱进 发表于 2014-4-6 15:47 | 显示全部楼层
config设置能不能在bin文件里指定?
似乎有bin文件还要有config值,才能正确烧写M0芯片?
江枫渔火 发表于 2014-4-6 15:48 | 显示全部楼层
如果你自己代码里没有定义此符号,那就是在工程配置里预定义了。查看设置里有没有哪里定义了就是了。
有此一问说明工程不是你自己建立的,应该去看看工程配置。
 楼主| 与时俱进 发表于 2014-4-6 16:04 | 显示全部楼层
江枫渔火 发表于 2014-4-6 15:48
如果你自己代码里没有定义此符号,那就是在工程配置里预定义了。查看设置里有没有哪里定义了就是了。
有此 ...

移植BSP代码啊。
骗子的片子 发表于 2014-4-6 22:07 | 显示全部楼层
又见半主机调试
uopy2002 发表于 2015-1-16 14:56 | 显示全部楼层
你好 我是知前有詢問過你NANO130設計USB + SPI FLASH 部分的人
我按照著你知前發的帖一步一步操作,的確也有遇到你記錄的一些問題也有跟著修正(DATA重新排列 ADDRESS 512大小)

但我目前有卡到一個是當HOST傳輸批次檔案只要0X10000之類的大小,就會傳輸到死當,而且感覺不是這麼穩定

可以請問你在修改過程中還有哪些要注意嗎,還是純粹SPI寫法問題
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

1290

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部