从函数中为外部变量赋值

时间:2015-11-30 18:46:39

标签: c embedded

我一直在这里读书很多但直到现在才发布。

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

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

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>

我已经尝试将返回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 个答案:

答案 0 :(得分:2)

将您的file1.c更新为:

#include file1.h
int a;

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

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