打印

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

[复制链接]
971|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发送中断没?

使用特权

评论回复
5
ayb_ice| | 2019-5-17 08:33 | 只看该作者
tianxiongweitxw 发表于 2019-5-16 21:30
HexUartSend()在其它地方都正常,就是在case里不能输出,整个程序是在中断里面。 ...

那要看具体代码了

使用特权

评论回复
6
tianxiongweitxw|  楼主 | 2019-5-17 11:13 | 只看该作者
叶春勇 发表于 2019-5-17 00:32
HexUartSend(order[h]);这个用uart发送中断没?

今天加个监控变量看看中断执行没有

使用特权

评论回复
7
tianxiongweitxw|  楼主 | 2019-5-17 17:20 | 只看该作者
问题还是没能解决

使用特权

评论回复
8
叶春勇| | 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;
}

把相应函数移出中断。

使用特权

评论回复
9
tianxiongweitxw|  楼主 | 2019-5-17 20:27 | 只看该作者
谢谢,又出了一个奇怪的问题,本想发送数组中的某一个元素,代码是这样的:HexUartSend(order[h]);结果却是整个数组的元素都被发送出来,百思不得其解。

使用特权

评论回复
评论
一叶倾城wwq 2019-5-19 13:11 回复TA
数组作为参数传递退化为指针了 
10
tianxiongweitxw|  楼主 | 2019-5-17 20:32 | 只看该作者
本帖最后由 tianxiongweitxw 于 2019-5-17 20:33 编辑

程序是在定时器0中断,不在串口中断中

使用特权

评论回复
11
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;
                                  }
                         }
                  }

使用特权

评论回复
12
千岁寒| | 2019-5-20 13:22 | 只看该作者
有两个可能: 1 、 这个Case没有进入    2、栈溢出

使用特权

评论回复
13
叶春勇| | 2019-5-20 14:41 | 只看该作者
1排除,他搞标志位了。
2、有可能。中断不宜加太多指令

使用特权

评论回复
14
tianxiongweitxw|  楼主 | 2019-5-21 08:40 | 只看该作者
把ES初始化为1就解决了,但很不明白,之前一直没有初始化,其它地方的串口接收和发送都能正常,就是这里不行。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

520

帖子

0

粉丝