搜索
查看: 104|回复: 0
打印 上一主题 下一主题

编译出错

[复制链接]
跳转到指定楼层
楼主
 楼主| 发表于 2022-9-21 13:37:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef unsigned short uint16_t;
  4. typedef unsigned char uint8_t;

  5. #define EEP_INFO_CUR_POS 70
  6. #define EEP_MOTOR_CUR_POS_INIT_NUM 11


  7. typedef struct
  8. {
  9.     uint8_t    m_current_dir;        //电机当前方向
  10.     uint8_t    m_locked;             //电机堵转
  11.     uint8_t    m_anti_pinch;         //电机防夹
  12.     uint16_t    m_current_pos;       //电机当前位置
  13.     uint16_t    m_current_speed;  //电机当前速度
  14.     uint16_t    m_start_move_pos;//用于标记运动前位置
  15. }_BOTTOM_STATE;

  16. typedef enum
  17. {
  18.     /******电机当前状态专用******/
  19.     IDLE,                          //0空闲状态
  20.     /******电机目标状态专用******/
  21.     STOPING,                     //1停止状态
  22.     /*********公用部分********/
  23.     SELF_LEARN,                //2自学习状态
  24.     ONE_TOUCH_EZE,           //3一键EZE
  25.     ONE_TOUCH_EZE_RET,  //4一键恢复
  26.     ONE_TOUCH_REL,           //5一键释放
  27.     ONE_TOUCH_REL_RET,  //6一键释放恢复
  28.     FORWARD_COMFORT,  //7向前舒适性调节
  29.     BACKWORD_COMFORT,  //8向后舒适性调节
  30.     SAVE_POS_1,                //9记忆位置1
  31.     SAVE_POS_2,                //10记忆位置1
  32.     SAVE_POS_3,                //11记忆位置1
  33.     SAVE_POS_4,                //12记忆位置1
  34.     RET_SAVE_POS_1,          //13回到位置1
  35.     RET_SAVE_POS_2,          //14回到位置2
  36.     RET_SAVE_POS_3,          //15回到位置3
  37.     RET_SAVE_POS_4,          //16回到位置4
  38.   ONE_TOUCH_RESET,        //17复位
  39.   ABOVE_WATER,        //18脱困模式
  40.   ANTI_CLAMP,          //19防夹
  41.   FORWARD_COMFORT_LOW,    //20向前舒适性调节低速
  42.   BACKWORD_COMFORT_LOW,   //21向后舒适性调节低速
  43.   SELF_LEARN_DOUBLE,       //22双边自学习状态
  44.     /**********公用部分*********/
  45. }_MOTOR_RUN_MODE;
  46. //电机控制主结构体
  47. typedef struct
  48. {
  49.   uint8_t    m_mode;            //电机模式,0-正常模式,1-测试模式
  50.   uint8_t    self_learn_block_state;   //自学习等待标志位
  51.   uint8_t    one_touch_state;          //EEPROM更新标志位(一键操作使用)
  52.   uint8_t    is_over_travel;             //超程标志位,0-超程,1-未超程
  53.   uint8_t    m_syn_enable;             //双机同步开启/关闭状态
  54.   uint16_t    time_count;                 //当前位置保存计时器
  55.   uint16_t   time_self_learn;            //自学习延迟计时
  56.   uint16_t    time_idle;            //电机空闲状态计时

  57.   uint8_t   ucFaultTypeHold;//故障保持标记1:有故障,0:无,bit[0]:堵转故障指示,bit[7:1]:预留

  58.     _MOTOR_RUN_MODE  m_run_target_mode;      //电机目标运行状态(来自上位机CAN报文)(应用层)


  59.     _BOTTOM_STATE          bottom_state;               //当前电机状态(接口层)



  60. }_MCC_CONTROL;

  61. typedef struct
  62. {
  63.   uint16_t    learn_s;            //自学习状态
  64.   uint16_t    fault_grade;        //故障等级
  65.   uint16_t    motor_cur_pos;         //电机当前位置
  66.   uint16_t    forward_soft_pos;    //前软挡点位置
  67.   uint16_t    backward_soft_pos;  //后软挡点位置
  68.   uint16_t    eze_ret_pos;        //一键恢复位置
  69.   uint16_t    release_ret_pos;      //一键释放恢复位置
  70.   uint16_t    mem_1_pos;        //记忆位置1
  71.   uint16_t    mem_2_pos;        //记忆位置2
  72.   uint16_t    mem_3_pos;         //记忆位置3
  73.   uint16_t    mem_4_pos;          //记忆位置4
  74.   uint16_t        motor_cur_address;  //电机位置索引
  75. }_EEPROM_INFO;

  76. _MCC_CONTROL Mcc_Control;
  77. uint16_t  m_current_speed;
  78. uint16_t EEP_MOTOR_CUR_POS_NUM;


  79. void MemCurrentPos( _MCC_CONTROL *const Mcc_Control );

  80. int main()
  81. {
  82.    
  83.     printf("请输入当前速度:");
  84.     scanf("%d",&Mcc_Control.bottom_state.m_current_speed);
  85.     printf("请输入当前计时:");
  86.     scanf("%d",&Mcc_Control.time_count);
  87.     printf("请输入当前位置:");
  88.     scanf("%d",&Mcc_Control.bottom_state.m_current_pos);
  89.     printf("请输入当前位置编号:");
  90.     scanf("%d",&EEP_MOTOR_CUR_POS_NUM);
  91.     MemCurrentPos(Mcc_Control);
  92.    
  93.     while(1);
  94.     return 0;
  95. }

  96. void MemCurrentPos( _MCC_CONTROL *const Mcc_Control )
  97. {
  98.     static uint16_t EEP_MOTOR_LAST_POS_NUM;
  99.   //当电机停下来后进行
  100.   if( Mcc_Control->bottom_state.m_current_speed != 0 )
  101.   {
  102.     Mcc_Control->time_count = 0;
  103.    
  104.     ///
  105.     printf("速度不为0,不记忆了,退出喽");
  106.     return;
  107.   }
  108.   else
  109.   {
  110.     //开始进行计时
  111.     Mcc_Control->time_count ++;
  112.     //3s记录一次当前位置
  113.     if( (Mcc_Control->time_count) < 600)
  114.     {
  115.         printf("间隔太短,无需记忆");
  116.       return;
  117.     }
  118.     //时间到达
  119.     else
  120.     {

  121.       Mcc_Control->time_count = 0;
  122.       //读取当前EEPROM保存的位置
  123.       uint16_t eep_info_cur_pos = EEP_INFO_CUR_POS;
  124.       //当前位置和EEPROM位置不一致
  125.       if( Mcc_Control->bottom_state.m_current_pos != eep_info_cur_pos )
  126.       {

  127.         if(20U <= EEP_MOTOR_CUR_POS_NUM)
  128.         {
  129.           EEP_MOTOR_CUR_POS_NUM = EEP_MOTOR_CUR_POS_INIT_NUM;
  130.           printf("重定义初始位置");
  131.          
  132.         }

  133.         eep_info_cur_pos = Mcc_Control->bottom_state.m_current_pos;
  134.       
  135.       }
  136.       //位置相同
  137.       else
  138.       {
  139.         //do nothing
  140.       }
  141.       if(EEP_MOTOR_LAST_POS_NUM != EEP_MOTOR_CUR_POS_NUM)
  142.       {


  143.         EEP_MOTOR_LAST_POS_NUM = EEP_MOTOR_CUR_POS_NUM;
  144.       }
  145.     }
  146.   }
  147. }






复制代码

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

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表