This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS:SYSBIOS/NoSysBios - EMIFA/EMIFB 速度差异

Guru**** 2562120 points
Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/626382/rtos-sysbios-nosysbios---emifa-emifb-speed-differences

Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

大家好、

// OMAPL137BZKB3

我将 SysBIOS (仅 BIOS 模块)用于我的项目、并且我将在 L2 RAM 中运行固件 whtin (256k)。
几年后、我的项目变得相当大、不再适合 L2 RAM。
因此、由于我不使用 SYSBIOS 中的任务或任何特殊内容、我的解决方案是从我的项目中删除 SYSBIOS (给了我大约25k 的空间)。
到目前为止一切都正常、但我发现、由于某种原因、使用 SYSBIOS 时、存储器访问速度似乎更快。

我使用相同的代码制作了两个测试项目以弄清这一点(SYSBIOS/NoSysBios):
(我通过切换引脚并使用 oszi 读取它们来测试此情况)

void main (void)
{
// init 填充(与 SYSBIOS/NoSysBios 相同)
// PLL 300MHz
// SDRAM 16 MB (0xC7000000 - 0xC8000000)->使用相同的 EMIFB 配置
//...

uint8 * pSdram;

//仅使用 SDRAM (EMIFB)地址
pSdram =(uint8*) 0xC7FFFB00;

//在 EMIFB 上写入
// SYSBIOS -> 54ns
// NoSysBios -> 54ns
*pSdram = 0;

//读取/写入 EMIFB
// SYSBIOS -> 54ns
// NoSysBios -> 54ns
*pSdram ^=*pSdram;

//读取 EMIFB/写入 EMIFA
// SYSBIOS -> 67ns
// NoSysBios -> 242ns //???
*((volatile UINT8*) 0x60000301)=* pSdram;

//在 EMIFA 上写入
// SYSBIOS -> 54ns
// NoSysBios -> 54ns
*((volatile UINT8*) 0x60000301)= 0;

//读取/写入 EMIFA
// SYSBIOS -> 320ns
// NoSysBios -> 307ns
*(volatile UINT8*) 0x60000301)^=*(volatile UINT8*) 0x60000301);
} 

当从 CCS 获取两个工程的寄存器转储时、配置是相同的。
此外、该 main.obj 的汇编器代码看起来完全相同。

有人知道这是什么原因吗?

此致、Tom

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tom、

    是否在设备上启用高速缓存? 两个项目的代码放置是否相同? 您在哪个内核上看到了这种情况?

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Todd、

    感谢您的回复。  

    我正在 L2 RAM 内的 DSP (OMAPL137)上运行此固件。

    L1/L2的高速缓存控制寄存器对于两个项目完全相同(通过使用 CCS 进行调试来获得它们)。 但我没有自己强制缓存。

    放置意味着什么? 两个项目的代码以及 asm 文件都是相同的。  

    此致、Tom

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Tom Heckel">放置意味着什么? 两个项目的代码以及 asm 文件都是相同的。  [/报价]

    对于两个项目,main()在内存中的位置是否完全相同?

    SYS/BIOS 在 main()之前进行一些设置。 它可以在 main()之前填充高速缓存。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Todd、

    很抱歉耽误你的时间。 没有、main.obj 位于两个工程的映射文件中的不同位置。
    这也是我要说的。 但是、由于寄存器值是相同的、因此我无法真正理解它。

    此致、Tom
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否确认高速缓存 MAR 位完全相同?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Todd、

    你是对的。 遗憾的是、我使用 CCS 导出的寄存器转储不包含高速缓存寄存器。 当我第一次想到缓存时、我刚刚注销了 L1/L2缓存的控制寄存器、而不是 MAR 寄存器。

    使用 SYSBIOS 时、MAR199位设置为1。 该寄存器代表我的 SDRAM 区域。 因此、将该寄存器设置为1可以解决我的问题。

    感谢您的支持。

    此致、Tom