硬汉嵌入式论坛

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

[SRAM] STM32H743,请教如何将部分程序放入到ITCM中执行,基于IAR编译器

[复制链接]

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-5-28 11:15:46 | 显示全部楼层 |阅读模式
本帖最后由 qq1646544 于 2023-5-28 11:29 编辑

看了硬汉哥的例程制作了KEIL5代码放入ITCM。

自己捣鼓了一下,用IAR编译器将部分关键代码放入到ITCM。
IAR8.4提示为:

Warning[Ta021]: Library call (__aeabi_uldivmod) from within a __ramfunc function


更新的版本如IAR9.3会直接将这个Warning级别变为Error级别!


在网上搜了一下,说这个“__ aeabi_uldivmod()”是正在执行无符号的长除法和提醒操作。也就是在ITCM调用了非ITCM的__ aeabi_uldivmod()函数


我在icf文件定义了这个itcm区域,如下格式:


define symbol __ICFEDIT_region_ITCMR_start__  = 0x00000000;
define symbol __ICFEDIT_region_ITCMR_end__    = 0x0000FFFF;

define region ITCMR_region  =   mem:[from __ICFEDIT_region_ITCMR_start__  to __ICFEDIT_region_ITCMR_end__ ];
place in ITCMR_region  { section .textrw };

查询之前帖子,需在函数前放入__ramfunc 即可把指定的某个函数放入到ITCM中,

但是我的函数会涉及到这个无符号的长除法的操作,如何能解决掉这个提示信息?


IAR怎么像MDK KEIL5那样直接将某个C文件放入到指定区域去执行,必须要改分散加载文件吗?
c8.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2023-5-28 11:38:33 | 显示全部楼层
IAR9.3提示比较明确,在ramfun里面调用了一个非ramfun的函数aeabi ul2f

下载 (2).png
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
 楼主| 发表于 2023-5-28 11:40:58 | 显示全部楼层
eric2013 发表于 2023-5-28 11:38
IAR9.3提示比较明确,在ramfun里面调用了一个非ramfun的函数aeabi ul2f

对的,我的疑问在于如何消除这个error,是规避使用这种计算方式吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2023-5-28 11:54:22 | 显示全部楼层
屏蔽警告,改为返回uint64_t, 精度问题自己处理。

#pragma diag_suppress=Ta021
#pragma diag_suppress=Ta022
#pragma diag_suppress=Ta023

__ramfunc uint64_t testfun ()
{
   uint64_t y;
   unsigned int n;
   
   y = (uint64_t)(n+3)*(uint64_t)(n+2)*(uint64_t)(15*(n-1)+9)/ 5;

  return y;

}
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
 楼主| 发表于 2023-5-28 11:58:18 | 显示全部楼层
eric2013 发表于 2023-5-28 11:54
屏蔽警告,改为返回uint64_t, 精度问题自己处理。

#pragma diag_suppress=Ta021

好的,感谢硬汉哥,我自己再研究一下
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
发表于 2023-5-29 10:43:39 | 显示全部楼层
IAR 没试过,期待大佬的研究成果,我在 GCC 上尝试并成功了,https://blog.csdn.net/whj123999/ ... 1001.2014.3001.5501
回复

使用道具 举报

19

主题

234

回帖

291

积分

高级会员

积分
291
发表于 2023-5-29 10:47:45 | 显示全部楼层
可以翻一下NXP的RT系列的SDK,里面提供了各种示例
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2023-5-29 11:03:35 | 显示全部楼层
王海靖 发表于 2023-5-29 10:43
IAR 没试过,期待大佬的研究成果,我在 GCC 上尝试并成功了,https://blog.csdn.net/whj123999/article/det ...

这个是IAR的问题,不影响,官方做了解释。

IAR提示:Call to a non __ramfunc function from within a __ramfunc function
https://www.armbbs.cn/forum.php?mod=viewthread&tid=119415
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2023-5-29 11:03:38 | 显示全部楼层
tovinz 发表于 2023-5-29 10:47
可以翻一下NXP的RT系列的SDK,里面提供了各种示例

这个是IAR的问题,不影响,官方做了解释。

IAR提示:Call to a non __ramfunc function from within a __ramfunc function
https://www.armbbs.cn/forum.php?mod=viewthread&tid=119415
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 01:14 , Processed in 0.185952 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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