在C语言STM32typedef中初始化和调用结构体的正确方法是什么
struct motor_struct {
uint32_t yellow_clicks;
uint32_t green_clicks;
uint8_t pin;
GPIO_TypeDef port;
_Bool green_hall;
_Bool yellow_hall;
} motors[4];
//motors(yellow_clicks) = {0,0,0,0}; - *compile without error but what is gone inside?*
motors[0].yellow_clicks = 0; *- get an error*
3条答案
按热度按时间z9zf31ra1#
你只能做这样的事情:
在一个函数中。如果你想在编译时初始化你的结构数组,你需要像这样:
当然,使用对你有意义的价值观。
wnavrhmk2#
为了给一个结构体 * 赋值 * 而不是在声明时 * 初始化 * 它,你要么需要一个接一个地设置成员,要么使用一个临时的复合文字:
是否对结构体使用
typedef
有点主观,尽管在这种情况下,我认为它会使代码更具可读性。(Also注意我做的结构填充优化-
GPIO_TypeDef
可能是一些32位指针,所以它应该在pin
之上声明,否则你将白白浪费内存。也可以考虑指定的初始化器:
zf9nrax13#
由于您使用STM32CUBEIDE标记了此变量,因此值得注意的是,当您声明静态全局变量时,启动代码将该变量置零。
归零意味着变量的内存将被0填充。
因此,在下面的
motors
数组将被归零。https://www.st.com/resource/en/user_manual/um2609-stm32cubeide-user-guide-stmicroelectronics.pdf