532791928@qq 发表于 2018-4-9 21:43:58

rt1050外挂flash有木有可能是整个系统的运行速度的瓶颈?

各位大神:
       RT1050最大可以跑600M,确实诱惑很大,但是其内部不带flash,需外挂nor/nand flash。
       从rt1050的启动配置数据来看,最大支持的SPISCK也就是166M,针对死贵的HyperFlash(8线),但是实际项目中可能更多考虑成本问题,使用的是ISSI QSPI Flash等, 普遍为4线 最大支持133M,如果项目配备这样的QSPI Flash会是整个系统运行的瓶颈么?
       RT1050开启指令cache(32k cache),会从FLash中读取指令缓存到cache中以加快执行效率,但如果此时来一个中断,cache中此时并没有中断响应函数的指令,这个时候理论上应该要重新从flash中读取相应的指令到cache中,然后才能执行中断响应函数,如果这个时候1050与flash通信速率慢的话,获取指令相应的占时就会比较长,如果中断频率稍微过快的话,就很大可能导致中断无法及时响应或者丢失中断。 按照目前我测试中断函数执行时间,经常有出现中断函数无法及时响应的(中断优先级最高),中断函数时间执行过长的情况(中断函数所执行的任务很少,正常不应该花费这么长时间)。我将整个缩减版的工程调试放置在ram中跑,是不会出现这样的情况的。
       所以请问下,如果项目配备这样的QSPI Flash会是整个系统运行的瓶颈么?如何评估呢?如何处理应对这样的问题?

unknownuser 发表于 2018-4-9 22:11:53

可以试着把对实时性要求较高的函数,vector table, 等放到TCM里去跑,对实时性要求不高的函数放在QSPI FLASH里,这样应该能解决大部分问题。

xufeixueren 发表于 2018-4-10 09:26:17

这么强的芯片,做复杂产品一般都会挂SDRAM的,程序加载到SDRAM中运行就会快很多。芯片的TCM空间有点小,不过凑合还能用。

532791928@qq 发表于 2018-4-10 14:56:00

unknownuser 发表于 2018-4-9 22:11
可以试着把对实时性要求较高的函数,vector table, 等放到TCM里去跑,对实时性要求不高的函数放在QSPI FLAS ...

感谢大神的回复
我这也是按照这样的思路去操作。
对于vector table:
有个疑问:rt050重映射中断向量表,这个该如何操作,它不像stm32有中断向量表寄存器可以配置,并且rt1050的ivt数据中也得明确函数入口地址,大神是否做过,可否给个配置文件学习学习?

对于调用频率高的函数:
我们使用的是iar平台,按照iar手册去修改连接icf文件,试图将关键性代码配置到ram中,发现实验一直不成功!比如我在icf文件中配置

initialize by copy { section .text object board.o };//自动拷贝到ram中
place in ITCM_region                        { section .text object board.o};

实际测试不成功,查看编译log文件会有此提示:
++ The following sections would have been initialized by copy but were
   excluded because they were marked as possibly 'needed for init':
   .text (board.o #8)
也就是实际并未拷贝,导致我程序一旦执行board.c中函数就会出现硬件错误中断,提示试图执行未定义指令。

unknownuser 发表于 2018-4-10 15:04:21

532791928@qq 发表于 2018-4-10 14:56
感谢大神的回复
我这也是按照这样的思路去操作。
对于vector table:


其实不能把ROM需要的boot image前面的IVT和vector table混为一谈。

可以试试如下的操作:

memcpy(vectorTableRAM, vectorTableROM, vectorTableSize);

SCB->VTOR = (uint32_t)&vectorTableRAM.

注意这个vectorTableRAM的地址得是512字节对齐的。

532791928@qq 发表于 2018-4-10 16:22:45

unknownuser 发表于 2018-4-10 15:04
其实不能把ROM需要的boot image前面的IVT和vector table混为一谈。

可以试试如下的操作:


谢谢大神的指点,按照你说的设置,能够响应中断!
这样也仅仅是将中断向量表映射到ram,中断响应函数还是在flash中,所以如果要加快运行效率,应该讲中断响应函数也一并加载到ram中,没错吧?

lwplwp2 发表于 2018-4-13 15:58:04

unknownuser 发表于 2018-4-10 15:04
其实不能把ROM需要的boot image前面的IVT和vector table混为一谈。

可以试试如下的操作:


前辈,请教一下关于内部启动代码在启动时加载boot image和用户程序的过程 相关工作原理可以参照哪里的资料?看RM手册没找到相关的描述

unknownuser 发表于 2018-4-13 16:52:15

lwplwp2 发表于 2018-4-13 15:58
前辈,请教一下关于内部启动代码在启动时加载boot image和用户程序的过程 相关工作原理可以参照哪里的资 ...

官方的System Boot那一章其实需要的信息都有,只是不太好都联系在一起,需要自己读完后自己来理解,你可以参考我回的另一位网友的帖子

http://www.armbbs.cn/forum.php?mod=viewthread&tid=86167&page=1#pid129298

12楼。

开始研究这个芯片的时候,其实不需要在这一块花太多时间,就用SDK的配置就好了,如果需要改flash config,大部分的QSPI FLASH可能都差不多

lwplwp2 发表于 2018-4-13 18:54:37

unknownuser 发表于 2018-4-13 16:52
官方的System Boot那一章其实需要的信息都有,只是不太好都联系在一起,需要自己读完后自己来理解,你可 ...

嗯!感谢前辈的指点。:handshake

lwplwp2 发表于 2018-4-13 19:05:24

unknownuser 发表于 2018-4-13 16:52
官方的System Boot那一章其实需要的信息都有,只是不太好都联系在一起,需要自己读完后自己来理解,你可 ...

刚毕业的新手,公司让设计bootloader这块的内容,所以想把启动相关的原理都搞清楚一点

alexyzhov 发表于 2018-4-14 09:49:05

iar里有个编译器拓展,函数声明和定义的时候加个__ramfunc修饰就能把函数放到内存执行了。textrw段,一般都放在ITCM

touchzou 发表于 2018-5-2 08:20:17

把对速度有要求的代码放到内存里面,参考DEMO例程里面的power_switch

tanek 发表于 2018-5-30 23:37:45

总的来说,还好,一般程序的热点部分也不会太大。
页: [1]
查看完整版本: rt1050外挂flash有木有可能是整个系统的运行速度的瓶颈?