硬汉嵌入式论坛

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

[STM32H7] FMC_SRAN的奇怪现象,任务内和任务外查询同一地址,地址信号不一致

[复制链接]

6

主题

21

回帖

39

积分

新手上路

积分
39
QQ
发表于 2024-4-12 11:26:36 | 显示全部楼层 |阅读模式
测试平台使用的安富莱V7板

仅使用逻辑分析仪勾出了引脚波形,其实是没有SRAM外设的
当我读一个地址时,FMC片选3区域,地址线路0x17,在任务外可以正常读,波形很正常。但是任务内再读,会读好多地址。

此为任务外运行,波形正常(设置的8位地址线模式)

任务外代码

任务外代码

任务外波形

任务外波形


此为任务内运行,诡异的多了很多读使能

任务中代码

任务中代码

任务中波形

任务中波形


完蛋了,找不到问题了,学习不努力,处处是魔法
回复

使用道具 举报

6

主题

21

回帖

39

积分

新手上路

积分
39
QQ
 楼主| 发表于 2024-4-12 15:28:01 | 显示全部楼层
我发现问题是啥了,但是没办法解决。
我用的是带模组管理器的threadX,如果用不带模组管理器的threadX内核则没有这个问题。
这可咋办,有没有老哥研究过。
回复

使用道具 举报

6

主题

21

回帖

39

积分

新手上路

积分
39
QQ
 楼主| 发表于 2024-4-12 18:17:22 | 显示全部楼层
又有新发现了,我带模组管理器的threadX,MPU使能不上。我记得这个模组管理器是会把MPU接管掉的,只要一进任务调度,不知道哪里就会把MPU给我关掉。

但是安富莱 ThreadX Module Main 有模组管理器的例子,在例子中MPU可以手动控制,这是哪里配置的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2024-4-13 08:50:25 | 显示全部楼层
yono 发表于 2024-4-12 18:17
又有新发现了,我带模组管理器的threadX,MPU使能不上。我记得这个模组管理器是会把MPU接管掉的,只要一进 ...

使用非MPU模式即可。我分享了一个MPU管理的和一个非MPU管理的。
回复

使用道具 举报

6

主题

21

回帖

39

积分

新手上路

积分
39
QQ
 楼主| 发表于 2024-4-19 14:44:09 | 显示全部楼层


threadX的module_manager在tx_thread_schedule.S中有这样的操作,导致调度时关闭MPU,屏蔽可以使得初始化时的MPU设置生效。
屏蔽MPU关断的操作.png


但是仍然会带来新的问题,如果加载使用了MPU的APP,管理器本体的MPU设定就被APP覆盖,就不生效了,导致很多硬件接口不能正常工作。
如何让管理器和APP都自由使用MPU,是一个问题。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2024-4-20 08:32:26 | 显示全部楼层
yono 发表于 2024-4-19 14:44
threadX的module_manager在tx_thread_schedule.S中有这样的操作,导致调度时关闭MPU,屏蔽可以使得初始 ...

每个APP和BOOT都可以独立动态配置MPU的。可以考虑合理规划下。
回复

使用道具 举报

6

主题

21

回帖

39

积分

新手上路

积分
39
QQ
 楼主| 发表于 3 天前 | 显示全部楼层
后续研究了一下

想要APP与管理器使用不同的MPU配置,首先需要在汇编器中开启 TXM_MODULE_MPU_DEFAULT 定义,这样在管理器任务调度时就会进行恢复MPU配置的操作。
汇编器预定义.png

然后恢复的MPU配置是什么呢?需要在txm_module_port.h中修改定义。其中_RBAR_RASR的值是多少,可以在寻常修改MPU的函数HAL_MPU_ConfigRegion()中打断点追踪一下,再依次填写到定义中。
MPU配置.png

最后的问题是threadx给的port中,修改MPU配置部分的汇编和H7不匹配。调度时修改MPU配置的部分在tx_thread_schedule.s中的default_mpuconfig_mpu段。他给的port是加载mpu配置基址到r1寄存器(甚至实际上没有加载,配置到内存里去了,原版port中r1还在指向_tx_timer_thread),随后依据基址连续赋值配置,这需要芯片本身的MPU配置区域是连续的。但是H7不是,那么我们需要修改的就是这个MPU配置赋值的部分,让他赋值符合H7的配置操作就好了。
操作系统调度时MPU修改.png



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 05:34 , Processed in 0.177955 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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