关于C 串口发送失败?

C语言 码拜 10年前 (2015-05-11) 1609次浏览 0个评论
 

我看了一个串口的代码,实在找不出有什么破绽,我连续调用 发送 字节程序是OK的。但是我连续调用发送字符串 函数第二次可能无法发送数据了。请高手赐教下~~
加入我在程序中调用如下是OK的,在串口可以收到消息:
i=0;  
 while(str2[i]!=””\0″”)
    {
SendOneByte(str2[i++]);
    }
 i=0;
while(str2[i]!=””\0″”)
    {
SendOneByte(str2[i++]);
    }
    SendrStr(str1);

但是如果我两次调用发送字符串函数,在它后面肯定发布出去数据了,不知道有什么问题,是不是函数定义有点问题,我很害怕那个指针···

   while(str2[i]!=””\0″”)
    {
SendOneByte(str2[i++]);
    }

    SendrStr(str1);
   SendrStr(str2); //这个肯定发布出去了··················

ode const char str1[] = “The string is 来自单片机!\r\n”;  
code const char str2[] = “hello hello  \r\n”;

/**************串口发送字符函数*************/
void SendOneByte(uint8 c)
{
    ES = 0;			//禁止中断,让串口安心工作啊
    SBUF = c;
    while(!TI);		//等待发送完毕
    TI = 0;			//清TI中断
    ES = 1;			//打开中断
}
/**************串口发送字符串函数*************/
void SendrStr(const uint8 *ptr)
{
    do
    {
	SendOneByte(*ptr);		//其实发送字符串也是在调用发送字符的函数~~
    }while(*ptr++!=""\0"");	//要有结束判断,否则串口发送 字符串 不知道什么时候停止
}

while(str2[i]!=””\0″”)
    {
SendOneByte(str2[i++]);
    }

    SendrStr(str1);
   SendrStr(str2); //这个肯定发布出去了··················

str2一直在++,在你发送的时候发送的时候str2是什么呢?想过吗

20分
引用 1 楼 u011916206 的回复:

while(str2[i]!=””\0″”)
    {
SendOneByte(str2[i++]);
    }

    SendrStr(str1);
   SendrStr(str2); //这个肯定发布出去了··················

str2一直在++,在你发送的时候发送的时候str2是什么呢?想过吗

不好意思 看错了 ,以上无效。

建议楼主把两次str2的地址打出来,看是否是编译器优化的时候修改了str2的地址

引用 2 楼 u011916206 的回复:
Quote: 引用 1 楼 u011916206 的回复:

while(str2[i]!=””\0″”)
    {
SendOneByte(str2[i++]);
    }

    SendrStr(str1);
   SendrStr(str2); //这个肯定发布出去了··················

str2一直在++,在你发送的时候发送的时候str2是什么呢?想过吗

不好意思 看错了 ,以上无效。

建议楼主把两次str2的地址打出来,看是否是编译器优化的时候修改了str2的地址

恩    我试试   好久没搞程序了,现在一个串口都把我搞死了···哎

引用 2 楼 u011916206 的回复:
Quote: 引用 1 楼 u011916206 的回复:

while(str2[i]!=””\0″”)
    {
SendOneByte(str2[i++]);
    }

    SendrStr(str1);
   SendrStr(str2); //这个肯定发布出去了··················

str2一直在++,在你发送的时候发送的时候str2是什么呢?想过吗

不好意思 看错了 ,以上无效。

建议楼主把两次str2的地址打出来,看是否是编译器优化的时候修改了str2的地址

出现的现象太奇怪了,我利用 字符显示 就显示 “133” 我用十六进制显示,却可以都接受到。我的代码 和 结构如下图:
关于C 串口发送失败?
关于C 串口发送失败?

红色框框是 十六进制显示接收到的。后面绿色框框是 利用字符格式 接受的。我试过其他的串口工具,竟然也是一样的现象。实在不解不解啊~~~

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于C 串口发送失败?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!