APM8S007X4系列将Flash函数加载到RAM上运行
APM8S007X4系列是2T 8051内核,在运算处理速度相对较慢,除了使用MDU加速运算模块加速运算之外,还可以将部分函数从Flash加载到RAM上运行。
详细步骤如下:
步骤一:将函数编译到 RAM 中。
在 APM8S007X4 系列的 SDK 中打开示例工程“Flash_To_SRAM_Run”。将 Flash 的函数加载到 RAM 中,首先需要将函数编译在 RAM 的地址上,这样才能避免因为 AJMP\LJMP 指令导致程序在 RAM 运行后,又跳转回 Flash 空间。
示例工程中,将函数 add_func_inram(u8 cef1, u8 cef2)和函数 dec_func_inram(u8 cef1, u8 cef2)加载到 RAM 中运行。
(1)划分 RAM 空间为 Flash 空间:
图1 - 将 RAM 空间化分为 Flash 空间
APM8S007X4 系列的 RAM 空间大小为 0x6000~0x66FF 之间,示例中是将0x6000~0x62FF 划分为 xdata 空间,将 0x6300~0x66FF 划分为 Flash 空间。这里需要注意,Code 空间需要设置为 0x3FFC,需要在末尾预留 4 byte 作为 bin 文件的 CRC。
注意:将 RAM 分配为 Flash 时,地址需要 0x100 对齐,长度需要 0x100 对齐。
(2)将要加载 RAM 的函数指定编译到 RAM 中:
图2 - 将函数指定编译到 RAM 空间
在文件“Demo.m51”中找到要函数编译后的标识 SEGMENT NAME,两个函数的标识符分别为:
add_func_inram(?PR?_ADD_FUNC_INRAM?MAIN)
dec_func_inram(?PR?_DEC_FUNC_INRAM?MAIN)
图3 - 在文件“Demo.m51”中查找 SEGMENT NAME
找到函数对应的 SEGMENT NAME 后,将其设置到图 7.2 中,每加一个段,使用“,”进行间隔,只需要第一个段指定 RAM 的地址即可。
步骤二:程序上操作
(1)RAM 空间和对应 Flash 的储存空间声明:
以下是 RAM 空间和 Flash 空间的变量声明,其中:
- FLASH_TO_RAM_LEN:是指 RAM 作为函数运行的空间大小,与图 7.1 中的配置保持一致,设置为 0x400,按照 0x100 对齐;
- sram_func_xdata:是 RAM 作为函数运行的 buf,在这里声明,是为了方便将数据从 Flash 加载到 RAM 的操作,注意后面需要指定地址,该地址也是与图 7.1 中的配置保持一致,设置为 0x6300,地址按照 0x100 对齐;
- sram_func_code:是 RAM 作为函数时,将数据缓存到 FLASH 中,该操作会在下载时执行,但是工程需要提前声明空间。需要注意的该 buf 也是需要指定地址空间的,该地址空间是会将 0x6000~0x66FF 映射到 0x3000~0x36FF 中。所以如果 RAM 作为函数的起始的地址空间为 0x6300,则映射的 FLASH 中为 0x3300。
图4 - RAM 空间和 Flash 空间变量声明
(2)将 Flash 中的函数加载到 RAM 中:
图5 - Flash To RAM 函数实现
程序运行后,需要将 Flash 的函数加载到 RAM 中。然后函数就正常调用即可,不需要
其他额外的操作。
注意:要支持上述描述的功能,需要将 GeehyLink 的驱动升级到
“GeehyLink_keil_C51_driver_install_V1.2.9”及以上版本才能实现上述功能。
步骤三:烧录器 GeehyProgrammer 的烧录文件
(1)因为将 RAM 的空间变成 Flash 空间,所以编译后的 hex 文件的 Flash 数据一定会超过 0x4000 的地址,所以需要将文件进行转换。
打开“Flash_To_SRAM_Run” 例工程,进入到“Project\Keil\Release”的目录下,则会与比其他的示例工程多了 BinScript.BinScript、FlashToRam.BinScript、BinScript.exe 和make.bat 的文件,如果是移植到其他工程则需要将这几个文件移植过去。
在编辑界面中打开设置,将 make.bat 的批处理添加到编译完成的调用配置中。
图7 - 在设置中添加批处理
如果不在上述配置中添加,用户也可以手动运行 make.bat。
(2)批处理的修改。
同样的如果图 7.1 中的配置修改了,则批处理的配置文件也需要同步修改,打开文件
FlashToRam.BinScript,在图 7.8 对应的位置修改即可。
图8 - 修改批处理文件
(3)最后注意,编译出来的 bin 文件一定是小于等于 16K-4,如果大于 16K-4 使用烧
录器下载会异常报错。使用 hex 和 bin 文件都可以进行下载。
图9 - 修改批处理文件
|