This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
这方面没有相关的教程或代码、因为我们的 MPU 将某个区域配置为不可执行、并且希望通过将函数复制到此 RAM 区域来运行 MPU 保护。
基于上述理念、我想测试闪存是否可以实现 MPU 执行保护。 如下图所示,我在0x6220 (25120)的起始地址后将32个字节配置为不可执行的权限,然后在 程序中执行“TR1+(25112)”。 当启动 MPU 保护时、程序会跳转到"b prefetchEntry"。 那么、我想问的是、程序目前一直卡在"b prefetchEntry"中、如何进入相关的中断函数?
闪存 MPU 配置:
您好!
链接器具有支持在一个地址分配段以进行加载的功能、以及支持在另一个地址分配执行的功能。 这样可以轻松地从加载地址复制到运行地址。 请参阅 CAN 引导程序的源代码、该程序将闪存 API 部分复制到 SRAM、并从 SRAM 执行闪存 API。
1.链接器 CMD 文件:为闪存 API 定义一个段
存储器
{
引导程序 (X) :origin=0x00000000 length=0x00000020
Flash_API (RX) :origin=0x00000020 length=0x000014E0
FLASH0 (RX) :origin=0x00001500 length=0x00000500 //LS04x,RM42闪存大小为0x60000
SRAM (RW) :origin=0x08002000 length=0x00005000 //LS04x,RM42 SRAM 大小为0x8000
… …
}
部分
{
.intvecs:{}>向量
闪存 API:
{
bl_flash.obj (.text)
(笑声) (笑声)
}load = flash_API、run = SRAM、load_start (api_load)、run_start (api_run)、size (api_size)
.text > FLASH0
(笑声) (笑声)
}
2.将 flashAPI 段从闪存复制到 SRAM:
;------------------------------------------------------------------
;
;将闪存 API 从闪存复制到 SRAM。
;
.def _APIcopy2RAM_
asmfunc
copyAPI 2RAM_
.ref API_load
FLASH_LOAD .word API_LOAD
.ref API_run
FLASH_run .word API_run
.ref API_size
FLASH_SIZE .word API_SIZE
LDR r0、FLASH_LOAD
LDR R1、FLASH_RUN
LDR R2、FLASH_SIZE
添加 R2、R1、R2
COPY_Loop1:
LDR R3、[r0]、#4
STR R3、[R1]、#4
CMP R1、R2
BLT COPY_LOOP1
BX LR
endasmfunc
大家好、非常感谢您的回复。
还有几个问题:
1.您提到的 CAN 引导程序源代码在哪里?
bL_flash.obj (.text)是否引用 bi-flash.c 文件?
3.目前,我们想把一个函数(而不是 c 文件)放入一个要运行的 RAM 中,需要做些什么?
4、我想在闪存(RO)的某个区域执行 MPU 触发保护我设置了、我需要如何测试? 如何将数据写入指定地址 μ?的闪存
或者您的电子邮件地址是什么? 我们可以通过电子邮件向您提出问题吗?
非常感谢您的回复
对于第三个问题、您能否举一个例子:
例如、我现在在 main.c 中有一个 void fFun (void){...}的函数、那么我如何复制该函数(仅需要此函数,因为您之前的恢复似乎是将整个.c 文件复制到 RAM 中、我现在只需要一个函数。) RAM 地址0x08003CFC 开始运行的地址?
期待您的回复!