OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3822|回复: 20

if中加入break问题

[复制链接]

32

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
642
金钱
642
注册时间
2017-7-25
在线时间
129 小时
发表于 2018-8-8 11:45:57 | 显示全部楼层 |阅读模式
5金钱
如图程序片段,为何会跳入死循环,有谁遇到过吗,还请指教 360截图20180808114200525.jpg 360截图20180808114228585.jpg

最佳答案

查看完整内容[请看2#楼]

https://blog.csdn.net/u012075442/article/details/50931354 HardFault_Handler出现的情况一般有两种: 一种是:数组越界 一种是:堆栈溢出,程序指针指飞
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
发表于 2018-8-8 11:45:58 | 显示全部楼层
https://blog.csdn.net/u012075442/article/details/50931354
HardFault_Handler出现的情况一般有两种:
一种是:数组越界
一种是:堆栈溢出,程序指针指飞
没有脑袋
回复

使用道具 举报

32

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
642
金钱
642
注册时间
2017-7-25
在线时间
129 小时
 楼主| 发表于 2018-8-8 11:48:30 | 显示全部楼层
按理说应该直接跳出break所在的if就好了呀,为何没有跳出来就会进入如第二个途中的死循环,,,不加图中的break不会进入死循环
回复

使用道具 举报

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17786
金钱
17786
注册时间
2018-3-3
在线时间
523 小时
发表于 2018-8-8 11:53:00 | 显示全部楼层
break只会跳出while和for,
/*
*
*
*
*
*
*/
回复

使用道具 举报

20

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
605
金钱
605
注册时间
2017-7-14
在线时间
116 小时
发表于 2018-8-8 11:54:19 | 显示全部楼层
把工程贴上来呗
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-8-8 11:55:40 | 显示全部楼层
你贴的代码不全,
无法分析。
break不是跳出if用的,是跳出循环用的。
你这个代码要往前看,看它是处在哪个循环体内,
满足if条件程序就会跳出这个循环体。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

0

主题

113

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3321
金钱
3321
注册时间
2017-12-14
在线时间
406 小时
发表于 2018-8-8 12:12:23 | 显示全部楼层
应该是跳出main函数里的while(1)了
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-8-8 12:31:42 | 显示全部楼层
6L正解    你这个问题是程序有地方写错了或者堆栈不够,程序自动跳入hardfault_handler中断里面了,
你可以在statup里面修改堆栈大小试试,如果不行
https://blog.csdn.net/u012075442/article/details/50931354
看方法二  简单快捷找到错误句子
猪猪熊呢?
回复

使用道具 举报

32

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
642
金钱
642
注册时间
2017-7-25
在线时间
129 小时
 楼主| 发表于 2018-8-8 13:17:41 | 显示全部楼层

/******************** (C) COPYRIGHT  Inchange ********************************
* ÎļtÃû  £omain.c
* Ãèêö    £oAVAS_Base       
* ¿a°æ±¾  £oV1.5.0
* ×÷Õß    £oJack/Dì3é
* °æ±¾¸üDÂ: 2017-11-22
* μ÷êÔ·½ê½£oJ-Link-OB
**********************************************************************************/       


//í·Îļt
#include "stm32f0xx.h"
#include "sys.h"
#include "usart.h"
#include "gpio.h"
#include "timer.h"
#include "dac.h"
#include "can.h"
#include "adc.h"
#include "sound.h"
#include "app.h"
#include "stmflash.h"

#define Rr  0
#define Dd  1
#define Dd_Run  2
#define Rr_Run  3
       
void System_Init(void)
{
        //NVIC_Config();
        GPIO_Config();
        //DAC_Config();               
        //TIM1_Cap_Config();
        CAN_Config();
        ADC_Config();
  //TIM2_Config();
        //UART_Config();
        Timer_ms_Config();//¶¨ê±¼ä2ms
}


/**
  * @file   main
  * @brief  Main program.
  * @param  None
  * @retval None
  */

        float Temp_Value=0 ;
        uint16_t ADC_Value=0,Resoult_Average=0;
  uint8_t changeRr,changeDd;
        uint8_t res;
  uint16_t cn=0;
  uint16_t cn1=0;
  uint8_t RrDd;
  uint8_t k,j,l;
  uint8_t ADC_FlagRD=0x12;//3õÖμ
   
int main(void)
{
          uint8_t i;
       
                uint8_t tx_canbuf_5B1[8]={0xAA,0x14,0x1e,0x1e,0x10,0x14,0x14,0x14};  //μ÷½úéùÑ1¼¶
                uint8_t tx_canbuf_1A0_R[8]={0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00};  //Rμμ
                uint8_t tx_canbuf_1A0_D[8]={0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00};  //Dμμ

          System_Init();
         
                changeRr=0x1e;
                changeDd=0x21;
          k=0;
                l=0;
                j=0;
//                ADC_FlagRD=0x00;
                RrDd=0;
    while (1)
                {                       
                                        if(k<1)
                                        {
                                                 for(i=0;i<100;i++)
                                                   res = CAN_Send_Msg(tx_canbuf_1A0_R, 8, 0x1A0);
                                                 k++;
                                                 if(k==1)
                                                                k=4;                  
                                        }                                       
                                        switch(RrDd)
                                        {
                                                case 0:
//                                                            Temp_Value = (3.3/4096)* Resoult_Average;
                                                            if(cn1>500)
                                                                        {
                                                                                        Temp_Value = (3.3/4096)* Resoult_Average;
//                                                                                  Temp_Value=2.0;
                                                                                        if(Temp_Value)
                                                                                        {
                                                                                                         if(Temp_Value>1.82&&Temp_Value<1.90)
                                                                                                         {
                                                                                                                         ADC_FlagRD=0x00;
                                                                                                         }
                                                                                                         else if(Temp_Value<1.82)
                                                                                                         {
                                                                                                                         ADC_FlagRD=0x01;
                                                                                                         }
                                                                                                         else if(Temp_Value>1.90)
                                                                                                         {
                                                                                                                         ADC_FlagRD=0x02;
                                                                                                         }
                                                                                                         Temp_Value=0.00;
                                                                                                         Resoult_Average=0;
                                                                                        }
                                                                                        cn1=0;
                                                                  }
                                                                        break;
                                                                       
                                                case 1:
                //                          if(RrDd==1)
                //                                {
                                                      if(cn>720)
                                                                        {
                                                                                        Temp_Value = (3.3/4096)* Resoult_Average;
                                                                                        if(Temp_Value)
                                                                                        {
                                                                                                        if(Temp_Value>1.370&&Temp_Value<1.6)
                                                                                                        {
                                                                                                                 RrDd=2;
                                                                                                                 ADC_FlagRD=0x05;                                                                                                 
                                                                                                        }
                                                                                                        else if(Temp_Value<1.370)
                                                                                                        {
                                                                                                                 ADC_FlagRD=0x03;
                                                                                                        }
                                                                                                        else if(Temp_Value>1.6)
                                                                                                        {
                                                                                                                 ADC_FlagRD=0x04;
                                                                                                        }
                                                                                                        Temp_Value=0.00;
                                                                                                        Resoult_Average=0;
                                                                                        }
                                                                                        cn=0;
                                                                }
                //              }
                                                                        break;
                                        }
                                       
                                        if(ADC_FlagRD==0x00)
                                        {
                                                        if(j<1)
                                                        {
                                                                 for(i=0;i<100;i++)
                                                                 res = CAN_Send_Msg(tx_canbuf_1A0_D, 8, 0x1A0);
                                                                 j++;
                                                                 if(j==1)
                                                                                j=4;       
                                                        }
                                                        RrDd=1;       
                                                       
                                        } else if(ADC_FlagRD==0x01)
                                        {  
                                                        changeRr=changeRr+1;
                                                        tx_canbuf_5B1[3]=changeRr;
                                                        for(i=0;i<100;i++)
                                                                        res = CAN_Send_Msg(tx_canbuf_5B1, 8, 0x5b1);
              if(changeRr>0x2f)       
              {               
                                                                   ADC_FlagRD=0x05;                       
                                                        }                                               
                       
                                        }else if(ADC_FlagRD==0x02)
                                        {
                                                        changeRr=changeRr-1;
                                                        tx_canbuf_5B1[3]=changeRr;
                                                  for(i=0;i<100;i++)
                                                                        res = CAN_Send_Msg(tx_canbuf_5B1, 8, 0x5b1);
                                                  ADC_FlagRD=0x05;
                                                  if(changeRr<0x1d)
                                                        {
                                                                    ADC_FlagRD=0x00;
                                                                     break;
                                                        }   
                                                       
                                        }else if(ADC_FlagRD==0x03)
                                        {
                                                        changeDd=changeDd+1;                               
              if(changeDd>0x3f)       
                                                        {       
                                                                   break;
                                                        }
              tx_canbuf_5B1[3]=changeRr;
                                                        tx_canbuf_5B1[4]=changeDd;
                                                        for(i=0;i<100;i++)
                                                                         res = CAN_Send_Msg(tx_canbuf_5B1, 8, 0x5b1);
                                            ADC_FlagRD=0x05;       
                                                       
                                        }else if(ADC_FlagRD==0x04)
                                        {
                                                        changeDd=changeDd-1;                                       
                                                  if(changeDd<0x1d)
                                                        {
                                                                   break;
                                                        }
                                                        tx_canbuf_5B1[3]=changeRr;
                                                        tx_canbuf_5B1[4]=changeDd;
              for(i=0;i<100;i++)
                                                                 res = CAN_Send_Msg(tx_canbuf_5B1, 8, 0x5b1);
                                                        ADC_FlagRD=0x05;       
                                                       
                                        }
//                                        if(ADC_FlagRD==0x05)//ìí&#188;óoóRμμ&#190;í2&#187;&#196;ü&#212;ù&#184;&#196;&#182;ˉoóì&#248;&#189;&#248;Dμμá&#203;£&#172;&#187;á&#189;&#248;è&#235;&#203;à&#209;-&#187;·
//                                        {
//                                           break;
//                                        }
                }
}



         

#ifdef  USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *   where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* Infinite loop */
  while (1)
  {
  }
}
#endif

/*********************************************************************************************************
      END FILE
*********************************************************************************************************/
回复

使用道具 举报

32

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
642
金钱
642
注册时间
2017-7-25
在线时间
129 小时
 楼主| 发表于 2018-8-8 13:18:51 | 显示全部楼层
warship 发表于 2018-8-8 11:55
你贴的代码不全,
无法分析。
break不是跳出if用的,是跳出循环用的。

谢谢,代码已经贴进来了,请您给看一下,再次感谢
回复

使用道具 举报

32

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
642
金钱
642
注册时间
2017-7-25
在线时间
129 小时
 楼主| 发表于 2018-8-8 13:19:56 | 显示全部楼层
美丽的时光机器 发表于 2018-8-8 11:59
https://blog.csdn.net/u012075442/article/details/50931354
HardFault_Handler出现的情况一般有两种:
...

谢谢!我知道这个,但是break:去掉就不会出现这个问题啦,这是为什么呢
回复

使用道具 举报

32

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
642
金钱
642
注册时间
2017-7-25
在线时间
129 小时
 楼主| 发表于 2018-8-8 13:20:35 | 显示全部楼层
feichangkunge 发表于 2018-8-8 12:12
应该是跳出main函数里的while(1)了

有可能,我试试看用循环将其包裹看一下,谢谢
回复

使用道具 举报

32

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
642
金钱
642
注册时间
2017-7-25
在线时间
129 小时
 楼主| 发表于 2018-8-8 13:27:10 | 显示全部楼层

程序已经贴上来了,请多多指教,谢谢
回复

使用道具 举报

4

主题

346

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3657
金钱
3657
注册时间
2016-2-21
在线时间
542 小时
发表于 2018-8-8 13:29:20 | 显示全部楼层
楼上正解,十有八九是break,把不该跳的循环给跳了,比如main里的while(1),然后就跑飞了
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-8-8 14:14:44 | 显示全部楼层
邦尼power 发表于 2018-8-8 13:27
程序已经贴上来了,请多多指教,谢谢

有可能是那个for循环的大括号忘记加了,这个if判断句可能在for里面。没仔细看你程序。他break应该是把不该跳的循环跳出了
猪猪熊呢?
回复

使用道具 举报

32

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
642
金钱
642
注册时间
2017-7-25
在线时间
129 小时
 楼主| 发表于 2018-8-8 14:27:44 | 显示全部楼层
323232 发表于 2018-8-8 14:14
有可能是那个for循环的大括号忘记加了,这个if判断句可能在for里面。没仔细看你程序。他break应该是把不 ...

正常应该不会呀,那我把括号加上试试,还有个问题如图 1 (2).jpg ,我采集电压,根据电压大小来发报文,为啥每次减得时候一减到底,我有设置推出这个减法进入条件呀,您知道这是为什么吗,我一直很奇怪,就一直在减,根本停不下来。
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-8-8 17:20:13 | 显示全部楼层
单步调试看看,那个break跳出了main中的while循环,程序跑飞了。
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-8-8 20:23:04 | 显示全部楼层
本帖最后由 warship 于 2018-8-8 20:24 编辑
邦尼power 发表于 2018-8-8 13:18
谢谢,代码已经贴进来了,请您给看一下,再次感谢

这个程序有点大,
没有时间细看。
但粗看一下,整个现有框架存在严重问题,
从if(ADC_FlagRD==0x00)开始,
后面的每一个break都会直接跳出主循环while(1),
也就是跳出main()导致严重错误。
按道理,应该还有一个内循环把这些都框进来,
使得break不至于跳出main().
但是不知道你这个程序是什么功能,
也不能想当然地替你乱改。
你自己这么乱改一通也不是事儿,
你应该搞清楚这程序的来龙去脉,
什么时候正常过,
什么时候又改过一些什么东西。
然后结合要完成的功能进行修改调试。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-8-8 20:36:59 | 显示全部楼层
如果非要想当然地改:
改成如下试试:

/******************** (C) COPYRIGHT  Inchange ********************************
* ???t??  £omain.c
* ?èê?    £oAVAS_Base        
* ?a°?±?  £oV1.5.0
* ×÷??    £oJack/Dì3é
* °?±??üD?: 2017-11-22
* μ÷ê?·?ê?£oJ-Link-OB
**********************************************************************************/        


//í·???t
#include "stm32f0xx.h"
#include "sys.h"
#include "usart.h"
#include "gpio.h"
#include "timer.h"
#include "dac.h"
#include "can.h"
#include "adc.h"
#include "sound.h"
#include "app.h"
#include "stmflash.h"

#define Rr  0
#define Dd  1
#define Dd_Run  2
#define Rr_Run  3
        
void System_Init(void)
{
        //NVIC_Config();
        GPIO_Config();
        //DAC_Config();               
        //TIM1_Cap_Config();
        CAN_Config();
        ADC_Config();
  //TIM2_Config();
        //UART_Config();
        Timer_ms_Config();//?¨ê±??2ms
}


/**
  * @file   main
  * @brief  Main program.
  * @param  None
  * @retval None
  */

        float Temp_Value=0 ;
        uint16_t ADC_Value=0,Resoult_Average=0;
  uint8_t changeRr,changeDd;
        uint8_t res;
  uint16_t cn=0;
  uint16_t cn1=0;
  uint8_t RrDd;
  uint8_t k,j,l;
  uint8_t ADC_FlagRD=0x12;//3??μ
   
int main(void)
{
          uint8_t i;
        
                uint8_t tx_canbuf_5B1[8]={0xAA,0x14,0x1e,0x1e,0x10,0x14,0x14,0x14};  //μ÷?úéù?1??
                uint8_t tx_canbuf_1A0_R[8]={0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00};  //Rμμ
                uint8_t tx_canbuf_1A0_D[8]={0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00};  //Dμμ

          System_Init();
         
          changeRr=0x1e;
          changeDd=0x21;
          k=0;
          l=0;
          j=0;
//                ADC_FlagRD=0x00;
          RrDd=0;
    while (1)
                        {                        
                                if(k<1)
                                {
                                                                 for(i=0;i<100;i++)
                                                                         res = CAN_Send_Msg(tx_canbuf_1A0_R, 8, 0x1A0);
                                                                 k++;
                                                                 if(k==1) k=4;                  
                                }                                       
                        switch(RrDd)
                        {
                                case 0:
//                                                            Temp_Value = (3.3/4096)* Resoult_Average;
                                                if(cn1>500)
                                                        {
                                                                Temp_Value = (3.3/4096)* Resoult_Average;
//                                                                                  Temp_Value=2.0;
                                                                if(Temp_Value)
                                                                {
                                                                                                                                 if(Temp_Value>1.82&&Temp_Value<1.90)
                                                                                                                                 {
                                                                                                                                                                                                 ADC_FlagRD=0x00;
                                                                                                                                 }
                                                                                                                                 else if(Temp_Value<1.82)
                                                                                                                                 {
                                                                                                                                                                                                 ADC_FlagRD=0x01;
                                                                                                                                 }
                                                                                                                                 else if(Temp_Value>1.90)
                                                                                                                                 {
                                                                                                                                                                                                 ADC_FlagRD=0x02;
                                                                                                                                 }
                                                                                                                                 Temp_Value=0.00;
                                                                                                                                 Resoult_Average=0;
                                                                }
                                                                cn1=0;
                                                }
                                                                                                                                                        break;
                                                                                                                                                       
                        case 1:
//                          if(RrDd==1)
//                                {
                                                                                if(cn>720)
                                                                                        {
                                                                                                Temp_Value = (3.3/4096)* Resoult_Average;
                                                                                                if(Temp_Value)
                                                                                                {
                                                                                                                                                                if(Temp_Value>1.370&&Temp_Value<1.6)
                                                                                                                                                                {
                                                                                                                                                                                                 RrDd=2;
                                                                                                                                                                                                 ADC_FlagRD=0x05;                                                                                                
                                                                                                                                                                }
                                                                                                                                                                else if(Temp_Value<1.370)
                                                                                                                                                                {
                                                                                                                                                                                                 ADC_FlagRD=0x03;
                                                                                                                                                                }
                                                                                                                                                                else if(Temp_Value>1.6)
                                                                                                                                                                {
                                                                                                                                                                                                 ADC_FlagRD=0x04;
                                                                                                                                                                }
                                                                                                                                                                Temp_Value=0.00;
                                                                                                                                                                Resoult_Average=0;
                                                                                                }
                                                                                                cn=0;
                                                                                        }
//              }
                                        break;
                        default:
                                                                                                                       
                        if(ADC_FlagRD==0x00)
                        {
                                                                                        if(j<1)
                                                                                        {
                                                                                                                         for(i=0;i<100;i++)
                                                                                                                         res = CAN_Send_Msg(tx_canbuf_1A0_D, 8, 0x1A0);
                                                                                                                         j++;
                                                                                                                         if(j==1) j=4;        
                                                                                        }
                                                                                        RrDd=1;        
                                                                                       
                        } else if(ADC_FlagRD==0x01)
                        {  
                                                                                        changeRr=changeRr+1;
                                                                                        tx_canbuf_5B1[3]=changeRr;
                                                                                        for(i=0;i<100;i++)
                                                                                                                                                        res = CAN_Send_Msg(tx_canbuf_5B1, 8, 0x5b1);
                                                                                        if(changeRr>0x2f)        
                                                                                        {               
                                                                                                 ADC_FlagRD=0x05;                        
                                                                                        }                                                

                        }else if(ADC_FlagRD==0x02)
                        {
                                                                                        changeRr=changeRr-1;
                                                                                        tx_canbuf_5B1[3]=changeRr;
                                                                for(i=0;i<100;i++)
                                                                                res = CAN_Send_Msg(tx_canbuf_5B1, 8, 0x5b1);
                                                                ADC_FlagRD=0x05;
                                                                if(changeRr<0x1d)
                                                                                        {
                                                                                                ADC_FlagRD=0x00;
                                                                                                break;
                                                                                        }   
                                                                                       
                        }else if(ADC_FlagRD==0x03)
                        {
                                                                                        changeDd=changeDd+1;                                
                                                                                        if(changeDd>0x3f)        
                                                                                        {        
                                                                                                break;
                                                                                        }
                                                                                        tx_canbuf_5B1[3]=changeRr;
                                                                                        tx_canbuf_5B1[4]=changeDd;
                                                                                        for(i=0;i<100;i++)
                                                                                                        res = CAN_Send_Msg(tx_canbuf_5B1, 8, 0x5b1);
                                                                                        ADC_FlagRD=0x05;        
                                                                                       
                        }else if(ADC_FlagRD==0x04)
                        {
                                                                                        changeDd=changeDd-1;                                       
                                                                if(changeDd<0x1d)
                                                                                        {
                                                                                                break;
                                                                                        }
                                                                                        tx_canbuf_5B1[3]=changeRr;
                                                                                        tx_canbuf_5B1[4]=changeDd;
                                                                                        for(i=0;i<100;i++)
                                                                                                        res = CAN_Send_Msg(tx_canbuf_5B1, 8, 0x5b1);
                                                                                        ADC_FlagRD=0x05;        
                                                                                       
                        }
                //                                        if(ADC_FlagRD==0x05)//ìí?óoóRμμ?í2??ü?ù???ˉoóì???Dμμá?£??á??è??à?-?·
                //                                        {
                //                                           break;
                //                                        }
        }
}
}                       
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

32

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
642
金钱
642
注册时间
2017-7-25
在线时间
129 小时
 楼主| 发表于 2018-8-9 08:57:41 | 显示全部楼层
warship 发表于 2018-8-8 20:36
如果非要想当然地改:
改成如下试试:

谢谢!功能就是采集两中低电压,直要电压不再规定范围内就发送CAN报文去调节
回复

使用道具 举报

32

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
642
金钱
642
注册时间
2017-7-25
在线时间
129 小时
 楼主| 发表于 2018-8-9 09:17:29 | 显示全部楼层
warship 发表于 2018-8-8 20:23
这个程序有点大,
没有时间细看。
但粗看一下,整个现有框架存在严重问题,

谢谢,您说的很对,我一直在修改,还没认真仔细的思考过每一个环节,我在想想,谢谢您的慷慨解释,其实现在就一个问题,电压高了,我进行发CAN报文进行减法,就AD_Flag==0x02的那个,程序就一直发报文进行电压减,修改跳出减法条件还是跳不出来,用CAN分析仪来看发出来的报文时,tx_canbuf[3]位报文值从减到零然后又从0xff减到0,就这样一直减,这个问题不晓得出现在哪
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 18:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表