gpt4 book ai didi

linux - 未定义对 `GOIO_SET' linux 的引用

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:27 25 4
gpt4 key购买 nike

我已经为下面所示的设置函数编写了一个宏,并在树莓派上工作

#define GPIO_SET(g) (*(gpio.addr + 7) |= (1<<(g)))

#define ALL_COL_HIGH (GPIO_SET(COL1) | GOIO_SET(COL2) | GPIO_SET(COL3) | GPIOO
_SET(COL4))

当我编译文件时,我会收到以下错误

**undefined reference to `GOIO_SET'**

我该如何克服这个问题?

最佳答案

您是否注意到您定义了 GPIO_SET 但随后使用了 GOIO_SET?第二个字母不一样!定义中为 P,但使用中为 O。最后一个中还有其他拼写错误:GPIOO_SET 有两个 O

由于GOIO_SET名称未定义,编译器认为它一定是一个函数或其他东西,但它没有定义,所以它给你错误。

顺便说一句,我认为您的代码是错误的。您的 ALL_COL_HIGH 宏将扩展为如下内容:

(*(gpio.addr + 7) |= (1<<(COL1))) | (*(gpio.addr + 7) |= (1<<(COL2))) ...

这将多次修改相同的值 (*(gpio.addr + 7)),而无需中间序列点,这是未定义的行为。

您可以使用逗号运算符解决此问题,因为 ALL_COL_HIGH 中的 | 没有意义:

#define ALL_COL_HIGH (GPIO_SET(COL1) , GPIO_SET(COL2) , GPIO_SET(COL3) , GPIO_SET(COL4))

逗号运算符确实包含一个序列点,所以一切都会好起来的。

尽管将 COLx 值定义为实际位并同时设置所有值通常更容易。

#define COL1 (1<<1)
#define COL2 (1<<2)
#define COL3 (1<<3)
#define COL4 (1<<4) //or whatever

#define GPIO_SET(g) (*(gpio.addr + 7) |= (g))
#define ALL_COL_HIGH (GPIO_SET(COL1 | COL2 | COL3 | COL4))

关于linux - 未定义对 `GOIO_SET' linux 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22807160/

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