串行通信和从属RAM C上变量的变化值
serial communication and change value of Variable on Slave RAM C
我想通过串行通信更改从属RAM上变量的值
例如
snedtoslave(byte address, data)
但是在这里我不知道如何在从属站的RAM上使用固定地址使变量
我想要这个
//in slave
char x=0; // address in ram example 0b
serialreceiver();
if(x==1) {do();}
//in master
snedtoslave(0b, 1);
如何使变量具有固定地址?
最简单的解决方案是使用包含所有信息的表,而不涉及链接器:
- 变量的逻辑地址
- 变量的实际地址
- 变量的类型
喜欢:
#include <stdio.h>
#include <stdint.h>
typedef enum
{
INT8, UINT8, INT16, UINT16, INT32, UINT32
}my_TYPES;
struct table
{
uint32_t address;
my_TYPES type;
void *variable;
};
uint32_t Var_1 = 10;
uint8_t Var_2 = 20;
struct table variables[] = {
// address | type | variable
{ 0 , UINT32 , (void *)&Var_1 },
{ 1 , UINT8 , (void *)&Var_2 }
};
int main(void)
{
for (size_t i = 0; i < sizeof(variables) / sizeof(variables[0]); i++)
{
switch (variables[i].type)
{
case UINT8:
printf("Old value of variable at address %d: %dn", variables[i].address, *((uint8_t *) (variables[i].variable)));
*((uint8_t *) (variables[i].variable)) += 1;
printf("New value of variable at address %d: %dn", variables[i].address, *((uint8_t *) (variables[i].variable)));
break;
case UINT32:
printf("Old value of variable at address %d: %dn", variables[i].address, *((uint32_t *) (variables[i].variable)));
*((uint32_t *) (variables[i].variable)) += 1;
printf("New value of variable at address %d: %dn", variables[i].address, *((uint32_t *) (variables[i].variable)));
break;
default:
fprintf(stderr, "Type not managedn");
break;
}
}
return 0;
}
相关文章:
- 为什么我的全局变量似乎没有变化?
- C++11:具有互斥锁的线程看到原子变量的值发生变化,尽管这是唯一可以改变它的代码
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 不稳定的C :每行适应性变化多变量初始化
- 整数变量的值在传递给 c++ 中的函数后发生变化
- 整数变量与整数字面变化的乘法结果
- X 变量在最后一次尝试简单猜谜游戏时发生变化,C++
- 我想制作受变量变化(c ++)影响的字符串
- 串行通信和从属RAM C上变量的变化值
- 当变量的顺序发生变化时C++双倍乘法会产生不同的结果
- const vs non-const变量一旦分配就没有变化
- 变量的值发生变化
- 通知有关变量变化的线程(信号?)
- 在X个对象之间跟踪一个对象中的变量变化
- 跟踪Visual c++ 6.0中的变量变化
- 带有常量和变量变化的c++模板
- 调用fscanf后发生了奇怪的局部变量变化
- 为什么会发生这种意外的变量变化
- c++中未知原因的成员变量变化
- c++布尔变量变化