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/F28M36P63C2:memcpy 失败(将 RamFuncs 从加载地址复制到起始地址)

Guru**** 2596975 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/586009/rtos-f28m36p63c2-memcpy-failing-copy-ramfuncs-from-load-address-to-start-address

器件型号:F28M36P63C2

工具/软件:TI-RTOS

我在上星期三发布了这篇文章(作为对我之前发布的帖子的回复)、但没有收到答案;我在这里发布了新话题、以防上一篇文章因某种原因而被错误发布。

我想知道如何配置 GPIO 以输出8位值(串行方式)。  我的 C28x main()开始如下:

int main (void)
{
   dgpio (main_enter);// gpio 调试:main ()
   InitRAM ()的开始;

   dgpio (main_copy); // gpio 调试:在 memcpy ()
    之前(&RamfuncsRunStart、&Ramfuncsgpio Start、(size_t)&RamsLoadsgp2);Dfuncsgp2
   (main/memcp2) 

我构建并刷写此代码、然后在调试器外部运行它、并使用示波器观察 GPIO 引脚。  在 O 示波器上、我在 GPIO 引脚上看到 MAIN_ENTER 和 MAIN_COPY 代码、但我看不到 MAIN_COPY2代码。  以下是链接器脚本文件中定义 RamfuncsRunStart (等)的文本:

组
{
    ramfuncs
    {
        -l F021_API_C28x_FPU32.lib
    }
 
  load = flash page = 0、
    run = L0_S4_RAM page = 1、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsLoadStart
    (_RamfuncsSize)、run_RamfuncsSize (RamfuncsRun_Runs)
    run_end (_RamfuncsRunEnd) 

闪存页在第0页中定义为:
闪存       :origin = 0x00130000,length = 0x0000FFF0 // bootloader flash

第1页中将 L0_S4_RAM 块定义为:
l0_S4_RAM    :origin = 0x00008000、length = 0x00009000 //片上 RAM 块 L0-L3、S0-S4

在通知 C28x 内核从闪存加载其代码之前、ARM 内核将共享存储器块 S0-S4分配给 C28x。  基于构建中的映射文件、Ramfuncs 最终位于共享存储器(S2和 S3)中:

00135bf2 _RamfuncsLoadStart
0013663c _RamfuncsLoadEnd
00000a4a _RamfuncsLoadSize

0000e5d4 _RamfuncsRunStart
0000f01e _RamfuncsRunEnd
00000a4a _RamfuncsRunSize

关于我在这里可能会做什么的提示吗?

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

    我将继续进行调试工作。  初始化共享存储器区域允许代码通过上述 memcpy 调用。  我现在尝试在 C28x 上配置 I2C。  我的代码是:

    ERROR_INIT (&EB);
    
    Hwi_Params HwiParams;
    Hwi_Params_init (hwiParams);
    hwiParams.arg = 88;
    hwiParams.enableAck = true;
    hwiParams.disableMask = 0x00;
    hwiParams.restoreMask = 0x00;
    hwiParams.maskSetting = Hwi_MaskingOption_bitmask;
    DGPIO (0x91);
    if (NULL =Hwi_create (88、i2cIERIsr、&hwiParams、&EB)){
    DGPIO (0x9E);
    system_abort ("Hwi 创建失败");
    }
    DGPIO (0x92); 

    "DGPIO"函数调用将一个8位值输出到 GPIO 上、因此我可以使用示波器读取它。  在 Hwi_create 调用之前、我命中 DGPIO (0x91)、但我从未命中 DGPIO (0x9E) DGPIO (0x92)。  我已经在 ISR (i2cIERIsr)中放置了一个代码、但也不会执行。  什么可能导致 Hwi_create 调用无法返回?  我应该在某个位置查看一些"故障"中断吗?  是否有任何想法、可能会失败?

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    F021_API_C28x_FPU32.lib 中包含哪些类型的函数? 您正在使用哪个版本的 TI-RTOS (SYS/BIOS)?

    Todd