如何使用32B1H的TCM优化系统性能
-
32B1H内置32KB的ITCM和128KB的DTCM,不使用的话太可惜了。
虽然cache同样能起到系统加速的作用,但存在命中率问题;并且还要考虑多主机访问时的nocache问题。而TCM不会存在类似问题。
之前在NXP的M7平台下是通过修改icf链接文件处理的,以文件为单位:
initialize by copy { section .text object bsp_radar.o};
place in QACODE_region { section .text object bsp_radar.o }; // ITCM
place in DATA_region { readwrite data object bsp_radar.o }; // DTCM
效果非常明显。32B1H的链接文件是借助YT-LINK自动生成的,不建议手工修改icf链接文件。现在是这样处理的:
#define DTCM_VAR attribute((section(".dtcm_data")))
#define ITCM_FUN attribute((section(".ramcode")))ITCM目前是这样处理的:
1 - 以函数为单位;
2 - 关键函数放入ITCM;
3 - 中断回调函数放入ITCM;这个过程暂时是正常的,处理完毕后综合性能大约提升10%。但也有一些问题:
1 - 不能以文件为单位设置;
2 - 有些函数打入ITCM能提升性能,而有些函数打入ITCM反而不行;应该是还需要变量放入DTCM才行。变量存放于DTCM一直未测通,几个表格可以,如:
const uint8_t auchCRCHi[] = {但全局变量一旦加上DTCM_VAR做修饰,就会有编译错误。
按论坛官方提供的方案:“确保yt-link DATA_FLASH 和 DATA_RAM 有同样的对齐配置”,修改对齐参数,也没什么用。
结论:
1 - ITCM暂时还没有出现过check failed错误,但现在只能以函数为单位配置,不方便;
2 - DTCM无法配置,128KB空间用不起来太浪费了
发帖前请查看
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...