C 为函数中的外部变量赋值

C 为函数中的外部变量赋值,c,embedded,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)){

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

我的问题是我被一些代码卡住了。我要做的是通过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,那么我可以在另一个函数中打印f,它将打印一个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);
    }

}
查看代码,我很确定我在使用静态和外部程序时出错了,但是我迷路了


编辑:解决了问题,确实是Matlab代码。我需要添加一个延迟,以说明与微控制器通信所需的时间。

将文件1.c更新为:

#include file1.h
int a;

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

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

使
a
成为全局变量,保持
extern
声明不变function()中的code>隐藏
extern int a的声明。由于某些原因,您的建议适用于普通C语言,但在我将其上传到微控制器时不起作用。我是否编辑原始帖子并上传原始代码?当OP读入函数local static a时,这将不起作用,而不是您定义的函数。出于某种原因,您的建议适用于普通C,但在我上传到微控制器时则不起作用。我是否编辑了原始帖子并上传了原始代码?请解释“它不工作”,您是否遇到编译器错误或运行时错误?关于如何处理全局变量,请参阅微控制器手册。也许一个
寄存器inta
可以在那里工作。好吧,代码看起来不错。当我在xcode中运行它时,该值保持不变,您的建议适用于该部分。但是当我上传代码到微控制器时,它部分工作。当我使用Arduino IDE串行监视器发送值时,代码正常工作。当通过Matlab发送时,它不会。显然,这是我的Matlab代码的一个问题,但我想我应该在另一篇文章中问这个问题。你的建议确实达到了预期目的,所以我认为它是正确的。谢谢解决了这个问题,确实是Matlab代码。我需要增加一个延迟来计算与微控制器通信所需的时间。