火急: C语言--串口读取数据时的问题(高分100分)解决以上给分

liyongbo 2006-09-05 02:04:38
我在使用C语言写串口读取时,使用中断方式,使用下面函数:
unsigned char read_char(void)
{
unsigned char unch;
if(buffout!=buffin)
{
unch=Buffer[buffout];
buffout++;

if(buffout>=BUFFLEN)
buffout=0;
return (unch);
}
else
return (0xFF);
}

在主函数中用死循环读取:
do
{
RevCharCom1=read_char();
if(RevCharCom1!=0xFF)
{

}



}while(1);

但是我有时,串口返回的是0xFF,这时也被过滤掉;

我把函数类型改成 int read_char(void) ;函数中改为 return(-1)
在读时返回无数个 FF.

怎么解决这个问题呀? 谢谢啦!
...全文
400 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyongbo 2006-09-05
  • 打赏
  • 举报
回复
跟大家说的一样,函数的返回值类型不对!改大一点int型就可以了!


谢谢了!
lonelyair 2006-09-05
  • 打赏
  • 举报
回复
说了是中断函数
unsigned char read_char(void) --interrupt 0
liyongbo 2006-09-05
  • 打赏
  • 举报
回复

感谢兄弟们!问题解决了!

我要分分了!
tailzhou 2006-09-05
  • 打赏
  • 举报
回复
那你的函数不能这样定义的。要象bisc_sunny(总是当时携手处,游遍芳丛)那样处理
tailzhou 2006-09-05
  • 打赏
  • 举报
回复
你“那么会读无数个 0xFE”是什么意思??

总不能是说:
if(RevCharCom1!=0xFE)
{
//这里读到RevCharCom1==0xFE??
}

吧?
liyongbo 2006-09-05
  • 打赏
  • 举报
回复
我接收的东西是0--FF之间的数,所以不能过滤掉任何一个.

liyongbo 2006-09-05
  • 打赏
  • 举报
回复
没内容的话, 我在循环里是不是这样写:
do
{ RevCharCom1=read_char();
if(RevCharCom1!=0xFE)
{

}
}
这样的话, 我也把0xFE过滤掉了呀?


tailzhou 2006-09-05
  • 打赏
  • 举报
回复
缓冲区读完了的时候,buffout==buffin,会一直执行return(-2)呀;
格兰特杨 2006-09-05
  • 打赏
  • 举报
回复
没那么复杂吧...
格兰特杨 2006-09-05
  • 打赏
  • 举报
回复
bool read_char(char *s)
{
unsigned char unch;
if(buffout!=buffin)
{
unch=Buffer[buffout];
buffout++;

if(buffout>=BUFFLEN)
buffout=0;
*s = unch;
return true;;
}
else
return false;
}

do
{
if (read_char(&RevCharCom1) != false)
{
...
}
}while(1);

liyongbo 2006-09-05
  • 打赏
  • 举报
回复
RevCharCom1的类型是unsugned char 的!
tailzhou 2006-09-05
  • 打赏
  • 举报
回复
那么会读无数个 0xFE

这是正常的吧:缓冲区没内容了。
tailzhou 2006-09-05
  • 打赏
  • 举报
回复
你的RevCharCom1的类型是unsugned char还是int??
liyongbo 2006-09-05
  • 打赏
  • 举报
回复
RevCharCom1的类型是unsigned char类型.
如果改为 return(-2) 那么我在读串口时
if(RevCharCom1!=-2)

那么会读无数个 0xFE

为什么?
tailzhou 2006-09-05
  • 打赏
  • 举报
回复
因为他的函数签名改成了 int read_char(void)
所以 -1跟0xff 还是有区别的。0xff成了255;
jixingzhong 2006-09-05
  • 打赏
  • 举报
回复
恩,
这个还是有一点小问题需要说一下:

unsigned char read_char(void)
函数返回 unsigned char,
然后你return一个负数 ...

改成 return 0 吧 ...
jixingzhong 2006-09-05
  • 打赏
  • 举报
回复
你改成 return(-2)
其他的都行 ...
jixingzhong 2006-09-05
  • 打赏
  • 举报
回复
函数中改为 return(-1)

..
-1 就是 0xFF
tailzhou 2006-09-05
  • 打赏
  • 举报
回复
RevCharCom1的类型?
liyongbo 2006-09-05
  • 打赏
  • 举报
回复
高手请回呀!
多旋翼无人机的软着陆,使用稳健的非线性控制和风力建模(Matlab代码实现)内容概要:本文围绕多旋翼无人机的软着陆问题,提出了一种基于稳健非线性控制与风力建模的解决方案,并通过Matlab代码实现仿真验证。研究重点在于设计能够应对外部风扰的非线性控制器,提升无人机在复杂气象条件下降落过程中的稳定性与安全性。文中详细阐述了系统动力学建模、风力干扰建模方法以及非线性控制策略的设计过程,特别是采用了非线性模型预测控制(MPC)框架,增强了系统对不确定性环境的适应能力。该方案有效提升了无人机软着陆的精度和鲁棒性。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的科研人员及工程技术人员,尤其适用于从事无人机控制、飞行器导航与制导、非线性系统控制等相关领域的研究生和研究人员。; 使用场景及目标:①应用于多旋翼无人机在强风或突变风场环境下的安全着陆控制;②为复杂环境下飞行器的鲁棒控制设计提供技术参考;③服务于科研项目中对非线性MPC控制算法的仿真验证与优化。; 阅读建议:建议读者结合Matlab代码深入理解控制算法的具体实现流程,重点关注系统建模与控制器设计之间的衔接逻辑,并可通过修改风扰参数进行仿真测试,以加深对鲁棒性设计的理解。

70,040

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧