分支语句中的串口输出怎么也不执行

[复制链接]
1203|14
 楼主| tianxiongweitxw 发表于 2019-5-16 19:53 | 显示全部楼层 |阅读模式
本帖最后由 tianxiongweitxw 于 2019-5-16 19:56 编辑

求助:        分支语句中的串口输出怎么也不执行,HexUartSend(order[h],用监控变量确认分支语句已经执行了。望大神指点一二,谢谢了。
if(OrderMode==1)
          {
           switch(order[5])
                     {
                   case 0x01: {
                                 for(h=0;h<15;h++)         //返回接收到的数据,供手机校验
                                    {
                                           HexUartSend(order[h]);
                                 }         
                                 Monitor=1;//监控变量                          
                                Learn_Mode=1;
                                OrderMode=0;
                                 i=0;
                                 break;
                                  }
                         }
                  }



叶春勇 发表于 2019-5-16 20:02 | 显示全部楼层
HexUartSend() 这个函数调通了吗?
 楼主| tianxiongweitxw 发表于 2019-5-16 21:30 | 显示全部楼层
HexUartSend()在其它地方都正常,就是在case里不能输出,整个程序是在中断里面。
叶春勇 发表于 2019-5-17 00:32 | 显示全部楼层
HexUartSend(order[h]);这个用uart发送中断没?
ayb_ice 发表于 2019-5-17 08:33 | 显示全部楼层
tianxiongweitxw 发表于 2019-5-16 21:30
HexUartSend()在其它地方都正常,就是在case里不能输出,整个程序是在中断里面。 ...

那要看具体代码了
 楼主| tianxiongweitxw 发表于 2019-5-17 11:13 | 显示全部楼层
叶春勇 发表于 2019-5-17 00:32
HexUartSend(order[h]);这个用uart发送中断没?

今天加个监控变量看看中断执行没有
 楼主| tianxiongweitxw 发表于 2019-5-17 17:20 | 显示全部楼层
问题还是没能解决
叶春勇 发表于 2019-5-17 19:45 | 显示全部楼层
if(OrderMode==1)  need_rerply_flag=1;
改成这样。

让后在main函数中

if(need_reply_flag)
{
for(h=0;h<15;h++)         //返回接收到的数据,供手机校验
{
  HexUartSend(order[h]);
}
need_reply_flag=0;
}

把相应函数移出中断。
 楼主| tianxiongweitxw 发表于 2019-5-17 20:27 | 显示全部楼层
谢谢,又出了一个奇怪的问题,本想发送数组中的某一个元素,代码是这样的:HexUartSend(order[h]);结果却是整个数组的元素都被发送出来,百思不得其解。

评论

数组作为参数传递退化为指针了  发表于 2019-5-19 13:11
 楼主| tianxiongweitxw 发表于 2019-5-17 20:32 | 显示全部楼层
本帖最后由 tianxiongweitxw 于 2019-5-17 20:33 编辑

程序是在定时器0中断,不在串口中断中
 楼主| tianxiongweitxw 发表于 2019-5-17 21:10 | 显示全部楼层
本帖最后由 tianxiongweitxw 于 2019-5-17 22:12 编辑

更奇怪的问题,前面加任何一个串口输出语句  HexUartSend(order[h]);就正常了,不加不行。

  HexUartSend(order[h]);//这里加任何一个串口输出语句,下面的串口就可以正常输出,不加下面的串口就输出不了。
if(OrderMode==1)
          {
           switch(order[5])
                     {
                   case 0x01: {
                                 for(h=0;h<15;h++)         //返回接收到的数据,供手机校验
                                    {
                                           HexUartSend(order[h]);
                                 }         
                                 Monitor=1;//监控变量                          
                                Learn_Mode=1;
                                OrderMode=0;
                                 i=0;
                                 break;
                                  }
                         }
                  }
千岁寒 发表于 2019-5-20 13:22 | 显示全部楼层
有两个可能: 1 、 这个Case没有进入    2、栈溢出
叶春勇 发表于 2019-5-20 14:41 | 显示全部楼层
1排除,他搞标志位了。
2、有可能。中断不宜加太多指令
 楼主| tianxiongweitxw 发表于 2019-5-21 08:40 | 显示全部楼层
把ES初始化为1就解决了,但很不明白,之前一直没有初始化,其它地方的串口接收和发送都能正常,就是这里不行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

521

帖子

0

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