系列文章第一篇链接:STM32_编程入门_stm32编程-CSDN博客
目录
正文
拿一个.h文件 专门定义一个宏 (ObVar.h)
形如
#define OBSERVE_VARIABLE_feddyx 0
#define OBSERVE_VARIABLE_feddyy 1
#define OBSERVE_VARIABLE_fFtvx 2
#define OBSERVE_VARIABLE_fFtvy 3
#define OBSERVE_VARIABLE_fCtvx 4
#define OBSERVE_VARIABLE_fCtvy 5
#define OBSERVE_VARIABLE_fGyrox 6
#define OBSERVE_VARIABLE_fGyroy 7
#define OBSERVE_VARIABLE_fEnconderx 8
#define OBSERVE_VARIABLE_fEncondery 9
该.h文件是可解析的。
初始化时,用一个数组存储所有可能被观测变量的地址,这并按上述宏定义一一映射
这样就建立数字和地址之间的映射。
float * OBSERVE_VARIABLE_ADDR[10];
void OBSERVE_VARIABLE_ADDR_INIT(void){
OBSERVE_VARIABLE_ADDR[OBSERVE_VARIABLE_feddyx] = &feddyx;
OBSERVE_VARIABLE_ADDR[OBSERVE_VARIABLE_feddyy] = &feddyx;
OBSERVE_VARIABLE_ADDR[OBSERVE_VARIABLE_fFtvx] = &fFtvx;
OBSERVE_VARIABLE_ADDR[OBSERVE_VARIABLE_fFtvy] = &fFtvy;
OBSERVE_VARIABLE_ADDR[OBSERVE_VARIABLE_fCtvx] = &fCtvx;
OBSERVE_VARIABLE_ADDR[OBSERVE_VARIABLE_fCtvy] = &fCtvy;
OBSERVE_VARIABLE_ADDR[OBSERVE_VARIABLE_fGyrox] = &fGyrox;
OBSERVE_VARIABLE_ADDR[OBSERVE_VARIABLE_fGyroy] = &fGyroy;
OBSERVE_VARIABLE_ADDR[OBSERVE_VARIABLE_fEnconderx] = &fEnconderx;
OBSERVE_VARIABLE_ADDR[OBSERVE_VARIABLE_fEncondery] = &fEncondery;
}
用一个数组来记录需观测的8通道的上位机要观测的变量的索引值
int OBSERVE_VARIABLE_Index[8];
上位机通过解析.h宏文件,即可获得所有可观测变量的变量名,以及对应的索引值。 当要查看某个变量的时候,就可以发送该变量的索引值到STM32,STM32根据索引值,访问 OBSERVE_VARIABLE_ADDR数组,就能得到指定的变量的地址。直接从地址里拿数据往Buffer里面放。
for(i = 0; i < 8; i++){
memcpy((unsigned char *)(AngelaSendTypeBBuffer+4+4*i), ...
... (unsigned char *)OBSERVE_VARIABLE_ADDR[OBSERVE_VARIABLE_INDEX[i]], 4);
}
假设我要让我的6通道显示fFtvy的数据, 我们上位机通过对 .h (ObVar.h) 文件的解析,能获得fFtvy对应的地址映射是3。那么上位机现在就会往STM32发送一个 6 和 3过来, 6表示通道,3表示地址。
那么 OBSERVE_VARIABLE_Index[5](5 :通道号 - 1) 将被赋值为 3;
OBSERVE_VARIABLE_ADDR[ OBSERVE_VARIABLE_INDEX[5] ] 等于 OBSERVE_VARIABLE_ADDR[3 ]等于&fFtvy
通过这样的方式,就得到了变量:fFtvy的值。
我简直就是个小天才。