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

时间:2016-08-22 16:46:11

标签: c arrays memory

我正在使用嵌入式mcu,它有两个内核,可以看到从0x80000000开始的内存区域。

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

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

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

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

#define NUM_SAMPLES_POLLED (2)
uint16_t samples_polled[NUM_SAMPLES_POLLED]

4 个答案:

答案 0 :(得分:5)

在这种情况下,您将地址直接分配给指针:

char *memdata = (char *)0x80000000;

请记住,此行为是实现定义的。

答案 1 :(得分:3)

  

如何使用某些值在此确切地址创建数组?

C语言没有定义任何将变量分配给特定地址的机制。实际上,在托管C实现中,没有这样的机制可能是可行的,因为基本上所有现代托管实现都依赖于具有虚拟内存的底层操作系统。

因为你可能正在编写一个独立实现(假设目标是一个嵌入式MCU),很可能有一个机制可以满足你的要求。 @dbush建议的那个将是一个很好的候选人,但只有通过检查你的文档才能确定。

答案 2 :(得分:1)

最好阅读有关定义和使用共享内存的工具链文档。

答案 3 :(得分:1)

数组不是对象。数组在" c"只是数据的表示。所以你不能创建它或销毁(或释放它)。您可以访问它,即读取和/或写入。

DELIMITER //
CREATE PROCEDURE proc_createdb (dbname VARCHAR(128))
BEGIN
    SET @theSQL=CONCAT('CREATE DATABASE ',dbname);
    PREPARE stmt1 from @theSQL;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;   
END //
DELIMITER ;

call proc_createdb('fred12236');
use fred12236;
drop schema fred12236;

void* ptr=(void*)0x80000000;
int* arr_of_int = (int*)ptr;   //access memory location as array of int
arr_of_int[0] = 0x100;          //write value to your array
int i = arr_of_int[10] ;        // read value from array

您必须确保实际上允许您在程序中访问此地址作为操作系统内核(如果您正在以用户程序运行代码)将禁止直接物理寻址。在这种情况下,您需要使用地址转换功能来计算与物理地址对应的虚拟地址。