我在这里读了很多书,但直到现在才发表。
我的问题是我受困于一些代码。我想要做的是通过 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/