硬汉嵌入式论坛

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

[STM32H7] 代码在片内RAM运行

[复制链接]

26

主题

70

回帖

148

积分

初级会员

积分
148
发表于 2021-12-28 16:57:29 | 显示全部楼层 |阅读模式
STM32H750的片内Flash只有128KB, 而且仅一个扇区, 一擦除就整片擦除了.
于是加了一片W25q256的NorFlash:

整个系统分为3个部分: BOOT / UPDATE / USER, 把BOOT和UPDATE的代码放入片内Flash, USER代码存放在W25q256,
BOOT和UPDATE的代码在片内Flash运行,
USER代码,
1, 把IVT拷贝到DTCM运行, ISR所需的所有参数以及堆栈在DTCM中存放;
2, 把ISR相关所有代码拷贝到ITCM运行;
3, 把剩余的代码和其余运行参数在AXIRAM中运行;
4, DMA缓冲区在SRAM1/2/3中开辟.

请问有人这样玩吗?
我目前已经实现IVT拷贝并在DTCM中运行, 代码在NorFlash上XIP运行, 但是把ISR的全部相关函数找出来貌似很难, HAL库的函数套娃好烦, 而且TOUCHGFX的库有的是封起来的, 不知这样做行不行得通.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2021-12-28 18:04:48 | 显示全部楼层
集中放在xxxx_it.C里面处理中断,仅中断的回调处理下就行,其它的也处理,稍有点麻烦。
回复

使用道具 举报

26

主题

70

回帖

148

积分

初级会员

积分
148
 楼主| 发表于 2021-12-29 08:37:17 | 显示全部楼层
eric2013 发表于 2021-12-28 18:04
集中放在xxxx_it.C里面处理中断,仅中断的回调处理下就行,其它的也处理,稍有点麻烦。

举一个实际遇到的例子吧

TouchGfx的架构使用了DMA2D的中断, 我追踪xxxx_it.c里面的DMA2D中断调用,
它首先调用xxxx_hal_dma2d.c中的库函数, 再通过回调调用应用函数,
问题是应用函数的实体封在touchgfx_core.lib文件里了, 我无法精确定位, 就不知道怎么指定它到ITCM里面了.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2021-12-29 09:21:53 | 显示全部楼层
hjhj7591418 发表于 2021-12-29 08:37
举一个实际遇到的例子吧

TouchGfx的架构使用了DMA2D的中断, 我追踪xxxx_it.c里面的DMA2D中断调用,

设置库全部放进去。
QQ截图20211229092139.png
回复

使用道具 举报

26

主题

70

回帖

148

积分

初级会员

积分
148
 楼主| 发表于 2021-12-29 09:54:14 | 显示全部楼层
eric2013 发表于 2021-12-29 09:21
设置库全部放进去。

ITCM仅有128KB, 光是把touchgfx_core.lib整个放进去就没什么空间了, 我还得腾出空间放jpeg的解码程序.
    ----------------------------------------------------------------------
      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Library Name
    119750       2142       8862        362         44      89604   touchgfx_core.lib
    ----------------------------------------------------------------------


能否通过Linker配置菜单指定到.lib件里面的特定段,再通过.sct文件进行分配呢 ?

    0x0804f6a0   0x0804f6a0   0x0000004c   Code   RO        37808    i._ZN8touchgfx13DMA_Interface10addToQueueERKNS_6BlitOpE  touchgfx_core.lib(dma.o)
    0x0804f6ec   0x0804f6ec   0x00000002   Code   RO        37881    i._ZN8touchgfx13DMA_Interface10initializeEv  touchgfx_core.lib(dma.o)
    0x0804f6ee   0x0804f6ee   0x00000002   Code   RO        37809    i._ZN8touchgfx13DMA_Interface11enableAlphaEh  touchgfx_core.lib(dma.o)
    0x0804f6f0   0x0804f6f0   0x00000002   Code   RO        37810    i._ZN8touchgfx13DMA_Interface12disableAlphaEv  touchgfx_core.lib(dma.o)
    0x0804f6f2   0x0804f6f2   0x00000006   Code   RO        37811    i._ZN8touchgfx13DMA_Interface13seedExecutionEv  touchgfx_core.lib(dma.o)
    0x0804f6f8   0x0804f6f8   0x00000008   Code   RO        37813    i._ZN8touchgfx13DMA_Interface15isDmaQueueEmptyEv  touchgfx_core.lib(dma.o)
    0x0804f700   0x0804f700   0x0000003c   Code   RO        37814    i._ZN8touchgfx13DMA_Interface16executeCompletedEv  touchgfx_core.lib(dma.o)
    0x0804f73c   0x0804f73c   0x0000000e   Code   RO        37815    i._ZN8touchgfx13DMA_Interface27waitForFrameBufferSemaphoreEv  touchgfx_core.lib(dma.o)
    0x0804f74a   0x0804f74a   0x00000006   Code   RO        37877    i._ZN8touchgfx13DMA_Interface5flushEv  touchgfx_core.lib(dma.o)
    0x0804f750   0x0804f750   0x0000002e   Code   RO        37817    i._ZN8touchgfx13DMA_Interface5startEv  touchgfx_core.lib(dma.o)
    0x0804f77e   0x0804f77e   0x000000b4   Code   RO        37818    i._ZN8touchgfx13DMA_Interface7executeEv  touchgfx_core.lib(dma.o)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2021-12-29 09:58:34 | 显示全部楼层
hjhj7591418 发表于 2021-12-29 09:54
ITCM仅有128KB, 光是把touchgfx_core.lib整个放进去就没什么空间了, 我还得腾出空间放jpeg的解码程序.
...

不用倒腾sct,直接开辟个通用SRAM,将读写Cache都开了,性能和TCM基本没区别,简单省事。
回复

使用道具 举报

4

主题

140

回帖

152

积分

初级会员

积分
152
发表于 2021-12-29 13:06:56 | 显示全部楼层
eric2013 发表于 2021-12-29 09:58
不用倒腾sct,直接开辟个通用SRAM,将读写Cache都开了,性能和TCM基本没区别,简单省事。

Cache要考虑命中率的问题吧,那个lib还蛮大的,有100多k,如果代码跳来跳去估计对Cache会影响不小。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2021-12-29 13:18:24 | 显示全部楼层
zl1215 发表于 2021-12-29 13:06
Cache要考虑命中率的问题吧,那个lib还蛮大的,有100多k,如果代码跳来跳去估计对Cache会影响不小。

基本足够用了。TouchGFX大部分时间是DMA2D在刷,计算类的并不多,综合起来,速度还是可以的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 22:23 , Processed in 0.256580 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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