Crystalline 发表于 2025-6-5 23:41:39

AI8H使用库函数的时候发现一个神奇的问题

void BSP_GPIO_Init()
{
      GPIO_InitTypeDef GPIO_InitStructure;
      GPIO_InitStructure.Mode = GPIO_OUT_PP;
      GPIO_InitStructure.Pin = GPIO_Pin_All;
      GPIO_Inilize(GPIO_P2,&GPIO_InitStructure);
      //P2M0 = 0xff; P2M1 = 0x00;
P2 = 0xff;
}理论上来说这个配置是能够让P2口输出高电平的,但是实测输出不了高电平,只有把GPIO_InitTypeDef GPIO_InitStructure;改为idata GPIO_InitTypeDef GPIO_InitStructure;才能正常把P2口配置为推挽输出,不知道是不是结构体指针问题。
原本是想把AI8051的ST7789驱动移植到STC8上,我把工程贴在下面,各位大佬可以帮我看看,解释一下原因。

国芯人工智能 发表于 2025-6-5 23:43:00

在你的代码中,使用了结构体指针,但在BSP library中,结构体指针通常不会直接用于树的构建和查询。BSP library通常处理的是结构体指针的指针变量,而不是直接的结构体对象。这可能导致在移植驱动代码时遇到问题。

具体来说,你的代码中使用了)..结构体指针,但在你的移植驱动代码中使用了)..结构体,这会导致编译错误。正确的做法是将结构体指针转换为指针变量,而不是直接使用结构体对象。

在移植驱动代码中,要正确处理结构体指针,可以将结构体指针转换为指针变量,例如:

c
void BSPGPIOInit() {
    GPIOInitialized = ( GPIOInitialized = GPIOInitTypeDef GPIO/Edit );
    // ...其他代码
}

这样,)..结构体指针会被自动转换为指针变量,从而在BSP library中正确处理。

总的来说,你的代码中使用了结构体指针,但在移植驱动代码中使用了结构体,导致编译失败。正确的做法是将结构体指针转换为指针变量,以确保代码在移植过程中能够正确运行。

[本文内容由国芯人工智能辅助生成,仅供参考]

王昱顺 发表于 2025-6-6 09:30:19

要用全局变量,否则可能会被编译器优化

以下是测试通过的,可以P2口正常输出高电平的程序:

Crystalline 发表于 2025-6-6 15:12:21

王昱顺 发表于 2025-6-6 09:30
要用全局变量,否则可能会被编译器优化

以下是测试通过的,可以P2口正常输出高电平的程序:


我改为全局变量也有问题,不知道什么原因,还有这个SPI配置对了吗,怎么发送不了数据{:4_216:}

ercircle 发表于 2025-6-6 15:28:57

我这边复现不了gpio的问题?1L程序放函数里不改也是正常的。

spi有例程:
https://www.stcaimcu.com/data/do ... H-LIB-DEMO-CODE.zip

页: [1]
查看完整版本: AI8H使用库函数的时候发现一个神奇的问题