Keil编译器很多奇葩的地方,比如很多程序的写法在keil编译器里面实现是实现不了的,并且不报错,而且莫名其妙的死机。
结构体里面只有指针函数时,是可以正常调用的,当同时存在指针函数和参数时,就会死机。
相同的方法在其它编译器中是正常运行的,比如QT自动的编译器
typedef struct{
uint8_t soCharging;//充电状态
uint8_t soDsarging;//放电状态
uint8_t soChargMos;//充电MOS
uint8_t soDsargMos;//放电MOS
uint8_t soCharger;//充电器
uint8_t soLoader;//负载
void (*soChargMosControl)(uint8_t status);//充电MOS控制
void (*soDsargMosControl)(uint8_t status);//放电MOS控制
} PreventSparkStruct;
void sh309CHGMOSConrotl(uint8_t value){
uint8_t tempStatus = 0;
printf("test aa");
}
void sh309DSGMOSConrotl(uint8_t value){
uint8_t tempStatus = 0;
printf("test bb");
}
void softPreventSpark(PreventSparkStruct *tempPreventSpark){
static uint16_t pretimer = 0;
static uint8_t preventSparkStatus = 0;
tempPreventSpark->soDsargMosControl(1);
}
PreventSparkStruct preventSparkData;
void main(){
preventSparkData.soChargMosControl = sh309CHGMOSConrotl;
preventSparkData.soDsargMosControl = sh309DSGMOSConrotl;
softPreventSpark(&preventSparkData);
}