C 为函数中的外部变量赋值
我在这里读了很多书,但直到现在才发布 我的问题是我被一些代码卡住了。我要做的是通过UART从Matlab接收一个值,然后分配给一个变量,这个变量将贯穿整个程序 这是我正在运行的测试代码: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)){
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代码。我需要增加一个延迟来计算与微控制器通信所需的时间。