硬汉嵌入式论坛

 找回密码
 立即注册
查看: 488|回复: 6
收起左侧

[ThreadX全家桶] 关于ThreadX动态加载的疑惑

[复制链接]

8

主题

14

回帖

38

积分

新手上路

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

使用道具 举报

0

主题

215

回帖

215

积分

高级会员

积分
215
发表于 2024-2-22 09:18:57 | 显示全部楼层
每个模块(app)都有自己的MPU配置,切换到对应模块的任务会重设MPU。如果需要共享数据,有函数允许设置共享的内存区域
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2024-2-22 09:24:44 | 显示全部楼层
1、支持,本质上还得多任务管理,你可以理解成一个RTOS里面不同任务分配到不同的APP里面了,每个APP可以管理多个任务。
2、每个APP都有一个独立的MPU设置。任务切换的时候会动态设置。
3、设置MPU属性,这个地址可读可写。
回复

使用道具 举报

8

主题

14

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2024-2-22 12:31:17 | 显示全部楼层
硬汉哥可以详细说一下第三点吗,比如我设置了一个二维数组,怎么确保这个二维数组的地址是0x24000000~0x24001000之间
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2024-2-22 16:11:10 | 显示全部楼层
2668350209 发表于 2024-2-22 12:31
硬汉哥可以详细说一下第三点吗,比如我设置了一个二维数组,怎么确保这个二维数组的地址是0x24000000~0x240 ...

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

使用道具 举报

8

主题

14

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2024-2-23 16:30:35 | 显示全部楼层
eric2013 发表于 2024-2-22 16:11
__attribute__((at(x)))指定空间就行,不知道你要表达的是不是这个意思。

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2024-2-24 00:28:57 | 显示全部楼层
2668350209 发表于 2024-2-23 16:30
定义数组也可以这样指定啊,at()内的地址便是数组的首地址对吗?硬汉哥


比如AC5是:
uint8_t ucHeap[64*1024] __attribute__((at(0x24000000)));

AC6就是:
uint8_t ucHeap[64*1024] __attribute__((section(".ARM.__at_0x24000000")));
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-6 02:51 , Processed in 0.168344 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表