瑞萨芯片具有cache,会不会在运行过程中,由于调用的环境不一致,导致cache命中的问题,从而使得每次调用的延时可能也不一致。

关于flash的延时还有一点小问题想请教下。
背景如下:
1. 主要用于系统内部的短暂延时。
a. 上电延时,大约秒级别。
b. 操作外设的延时,大约us~100us级别。
2. 目前的方法基本都是使用for循环等待。在ST的芯片上,发现代码编译的不同,可能导致延时不同,看起来似乎是LDR r0,[PC,#num],这个num的变化导致时间变化。

想确认下,
1. 上面的猜想是否正确,LDR的指令偏移量会影响运行速度。
2. 用瑞萨芯片是否会有同样的问题可能。
3. ST的芯片虽然延时会有变化,但是程序固定后,这个延时不会再变,可是瑞萨芯片具有cache,会不会在运行过程中,由于调用的环境不一致,导致cache命中的问题,从而使得每次调用的延时可能也不一致。
如果是的话,延时一般采用什么方法,定时器计时或者NOP?

Parents
  • 是的,如你所说,调用环境不一致会导致cache命中的不同,但是FSP生成的代码中延时是基于系统时钟的速率来计算的

    延时请使用:void R_BSP_SoftwareDelay (uint32_t delay, bsp_delay_units_t units);

    具体可以在FSP生成代码中的bsp_delay.c中查看具体的使用方法。需要注意的是,对于一些非常大的时间延时,因为计算过程中的四舍五入,以及被选择的系统时钟本身的精度问题等,会有不精确的现象。礼物32MHz的情况下,532秒的延迟实际会达到536秒。具体请根据自己的实际需求评价。如果需要更加精确的延迟,请使用硬件GPT等定时器实现。

Reply
  • 是的,如你所说,调用环境不一致会导致cache命中的不同,但是FSP生成的代码中延时是基于系统时钟的速率来计算的

    延时请使用:void R_BSP_SoftwareDelay (uint32_t delay, bsp_delay_units_t units);

    具体可以在FSP生成代码中的bsp_delay.c中查看具体的使用方法。需要注意的是,对于一些非常大的时间延时,因为计算过程中的四舍五入,以及被选择的系统时钟本身的精度问题等,会有不精确的现象。礼物32MHz的情况下,532秒的延迟实际会达到536秒。具体请根据自己的实际需求评价。如果需要更加精确的延迟,请使用硬件GPT等定时器实现。

Children
No Data