我一直在这里读书很多但直到现在才发布。
我的问题是我遇到了一些代码。我要做的是从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代码。我需要添加一个延迟来计算与微控制器通信所花费的时间。答案 0 :(得分:2)
将您的file1.c更新为:
#include file1.h
int a;
void function(){
scanf("%i", &a);
}
这会将a
置于全局范围内。如果您在extern int a
文件中保留.h
,那么包含该标头的C文件就会知道它。