c - 从函数中为外部变量赋值

标签 c embedded

我在这里读了很多书,但直到现在才发表。

我的问题是我受困于一些代码。我想要做的是通过 UART 从 Matlab 接收一个值,并分配给一个将贯穿整个程序的变量。

这是我正在运行的测试代码:

void start_comm(){

    //Stuck in loop untill Matlab gives signal
    // Spams character 'A' while waiting
    while (!uart_is_rx_ready (CONF_UART)){
        printf("%c\n",'A');
        delay_ms(100);
    }

    // Start reading data sent from Matlab
    // P,I,D & samplingstime data
    uint8_t p_char, i_char, d_char, samp_char1, samp_char2;

    while (!uart_is_rx_ready (CONF_UART)){};
    uart_read(CONF_UART, &p_char);

    // Print out everything out again for testing
    printf("%c\n", p_char);
}

这段代码有效,一切都打印出来了。我需要的是能够在其他函数中使用 p_char 中的值,我需要它与从 Matlab 发送的值相同,即如果它是 5,那么我可以在另一个函数中打印 printf,它会打印 5。

我试过将 p_char 返回到另一个变量,但它只会在循环开始时恢复为 0。我还尝试了以下测试代码,我尝试将变量设置为静态:

**file1.h**

extern int a;

**file1.c**

#include file1.h

void function(){

    static int a;

    scanf("%i", &a);
}

**main.c**

#include file1.h

int main() {
    function();

    while(1){
            printf("%i", a);
    }

}

查看代码,我很确定我在 static 和 extern 上做错了什么,但我迷路了。

编辑:找出问题所在,确实是 Matlab 代码。我需要为其添加延迟,以说明与微 Controller 通信所花费的时间。

最佳答案

将您的 file1.c 更新为:

#include file1.h
int a;

void function(){
    scanf("%i", &a);
}

这会将 a 置于全局范围内。如果您将 extern int a 保留在您的 .h 文件中,包含该 header 的 C 文件将知道它。

关于c - 从函数中为外部变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34005712/

相关文章:

c - 在 avformat_alloc_output_context2 中使用什么 format_name?

c - C : how does this work? 中的合并算法

c - 嵌入式 Keil C 是否支持多线程?

linker - ARM DCD 从 RAM 工作和执行

networking - 如何以编程方式设置尚未设置 IP 的硬件设备的 IP 地址

c - 传递包含 "!!!!"的字符串时 argv 的奇怪行为

c - 如何才能不断地为某个点添加某个值?

C - 使用 strtok 将字符串数组拆分为字符数组

c - 如何从 C 程序中调用汇编函数?

linux - 一个项目中的不同版本的 yocto