gpt4 book ai didi

c - 为什么用 void 关键字调用函数没有效果?

转载 作者:行者123 更新时间:2023-12-04 18:35:53 24 4
gpt4 key购买 nike

我需要编写一个非常简单的程序,使用处理器 ARM AT91SAM9263 使 LED 二极管闪烁。我需要使用安装在我的 Ubuntu 机器上的 QEMU 模拟器运行此代码。
我正在尝试编写一个具有 4 个功能的程序,它们正在初始化 LED 端口和按钮端口,它们正在闪烁 LED 二极管并检查按钮状态(是否拉出)。
我已经定义了基本寄存器,尽管我在制作 LED 二极管来打开/关闭它们并检查按钮状态时遇到了问题。简单地说,什么也没有发生。
下面是我的代码:

#include <stdio.h>
#include "AT91SAM9263-EK.h"
#include "AT91SAM9263.h"
#include "project.h"
#include <stdint.h>
#include <stdbool.h>
#define AT91B_LED1 AT91C_PIO_PB8 /* DS1 */
#define AT91B_LED2 AT91C_PIO_PC29 /* DS2 */
#define AT91B_NB_LEB 2
#define AT91D_BASE_PIO_LED1 (AT91C_BASE_PIOB)
#define AT91D_BASE_PIO_LED2 (AT91C_BASE_PIOC)
#define AT91D_ID_PIO_LED1 (AT91C_ID_PIOB)
#define AT91D_ID_PIO_LED2 (AT91C_ID_PIOC)
#define AT91B_BP1 AT91C_PIO_PC5 // Left click#
#define AT91B_BP2 AT91C_PIO_PC4 // Right click
#define AT91D_BASE_PIO_BP AT91C_BASE_PIOC
#define AT91D_ID_PIO_BP AT91C_ID_PIOCDE

void LedPortInit()
{
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOCDE ); // peripheral clock enable register (port C, D, E)/* Set the PIO line as input */
AT91D_BASE_PIO_LED1->PIO_ODR = 0x0000000F;
AT91D_BASE_PIO_LED1->PIO_PER = AT91C_PIO_PB8;
AT91D_BASE_PIO_LED2->PIO_OER = AT91C_PIO_PC29 ;
AT91D_BASE_PIO_LED2->PIO_PER = 0xFFFFFFFF;// 1 – Enable PIO to control the pin
AT91C_BASE_PIOE->PIO_PER = AT91C_PIO_PB31;/* Disable pull-up */
AT91C_BASE_PIOA->PIO_PPUDR = 0xFFFF0000;
}
void ButonPortInit()
{
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOCDE ); // peripheral clock enable register (port C, D, E)/* Set the PIO line as input */
AT91C_BASE_PIOD->PIO_ODR = 0x0000000F;
AT91C_BASE_PIOD->PIO_PER = AT91C_PIO_PC5;
AT91C_BASE_PIOB->PIO_OER = AT91C_PIO_PC4 ;
AT91C_BASE_PIOD->PIO_PER = 0xFFFFFFFF;// 1 – Enable PIO to control the pin
AT91C_BASE_PIOE->PIO_PER = AT91C_PIO_PB31;/* Disable pull-up */
AT91C_BASE_PIOA->PIO_PPUDR = 0xFFFF0000;
}
void LedSwitch()
{

while(1)
{
AT91B_LED1->AT91C_PIO_PB8 ^= 1;
}
AT91C_PIO_PC29 << 29 ;

}
void ButtonTest()
{
AT91C_PIO_PC5 << 5;
AT91C_PIO_PC4 << 4;
}
int main(void)
{
LedPortInit();
void ButonPortInit();
void LedSwitch();
void ButtonTest();

}

最佳答案

这些行被编译器误认为是原型(prototype),即没有运行时影响的函数声明:

void ButonPortInit();
void LedSwitch();
void ButtonTest();
把它们变成这样的函数调用:
ButonPortInit();
LedSwitch();
ButtonTest();
为了演示,我为这个 MRE 提供了更少的环境特定和嵌入式内容。问题和解决方法是一样的。
#include <stdio.h>

void test1()
{ printf("test 1!\n");}
void test2()
{ printf("test 2!\n");}

int main()
{
printf("Hello, World!\n");

void test1();
test2();

return 0;
}
输出:
Hello, World!
test 2!
您可以在问题描述中看到“简单地说,什么都没有发生”。对于 void test1();但是有 test2(); 的输出.

关于c - 为什么用 void 关键字调用函数没有效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65429078/

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