返回
移植 MicroPython 的最小工程到 LPC5500 微控制器(2) - 调整内存分配
人工智能
2024-02-17 04:06:59
前言
在上一篇文章中,我们已经成功地将 MicroPython 的最小工程移植到了 LPC5500 微控制器上。然而,在运行程序时,我们遇到了一个内存分配的问题。在本篇文章中,我们将详细介绍如何调整内存分配,从而使 MicroPython 能够在 LPC5500 微控制器上成功运行。
调整内存分配
要调整内存分配,我们需要修改链接器脚本文件(linker script file)。链接器脚本文件的作用是告诉编译器和链接器如何将编译后的代码和数据放置在内存中。
对于 LPC5500 微控制器,我们使用的链接器脚本文件是 lpc55s69_cm33.ld
。这个文件位于 MicroPython/ports/arm/lpc5500/ld
目录下。
我们需要修改链接器脚本文件中的以下部分:
/* Define memory regions */
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 1024K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
SRAM (xrw) : ORIGIN = 0x20200000, LENGTH = 512K
}
在这段代码中,我们定义了三个内存区域:
- FLASH:这是程序代码和常量存储的区域。
- RAM:这是程序变量存储的区域。
- SRAM:这是堆存储的区域。
我们需要修改 RAM
和 SRAM
的大小,以满足 MicroPython 的内存需求。
对于 RAM
,我们需要将其大小增加到 64K。对于 SRAM
,我们需要将其大小增加到 1M。
修改后的代码如下:
/* Define memory regions */
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 1024K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
SRAM (xrw) : ORIGIN = 0x20200000, LENGTH = 1M
}
修改完链接器脚本文件后,我们需要重新编译和链接 MicroPython 的最小工程。
cd MicroPython/ports/arm/lpc5500
arm-none-eabi-gcc -O2 -march=armv7-m -mthumb -mcpu=cortex-m33 -fno-common -fno-builtin -nostdlib -nostartfiles -ffreestanding -fno-exceptions -Wall -Werror -Wno-unused-parameter -Wno-missing-braces -DSTM32F407xx -DUTILS_POSIXC=1 -DUTILS_NOW=1 -DUSE_PYB_USBD=1 -DMPY_SYS_CPU_CLOCK=200000000 -DMPY_HW_DIVIDE=0 -DUTILS_MATH_C99=1 -DMICROPY_PY_UTF8=1 -DMICROPY_PY_THREAD=1 -DMICROPY_PORT_LPC=1 -DMICROPY_HW_ENABLE_USB=1 -DMICROPY_HW_USB_MSC=1 -DMICROPY_HW_USB_HID=1 -DMICROPY_HW_CONSOLE=1 -DMICROPY_HW_ENABLE_DAC=1 -DMICROPY_HW_ENABLE_ADC=1 -DMICROPY_HW_ENABLE_I2C=1 -DMICROPY_HW_ENABLE_SPI=1 -DMICROPY_HW_ENABLE_UART=1 -DMICROPY_HW_ENABLE_PWM=1 -DMICROPY_HW_ENABLE_RTC=1 -I../.. -I../../extmod -I../../extmod/modlwip -I../../extmod/modmicropython -I../../extmod/modcan -I../../extmod/modsdcard -I../../extmod/modnetwork -I../../lib/tinyusb -I../../lib/lib-uvc -I../../lib/port -c lpc55s69_cm33.ld main.c
arm-none-eabi-ld -nostdlib --gc-sections -T lpc55s69_cm33.ld -o lpc55s69_cm33.elf main.o
编译和链接完成后,我们就可以将生成的二进制文件下载到 LPC5500 微控制器上。
openocd -f interface/stlink-v2.cfg -c init -f target/lpc5500.cfg -c "reset halt" -c "flash write_image erase lpc55s69_cm33.elf" -c "reset run"
下载完成后,我们就可以在串口终端上看到 MicroPython 的提示符了。
>>>
总结
通过调整链接器脚本文件,我们成功地解决了 MicroPython 在 LPC5500 微控制器上运行时遇到的内存分配问题。现在,我们可以继续进行 MicroPython 的开发和应用了。
版权声明
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。