首页 > 解决方案 > 不能将 #define 整数作为 uint8_t / int 类型的参数或数组索引传递

问题描述

有一个奇怪的问题,基本上我不能使用#define指令来声明一个整数,然后将该整数用作函数参数或索引数组。

使以下示例起作用的唯一方法是将它们声明为

const uint8_t LOC3 = 3;

const uint8_t PORTA = 0;

这是定义:

#define LOC3 3;

这是函数原型:

void spi_Setup(USART_TypeDef *spi,
            uint8_t location, <-- this parameter here
            bool master,
            char* rxBuffer,
            char* txBuffer);

即使将参数声明为int类型,它仍然不允许我像这样调用函数:

spi_Setup(USART1, LOC3, true, receiveBuffer, transmitBuffer);

这同样适用于数组索引:

#define PORTA 0;

这是调用结构:

GPIO->P[PORTA].DOUTCLR = 1 << 1;

如前所述,这些示例都不起作用,


编译器设置:

方言:C99 编译器:GNU ARM 嵌入式工具链

编译器标志:

-g -gdwarf-2 -mcpu=cortex-m0plus -mthumb -std=c99 '-DDEBUG=1' '-DEFM32ZG222F32=1' -I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/ developer/sdks/gecko_sdk_suite/v2.3//platform/CMSIS/Include"-I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//hardware/ kit/EFM32ZG_STK3200/config"-I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//hardware/kit/common/bsp"-I"/home /access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//platform/Device/SiliconLabs/EFM32ZG/Include“-I”/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//hardware/kit/common/drivers" -O0 -Wall -c -fmessage-length=0 -mno -sched-prolog -fno-builtin -ffunction-sections -fdata-sections

汇编标志:

-g -gdwarf-2 -mcpu=cortex-m0plus -mthumb -c -x assembler-with-cpp -I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2 .3//platform/CMSIS/Include"-I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//hardware/kit/EFM32ZG_STK3200/config"- I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//hardware/kit/common/bsp"-I"/home/access/Downloads/simplicitystudio/ pkg/simplicitystudio/opt/simplicitystudio/developer/sdks/gecko_sdk_suite/v2.3//platform/Device/SiliconLabs/EFM32ZG/Include"-I"/home/access/Downloads/simplicitystudio/pkg/simplicitystudio/opt/simplicitystudio/developer /sdks/gecko_sdk_suite/v2.3//硬件/套件/通用/驱动程序"'-DEFM32ZG222F32=1'

链接器标志:

-g -gdwarf-2 -mcpu=cortex-m0plus -mthumb -T "${BuildArtifactFileBaseName}.ld" -Xlinker --gc-sections -Xlinker -Map="${BuildArtifactFileBaseName}.map" --specs=nano。眼镜

我问过我的老人谁是老手,他说这很奇怪。我同意,因为我从来没有以这种方式使用#defines,实际上它被认为是惯例。


我试图将数字括在一组括号中,即

#define LOC3 (3)

然而,这也行不通。

以前有人遇到过这个问题吗?

提前致谢,MM25

标签: cembedded

解决方案


#define LOC3 3;

您需要删除,;否则您的函数调用看起来像

spi_Setup(USART1, 3; , true, receiveBuffer, transmitBuffer);

这不是有效的 C 语法。

#define LOC3 3

将工作。


推荐阅读