Gcc 映射外部存储设备

Gcc 映射外部存储设备,gcc,memory,linker,arm,cortex-m,Gcc,Memory,Linker,Arm,Cortex M,我正在使用GCC工具链和ARM Cortex-M0 uC。我想问一下,是否可以在链接器中定义一个空间,以便读写操作调用外部设备驱动程序函数来读写它的空间(例如SPI内存)。谁能给点提示怎么做? 你好,拉法 编辑: 感谢您的评论和回复。我的设置是: 随机访问SPI内存通过SPI控制器连接,我使用“标准”驱动程序访问内存空间并从中存储/读取数据 我想做的是避免显式调用驱动程序的函数,而是将它们隐藏在某个固定的RAM地址后面,这样对该地址的任何读取都将调用spi读取内存驱动程序函数,而写入将调用spi

我正在使用GCC工具链和ARM Cortex-M0 uC。我想问一下,是否可以在链接器中定义一个空间,以便读写操作调用外部设备驱动程序函数来读写它的空间(例如SPI内存)。谁能给点提示怎么做? 你好,拉法

编辑: 感谢您的评论和回复。我的设置是: 随机访问SPI内存通过SPI控制器连接,我使用“标准”驱动程序访问内存空间并从中存储/读取数据


我想做的是避免显式调用驱动程序的函数,而是将它们隐藏在某个固定的RAM地址后面,这样对该地址的任何读取都将调用spi读取内存驱动程序函数,而写入将调用spi写入内存函数(初始地址的偏移量将是外部内存中数据的地址). 我怀疑在没有MMU的情况下,这在加州大学是完全可能的,但我认为,询问其他可能有类似想法的人总是值得的

不,这不是它的工作原理。Cortex-M0没有内存管理单元,因此无法拦截对特定内存区域的访问

现在还不清楚你想要实现什么。如果您已将SPI内存连接到芯片外部,则必须使用驱动程序执行所有访问,因此无法对SPI端口抽象进行内存映射

如果这是一个设备上的SPI内存控制器,它将在内存映射中有两个区域。一个是“内存”区域,可能是只读的,一个是内存控制器硬件的控制寄存器,设备驱动程序与这些寄存器对话。具体来说,要写入SPI,您需要执行驱动程序访问以执行写入


在极端情况下(例如,Cortex-M1用于Xilinx),将有一个用于内存映射行为的就地执行(XIP)外围设备,以及一个用于读/写功能的SPI主设备。GPIO引脚用于在“内存模式”和配置模式之间多路传输SPI EEPROM引脚。

SPI很少以这种方式映射,您必须通过SPI控制器进行通信。可能有一些罕见的例外,但到目前为止,我还没有在mcu中看到这些例外。cortex-m与spi无关,它是arm的核心。芯片公司增加了spi控制器(st、atmel、ti等)。因此,这不是一个cortex-m问题,也不是一个手臂问题。如果你想知道如何控制链接器,那么如果你展示你的尝试,这是一个公平的问题。但如果这是一个spi问题,那么gcc和linker等也不是相关的标记。