我用指针初始化中断它运行总卡在中断初始化这里,改了一下用取址初始化成功了,应该没有问题,这两个我感觉是相同的定义,但是却出现问题了,这是为什么呀?
错误代码
EXTI_InitTypeDef * Exti_Init;
Exti_Init->EXTI_Line = EXTI_Line0 ;
Exti_Init->EXTI_LineCmd = ENABLE;
Exti_Init->EXTI_Mode = EXTI_Mode_Interrupt;
Exti_Init->EXTI_Trigger = EXTI_Trigger_Rising ; //初始化EXTI
EXTI_Init( Exti_Init);
修改后代码
EXTI_InitTypeDef Exti_Init;
Exti_Init.EXTI_Line = EXTI_Line0 ;
Exti_Init.EXTI_LineCmd = ENABLE;
Exti_Init.EXTI_Mode = EXTI_Mode_Interrupt;
Exti_Init.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_Init(&Exti_Init);
错误代码的第一行只创建了指针变量,指针指向null而不是结构体,所以赋值不能实现,而且传给初始化函数的地址也是null,初始化也不能实现
要修改的话,可以多声明一个结构体变量,
在第一行下面第二行上面,给指针赋值为结构体变量的地址
【以下回答由 GPT 生成】
根据你提供的代码,我可以看出问题是因为在使用指针初始化 Exti_Init
结构体时,没有为 Exti_Init
分配内存空间,导致程序在中断初始化的地方卡住。
在错误代码中,你定义了一个指向 EXTI_InitTypeDef
结构体的指针 Exti_Init
,但是没有为它分配内存空间。因此,当你尝试访问 Exti_Init
的成员变量时,会出现错误,导致程序卡住。
为了解决这个问题,你将 Exti_Init
的定义从指针修改为结构体本身,并传递结构体的地址给 EXTI_Init()
函数。
修改后的代码中,你定义了 EXTI_InitTypeDef
结构体变量 Exti_Init
,然后通过 &Exti_Init
传递结构体的地址给 EXTI_Init()
函数,这样函数就能正确地访问 Exti_Init
的成员变量并进行初始化。
下面是修改后的代码:
EXTI_InitTypeDef Exti_Init;
Exti_Init.EXTI_Line = EXTI_Line0;
Exti_Init.EXTI_LineCmd = ENABLE;
Exti_Init.EXTI_Mode = EXTI_Mode_Interrupt;
Exti_Init.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_Init(&Exti_Init);
这样修改后的代码可以正常运行,因为结构体变量 Exti_Init
在栈上分配了内存空间,函数能够正确地访问结构体的成员变量。
【相关推荐】