Commit 5cccc6b1 authored by 高士达's avatar 高士达

Merge branch 'gaoshida' into 'dev'

Gaoshida

See merge request !7
parents ef86c91d 829e80c3
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "Services_Mileage_User.h" #include "Services_Mileage_User.h"
#include "U2_app_Service.h" #include "U2_app_Service.h"
#include "System_Monitor.h" #include "System_Monitor.h"
#include "Services_Mileage.h"
#include "Flash_synchronizer.h" #include "Flash_synchronizer.h"
...@@ -373,7 +374,7 @@ SEND_FAULT_END: ...@@ -373,7 +374,7 @@ SEND_FAULT_END:
CopyData[6] = temp32>>8; CopyData[6] = temp32>>8;
CopyData[7] = temp32&0xff; CopyData[7] = temp32&0xff;
} }
extern uint8_t ModfyODORemainTimes; /* extern uint8_t ModfyODORemainTimes; */
void Can_Set_Buff_522(uint8_t CopyData[]) void Can_Set_Buff_522(uint8_t CopyData[])
{ {
uint32_t temp32 = 0; uint32_t temp32 = 0;
...@@ -400,7 +401,7 @@ void Can_Set_Buff_522(uint8_t CopyData[]) ...@@ -400,7 +401,7 @@ void Can_Set_Buff_522(uint8_t CopyData[])
CopyData[3] <<= 4; CopyData[3] <<= 4;
CopyData[3] |= (temp32%10); CopyData[3] |= (temp32%10);
CopyData[4] |= ModfyODORemainTimes&0x0f; /* CopyData[4] |= ModfyODORemainTimes&0x0f; */
temp16 = Common_Get_Disp_V_Speed(); temp16 = Common_Get_Disp_V_Speed();
if(temp16>1990) temp16=1990; if(temp16>1990) temp16=1990;
temp16 /= 10; temp16 /= 10;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#include "tim4.h" #include "tim4.h"
#include "MCU_Core_Protocol.h" #include "MCU_Core_Protocol.h"
#include "CAN_Communication_Matrix.h" #include "CAN_Communication_Matrix.h"
#include "SEG_LCD.h"
//static uint16_t VehSpeedBuf[3]; //static uint16_t VehSpeedBuf[3];
//static uint8_t VehSpeedCount; //static uint8_t VehSpeedCount;
......
#include "Services_Mileage_User.h"
#include "Common_Interface.h"
#include "eepromManage.h"
#include "Menus.h"
#include "CAN_Communication_Matrix.h"
#include "wdt.h"
uint32_t TotalODOTemp = 0;
uint16_t ODORemainder = 0;
Mileage_t g_WriteMileage __attribute__ ((aligned (4)));
Mileage_t g_ReadMileage __attribute__ ((aligned (4)));
uint8_t SaveODOValid = 0;
uint16_t odoVaild = 0;
uint8_t ModfyODORemainTimes = 0;
uint16_t ModfyODOTimeDelay_ms = 0;
#define EEPROM_BLOCK_00 0 //用来储存总计清零次数
#define EEPROM_BLOCK_01 16
#define EEPROM_BLOCK_02 32
#define EEPROM_BLOCK_03 48
#define EEPROM_BLOCK_04 64
#define EEPROM_BLOCK_05 80
void Mileage_Delay_ms(uint32_t u32Ms)
{
uint32_t i, Counter;
for(Counter = 0; Counter < u32Ms; Counter++) {
for(i = 0; i < 44; i++) {
__NOP();
__NOP();
__NOP();
}
WDT_Restart();
}
}
void CalcODOKL30Init(void)
{
odoVaild = eeprom_ReadODO(&g_ReadMileage);
if(g_ReadMileage.Odo>= g_WriteMileage.Odo)
{
g_WriteMileage.Odo = g_ReadMileage.Odo;
}
if(g_ReadMileage.Trip>= g_WriteMileage.Trip)
{
g_WriteMileage.Trip = g_ReadMileage.Trip;
}
if(g_ReadMileage.Trip1>= g_WriteMileage.Trip1)
{
g_WriteMileage.Trip1 = g_ReadMileage.Trip1;
}
eeprom_ReadRecord(EEPROM_BLOCK_00,(uint8_t*)&ModfyODORemainTimes,1);
if(ModfyODORemainTimes == 0xff){
ModfyODORemainTimes = 3;
}
}
void CalcODOKL15Init(void)
{
SaveODOValid = 1;
}
void CalcODOIgnOffInit(void)
{
SaveODOValid = 1;
}
//=======================================
//+++++++50ms任务调度+++++++++++++++++
//
//根据车速计算里程数
//=======================================
void CalcODO_50ms_Services(void)
{
uint32_t mVspeed=0;
if(Common_Get_IG_Sts() == COMMON_POWER_OFF){
return;
}
mVspeed = Common_Get_Act_V_Speed();
if(mVspeed > 3600){
mVspeed = 3600;
}
TotalODOTemp += (mVspeed * 25) / 18; //50ms cycle
/*取余数*/
ODORemainder += (mVspeed * 25) % 18;
if(ODORemainder >= 18 )
{
ODORemainder -= 18;
TotalODOTemp ++;
}
if (TotalODOTemp > 10000)
{
TotalODOTemp -= 10000;
g_WriteMileage.Odo += 10;
if ((g_WriteMileage.Odo % 100) == 0)
{
SaveODOValid = 1;
}
g_WriteMileage.Trip += 10;
g_WriteMileage.Trip1 += 10;
if(Get_Unit_Setting() == Metric){
if (g_WriteMileage.Trip > 999999) { //999km999m
g_WriteMileage.Trip = 0;
}
if (g_WriteMileage.Trip1 > 999999) { //999km999m
g_WriteMileage.Trip1 = 0;
}
}
if(Get_Unit_Setting() == Imperial){
if (g_WriteMileage.Trip > 1609343) { //999mile999
g_WriteMileage.Trip = 0;
}
if (g_WriteMileage.Trip1 > 1609343) { //999mile999
g_WriteMileage.Trip1 = 0;
}
}
if (g_WriteMileage.Odo > 1609343999) { //999999mile
g_WriteMileage.Odo = 1609343999;
}
}
}
void CalcODO_100ms_Services(void)
{
uint8_t PwSts = 0;
uint32_t temp32 = 0;
static uint8_t clearEnFlag = 0;
static uint8_t TripClearCommandBak = 0;
if(odoVaild == 0)
{
/* qitiancun 防止上电读取失败 */
odoVaild = eeprom_ReadODO(&g_ReadMileage);
if(g_ReadMileage.Odo >= g_WriteMileage.Odo)
{
g_WriteMileage.Odo = g_ReadMileage.Odo;
}
if(g_ReadMileage.Trip>= g_WriteMileage.Trip)
{
g_WriteMileage.Trip = g_ReadMileage.Trip;
}
if(g_ReadMileage.Trip1>= g_WriteMileage.Trip1)
{
g_WriteMileage.Trip1 = g_ReadMileage.Trip1;
}
}
if (SaveODOValid) {
SaveODOValid = 0;
if(Common_Get_IG_Sts() == COMMON_POWER_ON) {
PwSts = 1;
}
else {
PwSts = 0;
}
eeprom_WriteODO( &g_WriteMileage , distance_100m , PwSts);
}
//厂家清大计,
//200km ODO以内,可以清除总里程,ODO可以改大,不能改小。
//两者共享次数为3次,仪表两次里程操作响应间隔时间为10s。触发后连发3次。
if(ModfyODOTimeDelay_ms >= 100){
ModfyODOTimeDelay_ms -= 100;
}
else{
if(ModfyODORemainTimes){
//0x01= 清零总里程(小于200km)
if((Get_ID_55C_Sig_ModifyODOSts() == 1) && (g_WriteMileage.Odo) && (g_WriteMileage.Odo < 200000)){
ModfyODOTimeDelay_ms = 10000;
g_WriteMileage.Odo = 0u;
g_WriteMileage.Trip = 0;
g_WriteMileage.Trip1 = 0;
TotalODOTemp = 0;
ModfyODORemainTimes--;
eeprom_ClearOdoSection();
Mileage_Delay_ms(40);
eeprom_WriteRecord(EEPROM_BLOCK_00,(uint8_t*)&ModfyODORemainTimes,1);
}
//0x02= 设置总里程(只能改大,改小不响应)
temp32 = Get_ID_55C_Sig_ModifyODOValue();
temp32 *= 100;
if((Get_ID_55C_Sig_ModifyODOSts() == 2) && (g_WriteMileage.Odo < temp32)){
ModfyODOTimeDelay_ms = 10000;
g_WriteMileage.Trip = 0;
g_WriteMileage.Trip1 = 0;
TotalODOTemp = 0;
ModfyODORemainTimes--;
for(uint32_t i=0; i<20; i++){
if(temp32 > i*100){
g_WriteMileage.Odo = temp32-((19-i)*100);
}
else{
g_WriteMileage.Odo = 0;
}
eeprom_WriteODO( &g_WriteMileage , distance_100m , 1);
Mileage_Delay_ms(20);
}
eeprom_WriteRecord(EEPROM_BLOCK_00,(uint8_t*)&ModfyODORemainTimes,1);
}
}
}
//TBOX控制清小计
temp32 = Get_ID_55C_Sig_ClearTrip();
//一定要判断数据发生变化再清一次,避免频繁写EEPROM
if((temp32 == 0) || (temp32 != TripClearCommandBak)){
clearEnFlag = 1;
}
if(clearEnFlag){
if(temp32 == 0x01){ //清零TRIPA
Data_Clear_Trip ( EM_TRIP_A );
clearEnFlag = 0;
}
else if(temp32 == 0x02){ //清零TRIPB
Data_Clear_Trip ( EM_TRIP_B );
clearEnFlag = 0;
}
else if(temp32 == 0x03){ //全部清零
Data_Clear_Trip ( EM_TRIP_A );
Data_Clear_Trip ( EM_TRIP_B );
clearEnFlag = 0;
}
}
TripClearCommandBak = temp32;
}
uint32_t Data_Read_Trip(DataTripEnum_t TripN)
{
uint32_t temp32 = 0;
if(TripN == EM_TRIP_A){
temp32 = g_WriteMileage.Trip;
}
else if(TripN == EM_TRIP_B){
temp32 = g_WriteMileage.Trip1;
}
return temp32;
}
uint32_t Data_ODO_Read ( void )
{
return g_WriteMileage.Odo;
}
void Data_Clear_Trip ( DataTripEnum_t TripN )
{
if(TripN == EM_TRIP_A){
g_WriteMileage.Trip = 0u;
g_WriteMileage.IsTripClear = 1;
}
else if(TripN == EM_TRIP_B){
g_WriteMileage.Trip1 = 0u;
g_WriteMileage.IsTrip1Clear = 1;
}
SaveODOValid = 1;
}
void Data_Mileage_Clear(void)
{
/*产线 清大计和flash校验使用*/
g_WriteMileage.Odo = 0u;
g_WriteMileage.Trip = 0;
g_WriteMileage.Trip1 = 0;
TotalODOTemp = 0;
ModfyODORemainTimes = 3;
eeprom_ClearOdoSection();
Mileage_Delay_ms(40);
eeprom_WriteRecord(EEPROM_BLOCK_00,(uint8_t*)&ModfyODORemainTimes,1);
}
#ifndef __SERVICE_MILEAGE_USER_H__
#define __SERVICE_MILEAGE_USER_H__
#include "common.h"
typedef unsigned char ee_uint8_t;
typedef unsigned short ee_uint16_t;
typedef unsigned int ee_uint32_t;
typedef enum
{
EM_TRIP_A,
EM_TRIP_B,
EM_TRIP_MAX,
} DataTripEnum_t;
void CalcODO_50ms_Services(void);
void CalcODO_100ms_Services(void);
void CalcODOKL30Init(void);
void CalcODOKL15Init(void);
void CalcODOIgnOffInit(void);
uint32_t Data_ODO_Read ( void );
uint32_t Data_Read_Trip(DataTripEnum_t TripN);
void Data_Clear_Trip ( DataTripEnum_t TripN );
void Data_Mileage_Clear(void);
#endif
#ifndef GUI_LCD_DIS_H
#define GUI_LCD_DIS_H
#endif
\ No newline at end of file
#ifndef _GUI_SEG_DIS_H_
#define _GUI_SEG_DIS_H_
#include "BU98R10.h"
#endif
#ifndef _GAUGES_H_ #ifndef _GAUGES_H_
#define _GAUGES_H_ #define _GAUGES_H_
#include "SEG_LCD.h"
#include "Common_Interface.h" #include "Common_Interface.h"
/****************************************************************************** /******************************************************************************
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include "CalcFrequency.h" #include "CalcFrequency.h"
#include "CAN_Communication_Matrix.h" #include "CAN_Communication_Matrix.h"
#include "Flash_synchronizer.h" #include "Flash_synchronizer.h"
#include "Services_Mileage.h"
uint8_t MenuByte6 = 0; uint8_t MenuByte6 = 0;
uint8_t MenuByte7 = 0; uint8_t MenuByte7 = 0;
uint8_t MenuByte8 = 0; uint8_t MenuByte8 = 0;
......
This diff is collapsed.
#include "Services_Mileage_User.h"
#include "Services_Mileage.h"
#include "eepromManage.h"
#include <string.h>
#include "Common_Interface.h"
#include "Services_Mileage.h"
uint8_t DataMilleageBuf [ Data_MEM_Block_Mileage ];
uint8_t DataODOBuf [ Data_MEM_Block_ODO ];
uint8_t DataTripBuf [ Data_MEM_Block_Trip * EM_TRIP_MAX ];
Mileage_t g_WriteMileage;
Mileage_t g_ReadMileage;
uint8_t odo_writeState;
uint8_t odo_readState;
static uint32_t Data_User_EEPROM_Read(uint16_t u16BlockID, uint32_t u32Data [], uint16_t u16Len);
static void Data_User_EEPROM_Write(Data_EEPROM_Enum_t BlockID, uint32_t u32Data [], uint16_t u16Len);
#define EEPROM_BLOCK_00 0X00
#define EEPROM_BLOCK_01 0X16
#define EEPROM_BLOCK_02 0X32
#define EEPROM_BLOCK_03 0X48
#define EEPROM_BLOCK_04 0X64
#define EEPROM_BLOCK_05 0X80
#define EEPROM_BLOCK_06 0X90
uint32_t Milleage_InitFlag = 0U;
uint32_t RiskStop_Flag = 0u;
uint8_t ChangAn_ODOClear_Sts;
uint8_t ChangAn_ODOClear_Timer;
uint8_t ChangAn_ODOClear;
/******************************************************************************
Function:Data_ODO_KL30Init
Description:
Input:
Output:
******************************************************************************/
void Data_User_Mileage_KL30Init(void)
{
uint32_t TempBuf [ 8 ] = {0};
Mileage_Init_t MileInit = {0};
Mileage_Func_t Func = {0};
ODO_Init_t ODOInit = {0};
EngODO_Init_t EngODOInit = {0};
Trip_Init_t TripInit [ 4 ] = {0};
Milleage_InitFlag = 0U;
//�������ݴ�EEPROM�ж�ȡ
( void )Data_User_EEPROM_Read(EM_MILEAGE_BLOCK, TempBuf, 1);
if ( TempBuf [ 0 ] == 0xFFFFFFFF )
{
MileInit.Mileage = 0u;
}
else
{
MileInit.Mileage = TempBuf [ 0 ];
}
Func.Get_Sys_IG_Sts = Common_Get_IG_Sts;
Func.Get_Act_V_Speed_Valid = Common_Get_Act_V_Speed_Valid;
Func.Get_Act_V_Speed = Common_Get_Act_V_Speed;
Func.Get_TireSize = ( void *)0;
Func.EEPromWrite_Cbk = Data_User_EEPROM_Write; //��ʱδ����
Data_Mileage_KL30_Init(DataMilleageBuf, &MileInit, &Func);
( void )Data_User_EEPROM_Read(EM_ODO_BLOCK, TempBuf + 1, 2);
if ( TempBuf [ 1 ] == 0xFFFFFFFF )
{
ODOInit.Stamp = 0;
}
else
{
ODOInit.Stamp = TempBuf [ 1 ];
}
if ( TempBuf [ 1 ] == 0xFFFFFFFF )
{
ODOInit.Offset = 0;
}
else
{
ODOInit.Offset = TempBuf [ 2 ];
}
ODOInit.MaxValue = 9999999;
Data_ODO_KL30_Init(DataODOBuf, &ODOInit, Func.EEPromWrite_Cbk);
( void )Data_User_EEPROM_Read(EM_TRIP_BLOCK, TempBuf + 3, 4);
TripInit [ EM_TRIP_A ].Stamp = 0xFFFFFFFFu;
TripInit [ EM_TRIP_A ].MaxValue = 99999;
TripInit [ EM_TRIP_A ].IsRestart = 1u;
TripInit [ EM_TRIP_B ].Stamp = 0xFFFFFFFFu;
TripInit [ EM_TRIP_B ].MaxValue = 99999;
TripInit [ EM_TRIP_B ].IsRestart = 1u;
TripInit [ EM_TRIP_C ].Stamp = 0xFFFFFFFFu;
TripInit [ EM_TRIP_C ].MaxValue = 99999;
TripInit [ EM_TRIP_C ].IsRestart = 1u;
TripInit [ EM_TRIP_D ].Stamp = 0xFFFFFFFFu;
TripInit [ EM_TRIP_D ].MaxValue = 99999;
TripInit [ EM_TRIP_D ].IsRestart = 1u;
Data_Trip_KL30_Init(DataTripBuf, TripInit, EM_TRIP_MAX, Func.EEPromWrite_Cbk);
Milleage_InitFlag = 0X5AA53AA3UL;
RiskStop_Flag = 0;
ChangAn_ODOClear_Sts = 0xAA;
ChangAn_ODOClear_Timer = 0;
}
void Data_User_Mileage_WakeupInit(void)
{
Mileage_Func_t Func = {0};
Milleage_InitFlag = 0U;
Func.Get_Sys_IG_Sts = Common_Get_IG_Sts;
Func.Get_Act_V_Speed_Valid = Common_Get_Act_V_Speed_Valid;
Func.Get_Act_V_Speed = Common_Get_Act_V_Speed;
Func.Get_TireSize = ( void *)0;
Func.EEPromWrite_Cbk = Data_User_EEPROM_Write; //��ʱδ����
Data_Mileage_Wakeup_Init(DataMilleageBuf, &Func);
Data_ODO_Wakeup_Init(DataODOBuf, Func.EEPromWrite_Cbk);
Data_Trip_Wakeup_Init(DataTripBuf, EM_TRIP_MAX, Func.EEPromWrite_Cbk);
Milleage_InitFlag = 0X5AA53AA3UL;
RiskStop_Flag = 0;
}
uint32_t Get_MileageInit_Status(void)
{
return Milleage_InitFlag;
}
static uint32_t Data_User_EEPROM_Read(uint16_t u16BlockID, uint32_t u32Data [], uint16_t u16Len)
{
switch ( u16BlockID )
{
case EM_MILEAGE_BLOCK:
odo_readState = eeprom_ReadODO(&g_ReadMileage);
u32Data [ 0 ] = g_ReadMileage.Odo;
// g_EngineRunMileage = g_ReadMileage.Trip;
// eeprom_ReadRecord(EEPROM_BLOCK_00, ( uint8_t * )u32Data, u16Len * 4);
break;
case EM_ODO_BLOCK:
eeprom_ReadRecord(EEPROM_BLOCK_01, ( uint8_t * )u32Data, u16Len * 4);
break;
case EM_TRIP_BLOCK:
eeprom_ReadRecord(EEPROM_BLOCK_03, ( uint8_t * )u32Data, u16Len * 4);
break;
default:
break;
}
return 0;
}
static void Data_User_EEPROM_Write(Data_EEPROM_Enum_t BlockID, uint32_t u32Data [], uint16_t u16Len)
{
uint8_t i = 0u;
switch ( BlockID )
{
case EM_MILEAGE_BLOCK:
if ( u32Data [ 0 ] == 0 )
{
eeprom_ClearOdoSection( );
}
else
{
g_WriteMileage.Odo = u32Data [ 0 ];
// g_WriteMileage.Trip = 0;
g_WriteMileage.IsTripClear = 0;
// g_WriteMileage.Trip = g_EngineRunMileage;
odo_writeState = WRITE_FAIL;
if(g_WriteMileage.Odo % 10 == 0)
{
while(odo_writeState != WRITE_COMPLETE)
{
odo_writeState = eeprom_WriteODO(&g_WriteMileage, distance_100m, 1);
i++;
if(i > 10)
{
break;
}
}
}
}
// eeprom_WriteRecord(EEPROM_BLOCK_00, ( uint8_t * )u32Data, u16Len * 4);
break;
case EM_ODO_BLOCK:
eeprom_WriteRecord(EEPROM_BLOCK_01, ( uint8_t * )u32Data, u16Len * 4);
break;
case EM_TRIP_BLOCK:
eeprom_WriteRecord(EEPROM_BLOCK_03, ( uint8_t * )u32Data, u16Len * 4);
break;
default:
break;
}
}
void Services_Mileage_Callback(void)
{
Data_Mileage_ISR( );
}
#ifndef __SERVICE_ODO_USER_H__
#define __SERVICE_ODO_USER_H__
#include "common.h"
//#define ONLY_CLEAR_ODO_MIL 0x01u /*仅根据距离信息进行ODO清除*/
//#define ONLY_CLEAR_ODO_NUM 0x01u /*仅根据次数信息进行ODO清除*/
#define CLEAR_ODO_NUM_MIL 0x01u /*以距离信息以及次数信息进行ODO清除*/
#define ODO_CLEAR_NUM 5u /*清除次数上限值 */
#define ODO_CLEAR_MIL 50000u /*清除距离上限值 单位0.1KM*/
extern uint8_t ODO_Clear_Num_Value;
void Data_User_Mileage_KL30Init(void);
void Data_User_Mileage_WakeupInit(void);
void Services_Mileage_Callback(void);
uint32_t Get_MileageInit_Status(void);
#endif
...@@ -25,12 +25,12 @@ ...@@ -25,12 +25,12 @@
#include "U2_uds_includes.h" #include "U2_uds_includes.h"
#include "CAN_User.h" #include "CAN_User.h"
#include "BU98R10.h" #include "BU98R10.h"
#include "SEG_LCD.h"
#include "can.h" #include "can.h"
#include "RTE_ADC.h" #include "RTE_ADC.h"
#include "IS31FL3236.h" #include "IS31FL3236.h"
#include "AW93015.h" #include "AW93015.h"
#include "Services_Mileage.h"
uint16_t g_sleepDelay = 0; uint16_t g_sleepDelay = 0;
...@@ -44,11 +44,14 @@ void Power_KL30_Init ( void ) ...@@ -44,11 +44,14 @@ void Power_KL30_Init ( void )
Fuel_KL30_Init(); Fuel_KL30_Init();
CoolantTemp_KL30_Init(); CoolantTemp_KL30_Init();
// eeprom_StoreInfo_Init( ); // eeprom_StoreInfo_Init( );
// CalcODOKL30Init();
Data_Gear_KL30_Init(); Data_Gear_KL30_Init();
//APP_CAN_Init(); //APP_CAN_Init();
//SEG_LCD_Init(); //SEG_LCD_Init();
BU98R10_Init();
MenuKL30Init(); MenuKL30Init();
Data_User_Mileage_KL30Init();
} }
...@@ -61,9 +64,11 @@ void Power_Sleep_Init(void) ...@@ -61,9 +64,11 @@ void Power_Sleep_Init(void)
Capture_Stop(39); Capture_Stop(39);
Capture_Stop(40); Capture_Stop(40);
Analog_Signal_Conv_Stop(); Analog_Signal_Conv_Stop();
SEG_LCD_Shutdown();
IS31_Shutdown(); IS31_Shutdown();
BU98R10_Shutdown();
GPIO_Init(GPIO_SLEEP_MODE ); GPIO_Init(GPIO_SLEEP_MODE );
INTC_DisableIRQ(LVI_IRQn ); INTC_DisableIRQ(LVI_IRQn );
INTC_DisableIRQ(INTP0_IRQn ); INTC_DisableIRQ(INTP0_IRQn );
...@@ -200,9 +205,10 @@ void Power_Wakeup_Init ( void ) ...@@ -200,9 +205,10 @@ void Power_Wakeup_Init ( void )
IS31_OFF_Wakeup(); IS31_OFF_Wakeup();
IS31FL3236_Update(); IS31FL3236_Update();
Init93015_IIC();//4034 Init93015_IIC();//4034
BU98R10_Init();
APP_CAN_Init(); APP_CAN_Init();
IS31FL3236_Init(); IS31FL3236_Init();
Data_User_Mileage_WakeupInit();
} }
...@@ -210,13 +216,6 @@ void Power_Wakeup_Init ( void ) ...@@ -210,13 +216,6 @@ void Power_Wakeup_Init ( void )
void Power_IG_OFF_Init(void) void Power_IG_OFF_Init(void)
{ {
SEG_LCD_Vehicle_Speed_Num_Display(0, 0, 0);
SEG_LCD_Engine_Speed_Seg_Display(0, 0, 0);
SEG_LCD_ODO_Trip_Display(0, 0, 0, 0);
SEG_Fuel_Level_Display(0, 0);
SEG_LCD_Battery_Voltage_Display(0, 0 ,0);
SEG_LCD_Gear_Display(0, 0, 0);
SEG_Coolant_Temp_Display(0, 0);
Line_In_KL15_OFF_Init(); Line_In_KL15_OFF_Init();
Common_Set_IG_Sts(COMMON_POWER_OFF); Common_Set_IG_Sts(COMMON_POWER_OFF);
...@@ -246,16 +245,15 @@ void Power_IG_ON_Init(void) ...@@ -246,16 +245,15 @@ void Power_IG_ON_Init(void)
uart2_User_KL15_Init(); uart2_User_KL15_Init();
CalcFreq_KL15_Init(); CalcFreq_KL15_Init();
APP_CAN_Init(); APP_CAN_Init();
CalcODOKL15Init();
Common_Set_IG_Sts(COMMON_POWER_ON); Common_Set_IG_Sts(COMMON_POWER_ON);
// UART2_Init(115200); // UART2_Init(115200);
SEG_LCD_Init();
//IS31FL3236_Init(); //IS31FL3236_Init();
Init93015_IIC(); // 4034 Init93015_IIC(); // 4034
DtcFaultInit(); DtcFaultInit();
/*----------------------------------------*/ /*----------------------------------------*/
BatteryVoltageDelayInit(); BatteryVoltageDelayInit();
Set_SEG_Check_Contrl(0);
} }
void Power_IG_OVP_Init(void) void Power_IG_OVP_Init(void)
{ {
......
...@@ -25,36 +25,6 @@ typedef enum ...@@ -25,36 +25,6 @@ typedef enum
} LED_Idx_t; } LED_Idx_t;
uint16_t LED_RIGHT_Judgement(void);
void LED_RIGHT_Execution(uint16_t led_status);
uint16_t LED_LEFT_Judgement(void);
void LED_LEFT_Execution(uint16_t led_status);
uint16_t LED_HI_BEAM_Judgement(void);
void LED_HI_BEAM_Execution(uint16_t led_status);
uint16_t LED_MIL_Judgement(void);
void LED_MIL_Execution(uint16_t led_status);
uint16_t LED_ABS_Judgement(void);
void LED_ABS_Execution(uint16_t led_status);
uint16_t LED_TSC_Judgement(void);
void LED_TSC_Execution(uint16_t led_status);
uint16_t LED_AutoStarStop_Judgement(void);
void LED_AutoStarStop_Execution(uint16_t led_status);
uint16_t LED_Batterylow_Judgement(void);
void LED_Batterylow_Execution(uint16_t led_status);
uint16_t LED_Auto_HI_BEAM_Judgement(void);
void LED_Auto_HI_BEAM_Execution(uint16_t led_status);
uint16_t LED_Shore_Judgement(void);
void LED_Shore_Execution(uint16_t led_status);
uint16_t LED_ENGINE_OIL_LOW_Judgement(void);
void LED_ENGINE_OIL_LOW_Execution(uint16_t led_status);
uint16_t LED_TPMS_Judgement(void);
void LED_TPMS_Execution(uint16_t led_status);
uint16_t LED_READY_Judgement(void);
void LED_READY_Execution(uint16_t led_status);
uint16_t LED_Fuel_Judgement(void);
void LED_Fuel_Execution(uint16_t led_status);
uint16_t LED_Temp_Judgement(void);
void LED_Temp_Execution(uint16_t led_status);
......
#ifndef _SEG_LCD_H_
#define _SEG_LCD_H_
#include "BU98R10.H"
/******************************************************************************
段码状态
******************************************************************************/
#define SEG_LCD_LIGHT 7
#define SEG_LCD_GRAY 1
#define SEG_LCD_GRAY_2 2
#define SEG_LCD_OFF 0
#define SEG_LCD_ON 255
/******************************************************************************
显示模式
******************************************************************************/
#define GUI_DISP_MODE_NORMAL 0x00 //正常
#define GUI_DISP_MODE_WARNING 0x01 //报警
#define GUI_DISP_MODE_NEGATIVE 0x01 //负数
#define GUI_DISP_MODE_BLANK 0x02 //空白
#define GUI_DISP_MODE_INVALID 0x03 //无效
/******************************************************************************
段码液晶显示数据备份结构
******************************************************************************/
typedef struct
{
uint8_t Brightness;
uint8_t Window;
uint8_t SetMode;
uint8_t VSpeedSeg;
uint8_t ESpeedSeg;
uint16_t VSpeed;
uint16_t ESpeed;
uint16_t Voltage;
uint8_t VolCANset;
uint8_t Gear;
uint8_t TempSeg;
uint8_t FuelSeg;
uint8_t ODOMode;
uint32_t ODOMileage;
uint8_t ODOUnit;
uint32_t ODOFaultCode;
}SEGLCDBackupStruct;
/******************************************************************************
图标状态寄存器SEGLCDIconxxxStatus位定义
================================================================
Bit 7 | SEG_LCD_ICON_FORCE | 强制显示标志
-------+-------------------------+------------------------------
Bit 6 | Rsvd. | 保留
-------+-------------------------+------------------------------
Bit 5 | Rsvd. | 保留
-------+-------------------------+------------------------------
Bit 4 | Rsvd. | 保留
-------+-------------------------+------------------------------
Bit 3 | Rsvd. | 保留
-------+-------------------------+------------------------------
Bit 2 | Rsvd. | 保留
-------+-------------------------+------------------------------
Bit 1 | SEG_LCD_ICON_FORCE_STAT | 强制显示状态 1-强制点亮 0-强制熄灭
-------+-------------------------+------------------------------
Bit 0 | SEG_LCD_ICON_STAT | 显示状态 1-点亮 0-熄灭
================================================================
******************************************************************************/
#define SEG_LCD_ICON_FORCE ((uint8_t)0x80)
#define SEG_LCD_ICON_FORCE_STAT ((uint8_t)0x02)
#define SEG_LCD_ICON_STAT ((uint8_t)0x01)
#define Clr_Bit(p, b) (p) &= (~(1u << (b)))
#define Set_Bit(p, b) (p) |= (1u << (b))
#define Bit_Is_Set(p, b) ((p) &(1u << (b)))
#define Bit_Is_Clr(p, b) (!((p) & (1u << (b))))
/******************************************************************************
Icon开关状态
******************************************************************************/
typedef enum
{
SEG_LCD_ICON_OFF = 0, //熄灭图标
SEG_LCD_ICON_ON, //点亮图标
SEG_LCD_ICON_FORCE_OFF, //强制熄灭图标,通过 SEG_LCD_ICON_OFF / SEG_LCD_ICON_ON 状态不能控制图标熄灭或点亮
SEG_LCD_ICON_FORCE_ON, //强制点亮图标,通过 SEG_LCD_ICON_OFF / SEG_LCD_ICON_ON 状态不能控制图标熄灭或点亮
SEG_LCD_ICON_FREE, //取消对图标的强制熄灭或点亮,将图标交由 SEG_LCD_ICON_OFF / SEG_LCD_ICON_ON 状态控制
}SEGLCDIconStatusEnum;
/**********************************************************************************
全局变量
***********************************************************************************/
extern SEGLCDBackupStruct SEGLCDBackup;
/******************************************************************************
函数声明
******************************************************************************/
void SEG_LCD_Init(void);
void SEG_LCD_Shutdown(void);
void SEG_LCD_Gear_Display(uint8_t m_Flag, uint8_t SegNum, uint8_t CanStand);
void SEG_LCD_Gear_Selftest(uint8_t Gear);
void SEG_LCD_Vehicle_Speed_Num_Display(uint8_t m_Flag, uint8_t SetMode, uint16_t Vspeed); //1:mph default:km/h
void SEG_LCD_Vehicle_Speed_Num_Selftest(uint16_t Vspeed);
void SEG_LCD_Engine_Speed_Seg_Display(uint8_t m_Flag, uint16_t SegNum, uint8_t SpeedStand);
void SEG_LCD_Engine_Speed_Seg_Selftest(uint16_t SegNum);
void SEG_LCD_ODO_Trip_Display(uint8_t m_Flag, uint8_t Mode, uint8_t Unit, uint32_t Mileage);
void SEG_LCD_FaultCode_Display(uint8_t m_Flag, uint32_t FaultCodeDisp);
void SEG_LCD_ODO_Trip_FaultCode_Selftest(uint8_t Mileage);
void SEG_LCD_BatteryErr_Display(uint8_t m_Flag, uint32_t ModeTime);
void SEG_Coolant_Temp_Display(uint8_t m_Flag, uint8_t Seg);
void SEG_Fuel_Level_Display(uint8_t m_Flag, uint8_t Seg);
void SEG_LCD_Battery_Voltage_Display(uint8_t m_Flag, uint8_t Voltage ,uint16_t VolCANset);
void SEG_LCD_Battery_Voltage_Selftest(uint8_t Voltage);
//Light
void SEG_LCD_OilPressure(uint8_t state);
void SEG_LCD_TirePressure(uint8_t state);
void SEG_LCD_READY(uint8_t state);
void SEG_LCD_ABS(uint8_t state);
void SEG_LCD_TSC(uint8_t state);
void SEG_LCD_AutoStarStop(uint8_t state);
void SEG_LCD_Batterylow(uint8_t state);
void SEG_LCD_HI_BEAM(uint8_t state);
void SEG_LCD_Shore(uint8_t state);
void SEG_LCD_OBD(uint8_t state);
void SEG_LCD_HighBeam(uint8_t state);
void SEG_LCD_LeftTurn(uint8_t state);
void SEG_LCD_RightTurn(uint8_t state);
void SEG_LCD_Fuel(uint8_t state);
void SEG_LCD_Temp(uint8_t state);
void Engine_Speed_Update(void);
#endif
#include "BU98R10.h" #include "BU98R10.h"
#include "SEG_LCD.h"
#include "IS31FL3236.h" #include "IS31FL3236.h"
/* 端口寄存器基地址 */ /* 端口寄存器基地址 */
......
This diff is collapsed.
...@@ -23,12 +23,11 @@ ...@@ -23,12 +23,11 @@
#include "clk.h" #include "clk.h"
#include "rtc.h" #include "rtc.h"
#include "can.h" #include "can.h"
#include "SEG_LCD.h"
#include "eeManager_Interface.h" #include "eeManager_Interface.h"
#include "Services_Mileage_User.h" #include "Services_Mileage_User.h"
#include "IS31_IIC_Master.h" #include "IS31_IIC_Master.h"
#include "IS31FL3236.h" #include "IS31FL3236.h"
#include "Services_Mileage.h"
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/
...@@ -101,14 +100,7 @@ void Sys_Startup_Init(void) ...@@ -101,14 +100,7 @@ void Sys_Startup_Init(void)
Simulated_IIC_2_Init(); Simulated_IIC_2_Init();
IS31FL3236_Init(); IS31FL3236_Init();
SEG_LCD_Init();
SEG_LCD_Vehicle_Speed_Num_Display(0, 0, 0);
SEG_LCD_Engine_Speed_Seg_Display(0, 0, 0);
SEG_LCD_ODO_Trip_Display(0, 0, 0, 0);
SEG_Fuel_Level_Display(0, 0);
SEG_LCD_Battery_Voltage_Display(0, 0 ,0);
SEG_LCD_Gear_Display(0, 0, 0);
Sys_Tick_Timer_Start(); Sys_Tick_Timer_Start();
...@@ -124,7 +116,7 @@ void Sys_Startup_Init(void) ...@@ -124,7 +116,7 @@ void Sys_Startup_Init(void)
Power_Management_Init(0u); Power_Management_Init(0u);
bsp_CAN_Init(); bsp_CAN_Init();
eeprom_StoreInfo_Init( ); //20221028 eeprom_StoreInfo_Init( ); //20221028
CalcODOKL30Init();
} }
......
...@@ -46,7 +46,8 @@ ...@@ -46,7 +46,8 @@
#include "IS31FL3236.h" #include "IS31FL3236.h"
#include "IS31_IIC_Master.h" #include "IS31_IIC_Master.h"
#include "app_Telltales.h" #include "app_Telltales.h"
#include "Services_Mileage.h"
#include "Gui_Seg_Dis.h"
/******************************************************************************* /*******************************************************************************
* * * *
...@@ -55,7 +56,7 @@ ...@@ -55,7 +56,7 @@
*******************************************************************************/ *******************************************************************************/
/*============================================================================== /*==============================================================================
伪实时任? 伪实时任?
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
void Sys_Run_Mode_Pseudo_Real_Time_Tasks(void) void Sys_Run_Mode_Pseudo_Real_Time_Tasks(void)
...@@ -127,14 +128,14 @@ void Sys_Run_Mode_10ms_Tasks(void) ...@@ -127,14 +128,14 @@ void Sys_Run_Mode_10ms_Tasks(void)
// Telltales_Left_Right_Management_Service(); // Telltales_Left_Right_Management_Service();
// Key_Service(); // Key_Service();
// //CAN_BUSOFF_Recover(); // //CAN_BUSOFF_Recover();
// /*车?处?*/ // /*车�?�处�?*/
// SetGaugesPara(VehGauges, VehSpeedAmplification(Cal_Veh_Val())); // SetGaugesPara(VehGauges, VehSpeedAmplification(Cal_Veh_Val()));
// /*转?处?*/ // /*转�?�处�?*/
// Common_Set_Act_E_Speed(Get_ID_CF00400_Sig_EngineSpeed() / 8); // Common_Set_Act_E_Speed(Get_ID_CF00400_Sig_EngineSpeed() / 8);
// SetGaugesPara(RevGauges, RevSpeedManage(Common_Get_Act_E_Speed())); // SetGaugesPara(RevGauges, RevSpeedManage(Common_Get_Act_E_Speed()));
// /*表头调度函数 added by yutian*/ // /*表头调度函数 added by yutian*/
// UserGaugeSchedule();/*在主循环中调?*/ // UserGaugeSchedule();/*在主循环中调?*/
// /*end*/ // /*end*/
// Sound_Play_Service(); // Sound_Play_Service();
// CD4051B_ReadSignal_Serviece(); // CD4051B_ReadSignal_Serviece();
...@@ -148,7 +149,7 @@ void Sys_Run_Mode_10ms_Tasks(void) ...@@ -148,7 +149,7 @@ void Sys_Run_Mode_10ms_Tasks(void)
//if(Common_Get_IG_Sts() == COMMON_POWER_ON) //if(Common_Get_IG_Sts() == COMMON_POWER_ON)
Data_Mileage_Write_EEPROM();
} }
/*============================================================================*/ /*============================================================================*/
...@@ -169,14 +170,14 @@ void Sys_Run_Mode_20ms_Tasks(void) ...@@ -169,14 +170,14 @@ void Sys_Run_Mode_20ms_Tasks(void)
{ {
if((Common_GetIgnOnTime() >= IGON_SelfcheckingTimer)&&(get_SEG_Check_Contrl() == 0)) if((Common_GetIgnOnTime() >= IGON_SelfcheckingTimer)&&(get_SEG_Check_Contrl() == 0))
{ {
//转?显? //转�?�显�?
SEG_LCD_Engine_Speed_Seg_Display( Common_Get_Disp_E_Speed()); SEG_LCD_Engine_Speed_Seg_Display( Common_Get_Disp_E_Speed());
} }
}*/ }*/
BU98R10_Update_Request(); BU98R10_Update_Request();
//转?表头走? //转�?�表头走�?
//Gauges_Management_Service(); //Gauges_Management_Service();
Diag_Req_Send(20); Diag_Req_Send(20);
IS31FL3236_Update(); IS31FL3236_Update();
...@@ -203,7 +204,7 @@ void Sys_Run_Mode_50ms_Tasks(void) ...@@ -203,7 +204,7 @@ void Sys_Run_Mode_50ms_Tasks(void)
Flash_Sync_Signal_Generation_Service(); Flash_Sync_Signal_Generation_Service();
if(get_SEG_Check_Contrl() == 0) CalcODO_50ms_Services();//20221117 TYW大计清零后,循环显示断码?? 停止大计/小计里程
// Data_Time_Calibration(); // Data_Time_Calibration();
// Data_Service_Gear_Processing(); // Data_Service_Gear_Processing();
...@@ -252,7 +253,7 @@ void Sys_Run_Mode_100ms_Tasks_Group1(void) ...@@ -252,7 +253,7 @@ void Sys_Run_Mode_100ms_Tasks_Group1(void)
void Sys_Run_Mode_100ms_Tasks_Group2(void) void Sys_Run_Mode_100ms_Tasks_Group2(void)
{ {
/*车转速服务函?*/ /*车转速服务函?*/
CalcFreqData(100u); CalcFreqData(100u);
/*燃油计算*/ /*燃油计算*/
...@@ -266,23 +267,50 @@ void Sys_Run_Mode_100ms_Tasks_Group3(void) ...@@ -266,23 +267,50 @@ void Sys_Run_Mode_100ms_Tasks_Group3(void)
CoolantTemp_Cal_Sevice(100u); CoolantTemp_Cal_Sevice(100u);
} }
uint8_t GSDTEST = 0;
uint32_t MileageArray[4] = {0};
void Sys_Run_Mode_100ms_Tasks_Group4(void) void Sys_Run_Mode_100ms_Tasks_Group4(void)
{ {
uint8_t i = 0;
if(GSDTEST == 1)
{
Data_Mileage_Clear_GoOn();
for(i = 0;i<90;i++)
{
BU98R10Chip0DDRAM.Byte[i] = 0X77;
BU98R10Chip1DDRAM.Byte[i] = 0X77;
}
}
else
{
for(i = 0;i<90;i++)
{
BU98R10Chip0DDRAM.Byte[i] = 0;
BU98R10Chip1DDRAM.Byte[i] = 0;
}
}
MileageArray[0] = Data_ODO_Read();
MileageArray[1] = Data_Read_Trip(EM_TRIP_A);
MileageArray[2] = Data_Mileage_Readmm();
MileageArray[3] = eeprom_getWriteState();
/*获取RTC时间*/ /*获取RTC时间*/
RTC_Service(); RTC_Service();
Data_ODO_Processing();
/*大计小计计算*/ /*大计小计计算*/
CalcODO_100ms_Services(); Services_Mileage_Callback();
} }
void Sys_Run_Mode_100ms_Tasks_Group5(void) void Sys_Run_Mode_100ms_Tasks_Group5(void)
{ {
/*挡位??*/ /*挡位�?�?*/
//Data_Service_Gear_Processing(); //Data_Service_Gear_Processing();
} }
...@@ -305,7 +333,7 @@ void Sys_Run_Mode_100ms_Tasks_Group7(void) ...@@ -305,7 +333,7 @@ void Sys_Run_Mode_100ms_Tasks_Group7(void)
//CAN_Check_Liandian(); //CAN_Check_Liandian();
ReqSilentTimer100mSService(); ReqSilentTimer100mSService();
/*MIL灯超时计?*/ /*MIL灯超时计?*/
Can_User_Time_Service(100); Can_User_Time_Service(100);
} }
...@@ -321,12 +349,12 @@ void Sys_Run_Mode_100ms_Tasks_Group8(void) ...@@ -321,12 +349,12 @@ void Sys_Run_Mode_100ms_Tasks_Group8(void)
} }
void Sys_Run_Mode_100ms_Tasks_Group9(void) void Sys_Run_Mode_100ms_Tasks_Group9(void)
{ {
/*?测断码屏数据是否异常*/ /*?测断码屏数据是否异常*/
//if(Common_GetIgnOnTime() > 1000) //if(Common_GetIgnOnTime() > 1000)
//checkSegTftState(); //checkSegTftState();
/* 临时测试程序 ?? */ /* 临时测试程序 �?�? */
// tempodo = Data_ODO_Read( ); // tempodo = Data_ODO_Read( );
// tempTripA = Data_Read_Trip(EM_TRIP_A); // tempTripA = Data_Read_Trip(EM_TRIP_A);
// tempTripB = Data_Read_Trip(EM_TRIP_B); // tempTripB = Data_Read_Trip(EM_TRIP_B);
...@@ -380,13 +408,13 @@ void Sys_Run_Mode_100ms_Tasks_Group10(void) ...@@ -380,13 +408,13 @@ void Sys_Run_Mode_100ms_Tasks_Group10(void)
// else // else
// { // {
// Conmmon_Set_MotorModeStaFlag(4u); // Conmmon_Set_MotorModeStaFlag(4u);
// /*转?电机目标步赋??*/ // /*转�?�电机目标步赋�??*/
// if (bsp_GetMotorState(0) == Normal) // if (bsp_GetMotorState(0) == Normal)
// { // {
// MeterPostion[0].destPosition = GetGaugesCurrentPos(RevGauges); // MeterPostion[0].destPosition = GetGaugesCurrentPos(RevGauges);
// } // }
// /*车?电机目标步赋??*/ // /*车�?�电机目标步赋�??*/
// if (bsp_GetMotorState(1) == Normal) // if (bsp_GetMotorState(1) == Normal)
// { // {
// MeterPostion[1].destPosition = GetGaugesCurrentPos(VehGauges); // MeterPostion[1].destPosition = GetGaugesCurrentPos(VehGauges);
...@@ -400,20 +428,20 @@ void Sys_Run_Mode_100ms_Tasks_Group10(void) ...@@ -400,20 +428,20 @@ void Sys_Run_Mode_100ms_Tasks_Group10(void)
// //BL_Management_service(); // //BL_Management_service();
// Popups_Management_Service(); // Popups_Management_Service();
// Popup_Scheduling_Service(); // Popup_Scheduling_Service();
// /*综合油?信?*/ // /*综合油�?�信�?*/
// Data_FuelCounsComprehensive(); // Data_FuelCounsComprehensive();
// /*小计油?信?*/ // /*小计油�?�信�?*/
// Data_FuelCounsumpTrip(); // Data_FuelCounsumpTrip();
// /*本次油?信?*/ // /*本次油�?�信�?*/
// Data_FuelCounsumpThisTime(); // Data_FuelCounsumpThisTime();
// /*加油后行车信?*/ // /*加油后行车信?*/
// Data_Info_Last_Refueling(); // Data_Info_Last_Refueling();
// /*当前油??*/ // /*当前油??*/
// Fuel_CurrentFuelEco_Data(); // Fuel_CurrentFuelEco_Data();
// /*综合油??*/ // /*综合油??*/
// Fuel_ComprehensiveFuelEco_Data(); // Fuel_ComprehensiveFuelEco_Data();
// /*综合气??*/ // /*综合气??*/
// Gas_ComprehensiveGasEco_Data(); // Gas_ComprehensiveGasEco_Data();
// /*机油压力*/ // /*机油压力*/
// Oil_EngineOilPressure_Data(); // Oil_EngineOilPressure_Data();
...@@ -436,11 +464,11 @@ void Sys_Sleep_Mode_Tasks(void) ...@@ -436,11 +464,11 @@ void Sys_Sleep_Mode_Tasks(void)
/******************************************************************************* /*******************************************************************************
* * * *
* 精确?50us计时任务列表 * * 精确?50us计时任务列表 *
* * * *
*******************************************************************************/ *******************************************************************************/
/*============================================================================== /*==============================================================================
精确?50us计时任务 禁止添加修改列表中的任务 精确?50us计时任务 禁止添加修改列表中的任务
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
void Sys_Exact_50us_Tasks(void) void Sys_Exact_50us_Tasks(void)
{ {
...@@ -450,11 +478,11 @@ void Sys_Exact_50us_Tasks(void) ...@@ -450,11 +478,11 @@ void Sys_Exact_50us_Tasks(void)
/******************************************************************************* /*******************************************************************************
* * * *
* 精确?100ms计时任务列表 * * 精确?100ms计时任务列表 *
* * * *
*******************************************************************************/ *******************************************************************************/
/*============================================================================== /*==============================================================================
精确?100ms计时任务 禁止添加修改列表中的任务 精确?100ms计时任务 禁止添加修改列表中的任务
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
void Sys_Exact_100ms_Tasks(void) void Sys_Exact_100ms_Tasks(void)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment