小编riv*_*ock的帖子

在c中的特定内存位置创建数据结构

我正在研究一个有两个内核的嵌入式MCU,它们都可以看到从0x80000000开始的内存区域.

ADC连接到一个内核,无线电连接到另一个内核.我想将ADC接收的数据值写入该存储器地址,以便其他内核可以读取它.

有人能帮我弄明白怎么做吗?没有微操作系统,它是裸机.

我会在特定地址创建一个指向struct的指针吗?

我在数组中有两个值,如何将它们放入结构中?

#define NUM_SAMPLES_POLLED (2)
uint16_t samples_polled[NUM_SAMPLES_POLLED]
Run Code Online (Sandbox Code Playgroud)

c memory arrays

3
推荐指数
1
解决办法
250
查看次数

使用0xffffffff按位和无符号长整数

下面是switch语句中的一些代码.getvalue()返回一个unsigned long.有人可以解释为什么value是按位的0xffffffff.mcu是32位.

#define WriteMemory(A,V) *(volatile unsigned long*)(A)=(V)
static unsigned value;

case 'b':
value = getvalue();
value &= 0xffffffff;
WriteMemory(2147455555, value);
break; 
Run Code Online (Sandbox Code Playgroud)

c bit-manipulation

1
推荐指数
1
解决办法
741
查看次数

c使用#define和十六进制值代替十进制的良好编程习惯

我正在努力改进我的嵌入式编码实践.下面的代码将值0写入内存位置0x80001000.

#define MemoryWrite(A,V) *(volatile unsigned long*)(A)=(V)
#define FLAG 2147487744 //0x80001000

uint32_t reset_value = 0;

int main(void)
{
    MemoryWrite(FLAG, reset_value);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 为了使用MemoryWrite我必须转换0x80001000为的宏2147487744.我认为这使得代码不清楚.有没有办法只使用十六进制值才能做到这一点?

  2. 我定义reset_valueuint32_t.如果我使用它会改变什么#define

c embedded hex

1
推荐指数
1
解决办法
974
查看次数

标签 统计

c ×3

arrays ×1

bit-manipulation ×1

embedded ×1

hex ×1

memory ×1