嵌入式c在串行闪存上使用外部字符串资源有现成的解决方案吗



我正在开发一个128K RAM的SoC,目前UART打印太多,所以我们必须通过从内存中绘制来减少代码大小。

我们有一个工作的128Mb SPI串行闪存板,我想在上面存储字符串。请注意,闪存或我们的固件中没有文件系统。

相反,我想知道有什么有用的代码、标准或其他材料可以供我们使用吗?

包括:(以下任何内容都可能有所帮助)

  1. 库生成
  2. 资源获取方法实现
  3. SPI FLASH读/写。(事实上是我写的。)

我期待这样的东西:

UART_PRINT(C315);

FLASH上有一个"C315"项目,对应"Hello world"。

我们读取它,然后在运行时通过UART打印。最终的结果是终端上的"你好世界"。

当然,任何能让我大吃一惊的事情都是受欢迎的

创建一个指向字符串的指针数组,并在数组中使用类似于资源的索引。这个数组以及字符串都可以存储在闪存中。对指针和字符串数组使用汇编程序可能更容易,可能是作为嵌入代码的单独构建。您需要将.h包含文件中使用的索引名称与指向字符串的指针数组进行协调,类似于windows应用程序中使用的资源文件。这可以通过一堆定义或枚举来完成:

enum stringindexes{C000, C001, ...};

update-我想知道是否可以使用类似windows资源编辑器的东西来创建指针和字符串。这需要一些反向工程来创建一个实用程序,将生成的资源文件转换为只有指针和字符串数组的二进制图像,但它会自动生成为指针命名的include文件。如果有什么不同的话,资源编辑器可以作为创建自定义程序的指南,以生成包含文件,该文件包含要索引到字符串指针数组中的定义或枚举。

您可以利用链接器。

将SPI FLASH字符串放在自定义区域的自定义部分中。使用链接器生成的自定义区域内容对SPI FLASH进行编程。

使用字符串指针作为UART_PRINT()的参数。函数应该通过从字符串指针中减去自定义节的基地址来将指针转换为偏移量。然后使用偏移量从SPI FLASH中检索字符串。

最新更新