2668350209 发表于 2024-2-22 01:16:57

关于ThreadX动态加载的疑惑

在硬汉哥的动态加载app玩法中有以下几个疑惑点
1.如果同时加载多个app,是否支持
如果支持,那么什么时候会进入第一个App什么时候会进入第二个app,他的判别方式是什么。
2.因为进入app后会更改内存保护单元的设置,这就带来问题
      比如我串口正在接收一个接收一个数据,突然转换app了,原本主程序放置串口数据的那一部分受到保护部分不允许访问了这不就导致主程序崩溃吗
3.怎么能把数据放置在一段固定的内存区间内,比如串口一的数据只可以放在0x2400000~0x24001000 串口二的只可以放在0x24001000~0x24002000之间
只能使用keil5中分散加载的方式吗?有没有更简单的方法
      

regbbs 发表于 2024-2-22 09:18:57

每个模块(app)都有自己的MPU配置,切换到对应模块的任务会重设MPU。如果需要共享数据,有函数允许设置共享的内存区域

eric2013 发表于 2024-2-22 09:24:44

1、支持,本质上还得多任务管理,你可以理解成一个RTOS里面不同任务分配到不同的APP里面了,每个APP可以管理多个任务。
2、每个APP都有一个独立的MPU设置。任务切换的时候会动态设置。
3、设置MPU属性,这个地址可读可写。

2668350209 发表于 2024-2-22 12:31:17

硬汉哥可以详细说一下第三点吗,比如我设置了一个二维数组,怎么确保这个二维数组的地址是0x24000000~0x24001000之间

eric2013 发表于 2024-2-22 16:11:10

2668350209 发表于 2024-2-22 12:31
硬汉哥可以详细说一下第三点吗,比如我设置了一个二维数组,怎么确保这个二维数组的地址是0x24000000~0x240 ...

__attribute__((at(x)))指定空间就行,不知道你要表达的是不是这个意思。

2668350209 发表于 2024-2-23 16:30:35

eric2013 发表于 2024-2-22 16:11
__attribute__((at(x)))指定空间就行,不知道你要表达的是不是这个意思。

定义数组也可以这样指定啊,at()内的地址便是数组的首地址对吗?硬汉哥

eric2013 发表于 2024-2-24 00:28:57

2668350209 发表于 2024-2-23 16:30
定义数组也可以这样指定啊,at()内的地址便是数组的首地址对吗?硬汉哥


比如AC5是:
uint8_t ucHeap __attribute__((at(0x24000000)));

AC6就是:
uint8_t ucHeap __attribute__((section(".ARM.__at_0x24000000")));
页: [1]
查看完整版本: 关于ThreadX动态加载的疑惑