global(8024).c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /* includes ----------------------------------------------------------*/
  2. #include "global.h"
  3. /* typedef -----------------------------------------------------------*/
  4. /* define ------------------------------------------------------------*/
  5. /* macro -------------------------------------------------------------*/
  6. /* variables ---------------------------------------------------------*/
  7. global_par s_global_par;
  8. /* function prototypes -----------------------------------------------*/
  9. /**
  10. * @brief 中控板初始化
  11. * @param p_param_boot : 参数区指针
  12. * @param p_rs485RecDate:485接收数据区的指针
  13. * @note NONE
  14. * @retval 无
  15. */
  16. void centralCtrSys_Init(param_boot *p_param_boot, global_par *p_global_par){
  17. static uint16_t timeOutCnt = 0; // 超时计数
  18. uint8_t recBack = 0;
  19. uint16_t timeOutNum = 60000;
  20. rs485RecDate *p_rs485RecDate = &s_rs485RecDate;
  21. // 1. 从flash中读出VIN
  22. Read_ParamArea(); // 读出参数区的所有数据
  23. // 2. 与车通信获取vin数据(读取所有寄存器的值)
  24. modbus_read_holding_registers(0x01, 0x0000, 67);
  25. while(s_comData.vinRecSuccess != 1){
  26. if(timeOutCnt < timeOutNum){
  27. timeOutCnt++;
  28. }else{
  29. timeOutCnt = timeOutNum;
  30. break; // 未成功获取到车辆数据
  31. }
  32. }
  33. // 3. vin码比对
  34. if(s_comData.vinRecSuccess == 1){ // 成功获取到车辆数据
  35. if(memcmp(p_param_boot->vin, p_rs485RecDate->VIN, 26) != 0){ // 比对不成功
  36. // 备份新的VIN码
  37. memcpy(p_param_boot->vin, p_rs485RecDate->VIN, 26);
  38. Write_paramArea();
  39. // 置位中控板迁移事件
  40. BIT_SET(p_global_par->ctrEvent, CtrlPanelMigration);
  41. }
  42. }
  43. // 4. 初始化4g模块 4g模块在这里不好处理 放在任务中,围栏数据也一样
  44. // 5. 读取96位(或者说是3个32位的字)的唯一ID
  45. GetUniqueID(s_messageDate.devId);
  46. // 6. 陀螺仪的初始化
  47. recBack = atk_ms6050_init();
  48. if(recBack != 0){
  49. printf("ATK-MS6050 init failed!\r\n");
  50. BIT_SET(s_comData.Malfunction, gyroscope); // 置位陀螺仪数据异常故障
  51. }
  52. printf("ATK-MS6050 init\r\n");
  53. recBack = atk_ms6050_dmp_init();
  54. if(recBack != 0){
  55. printf("ATK-MS6050 DMP init failed!\r\n");
  56. BIT_SET(s_comData.Malfunction, gyroscope); // 置位陀螺仪数据异常故障
  57. }
  58. printf("ATK-MS6050 DMP init!\r\n");
  59. }