gpt4 book ai didi

c - 在结构中使用寄存器

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:03 24 4
gpt4 key购买 nike

我正在尝试设置一个包含寄存器、引脚号和 adc 值的结构。我想使用名为 setLEDs 的函数更改寄存器的值。但是,我收到错误提示

expression must have integral type
expression must have pointer type

这是我的结构。 LED_X 和端口在上面定义。

typedef struct
{
const uint32_t pin;
volatile uint32_t * const reg;
uint32_t adcValue;
} LED_LUT;

#define LED_LUT_DEF {{LED_0, (volatile uint32_t*)GPIO_PORTC_DATA_R, 0}, \
{LED_1, (volatile uint32_t*)GPIO_PORTC_DATA_R, 0}, \
{LED_2, (volatile uint32_t*)GPIO_PORTC_DATA_R, 0}, \
{LED_3, (volatile uint32_t*)GPIO_PORTC_DATA_R, 0}, \
{LED_4, (volatile uint32_t*)GPIO_PORTF_DATA_R, 0}, \
{LED_5, (volatile uint32_t*)GPIO_PORTF_DATA_R, 0}, \
{LED_6, (volatile uint32_t*)GPIO_PORTF_DATA_R, 0}, \
{LED_7, (volatile uint32_t*)GPIO_PORTF_DATA_R, 0},}

这是接收编译错误的函数:

void setLEDs(LED_LUT ledLUT[NUM_OF_LEDS])
{
int i;
for (i=0; i < NUM_OF_LEDS; ++i)
{
//If above threshold, set the pin, else clear it
if (ledLUT[i].adcValue > ADC_THRESHOLD)
{
ledLUT[i]->reg |= (uint32_t*)ledLUT[i].pin;//error here
}
else
{
ledLUT[i]->reg &= (uint32_t*)~ledLUT[i].pin;//error here
}

}
}

ledLUT 在 main 中初始化为:

LED_LUT ledLUT[8] = LED_LUT_DEF;

我认为这可能只是一个语法错误,但我不确定我做错了什么。我尝试了多种类型转换/取消引用的不同组合,但没有找到正确的解决方案。

最佳答案

ledLUT[i]->reg |= (uint32_t*)ledLUT[i].pin

应该是

*(ledLUT[i].reg) |= (uint32_t)ledLUT[i].pin

ledLUT[i]->reg &= (uint32_t*)~ledLUT[i].pin

应该是

*(ledLUT[i].reg) &= (uint32_t)~ledLUT[i].pin

因为 ledLUT 是结构数组,而不是指针数组。

关于c - 在结构中使用寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26600585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com