Keil编译器--结构体指针函数;结构体作为参数时,不能调用结构体指针函数

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);
}

你可能感兴趣的:(STM32,stm,bms,指针,编译器,stm32,单片机,嵌入式)