想法是把RAM中的数据映射到外部存储器中,需要建立一个表来存储外设地址与RAM地址及数据宽度的关系。
uint8_t u8EERam[x];
Matrix[n] =
{
//外设地址------RAM地址----------数据宽度
{MemAdr0, &u8EERam[0], m},
{MemAdr1, &u8EERam[m], n},
{MemAdr2, &u8EERam[m+n], z},
{MemAdr3, &u8EERam[m+n+z], i},
.....
}
但是很多时候在关系表建立完成后,又需要在某个地址插入一个新的值,例如需要在{MemAdr0, &u8EERam[0], m}之后插入一个新的值,那这时候就需要把后面的所有地址计算都重写一遍,费时还容易出错。
有没有一种宏定义能够替代&u8EERam[m+n+z],每次使用这个宏后,其所定义的值能自动增加,就能省去了手工计算的过程。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
感谢感谢,不过确实您的这个方法只能在执行时用,不能再编译时使用
哈哈,boost_pp去google了一下,真是个神奇的东西,完全就是把宏当成了另外一种语言来使用,时间允许了要好好学习一下
typedef struct{
uint16_t u16A;
uint16_t u16B;
......
}VALUE;
VALUE var = {
.u16A = 1,
.u16B = 2,
......
};
Matrix[x] = {
//外设地址--------------RAM地址----------------------------数据宽度
{MemAdr0, &var + offsetof(VALUE, u16A ), sizeof(var.u16A)},
{MemAdr1, &var + offsetof(VALUE, u16B ), sizeof(var.u16B)},
......
};
你可以把offsetof(VALUE, u16A ), sizeof(var.u16A)也改成宏,更不容易出错
offsetof这个宏第一次接触,学到了,哈哈
一周热门 更多>