TI中文支持网
TI专业的中文技术问题搜集分享网站

F28035 RAM使用问题

F28035使用时出现以下问题:芯片使用仿真器调试时可以正常运行,实际运行时出现程序进入非法中断;

最终定位到原因为使用的ucos操作系统任务SCI任务堆栈分配问题;

但在对操作系统堆栈和CMD文件修改时遇到如下问题:

     1. CMD文件相同,操作系统任务堆栈在0x50~0xD0程序正常,但堆栈在0xE0~0x100时反而不正常;

     2.操作系统堆栈同样都是0x100,但单独分配成一块RAM时不正常,分配到一大块RAM时正常;

     3. 操作系统任务少时正常(但出问题的SCI任务堆栈大小一样);

具体描述如下:

(1) KERNELSTK   : origin = 0x008000, length = 0x000400   /× CMD文件中给操作系统分配了0x400空间×/

           操作系统有5个任务,SCI任务分配0x80大小;使用ucos的堆栈使用函数测试任务使用堆栈大小,最大在0x50以下;

          但是如果将SCI任务堆栈分配0x50~0xD0大小是,程序正常,不会跑飞(进illegal中断),如果SCI任务堆栈分配0xE0~0x100或更大,程序跑飞;

          问题:实际SCI使用堆栈未超过0x100,但是如果堆栈分配在0x100,程序跑飞;分配在0x50~0xD0反而可以正常运行???

                     是否是由于RAM分配不按顺序导致?

(2)如果ucos操作系统中SCI任务大小不修改,仍使用0x100,把CMD文件中KERNELSTK的声明到更大RAM中,程序也可以正常运行;

        情况1:操作系统中任务堆栈大小不变,将操作系统任务堆栈单独分配一块RAM区,程序跑飞

F28035 部分RAM资源映射如下:

    

相关部分CMD如下:

MEMORY
{
PAGE 1 :       RAMM0 :              origin = 0x000000,        length = 0x000100       KERNELSTK :    origin = 0x008000,       length = 0x000400 
       RAMM1 :              origin = 0x000100,       length = 0x000700 
       RAML :                 origin = 0x008400,        length = 0x001000
}
SECTIONS
{
      .stack : > RAMM0               PAGE = 1      .ebss : > RAML                   PAGE = 1      .esysmem : > RAMM1          PAGE = 1       kernelStack : > KERNELSTK       PAGE = 1
}

情况2:操作系统中任务堆栈大小不变,将操作系统任务堆栈与ebss同使用RAML,程序正常运行;

MEMORY
{
PAGE 1 : 
       RAMM0 :             origin = 0x000000,        length = 0x000100     
       RAMM1 :             origin = 0x000100,        length = 0x000700 
       RAML :               origin = 0x008000,        length = 0x001400
}
SECTIONS
{
      .stack : > RAMM0               PAGE = 1 
      .ebss : > RAML                   PAGE = 1 
      .esysmem : > RAMM1       PAGE = 1 
       kernelStack : > RAML       PAGE = 1
}

请专家帮忙解释,谢谢!

Linda:

您好!

建议将程序中堆栈空间加大一些试一下。

F28035使用时出现以下问题:芯片使用仿真器调试时可以正常运行,实际运行时出现程序进入非法中断;

最终定位到原因为使用的ucos操作系统任务SCI任务堆栈分配问题;

但在对操作系统堆栈和CMD文件修改时遇到如下问题:

     1. CMD文件相同,操作系统任务堆栈在0x50~0xD0程序正常,但堆栈在0xE0~0x100时反而不正常;

     2.操作系统堆栈同样都是0x100,但单独分配成一块RAM时不正常,分配到一大块RAM时正常;

     3. 操作系统任务少时正常(但出问题的SCI任务堆栈大小一样);

具体描述如下:

(1) KERNELSTK   : origin = 0x008000, length = 0x000400   /× CMD文件中给操作系统分配了0x400空间×/

           操作系统有5个任务,SCI任务分配0x80大小;使用ucos的堆栈使用函数测试任务使用堆栈大小,最大在0x50以下;

          但是如果将SCI任务堆栈分配0x50~0xD0大小是,程序正常,不会跑飞(进illegal中断),如果SCI任务堆栈分配0xE0~0x100或更大,程序跑飞;

          问题:实际SCI使用堆栈未超过0x100,但是如果堆栈分配在0x100,程序跑飞;分配在0x50~0xD0反而可以正常运行???

                     是否是由于RAM分配不按顺序导致?

(2)如果ucos操作系统中SCI任务大小不修改,仍使用0x100,把CMD文件中KERNELSTK的声明到更大RAM中,程序也可以正常运行;

        情况1:操作系统中任务堆栈大小不变,将操作系统任务堆栈单独分配一块RAM区,程序跑飞

F28035 部分RAM资源映射如下:

    

相关部分CMD如下:

MEMORY
{
PAGE 1 :       RAMM0 :              origin = 0x000000,        length = 0x000100       KERNELSTK :    origin = 0x008000,       length = 0x000400 
       RAMM1 :              origin = 0x000100,       length = 0x000700 
       RAML :                 origin = 0x008400,        length = 0x001000
}
SECTIONS
{
      .stack : > RAMM0               PAGE = 1      .ebss : > RAML                   PAGE = 1      .esysmem : > RAMM1          PAGE = 1       kernelStack : > KERNELSTK       PAGE = 1
}

情况2:操作系统中任务堆栈大小不变,将操作系统任务堆栈与ebss同使用RAML,程序正常运行;

MEMORY
{
PAGE 1 : 
       RAMM0 :             origin = 0x000000,        length = 0x000100     
       RAMM1 :             origin = 0x000100,        length = 0x000700 
       RAML :               origin = 0x008000,        length = 0x001400
}
SECTIONS
{
      .stack : > RAMM0               PAGE = 1 
      .ebss : > RAML                   PAGE = 1 
      .esysmem : > RAMM1       PAGE = 1 
       kernelStack : > RAML       PAGE = 1
}

请专家帮忙解释,谢谢!

user1498041:

回复 Linda:

你好,将SCI任务改大为程序正常,之前问题主要是下面几个:(当前解决方案是,删除不重要任务,同时将SCI任务堆栈改大,问题解决),

但仍有以下疑问???希望了解

    (1)CMD文件相同,修改SCI任务堆栈在0x50~0xD0程序正常,但堆栈在0xE0~0x100时反而不正常;

          说明:(用Ucos自带堆栈测试,测试最大使用<0x50,配置小于0x50程序必跑飞)

   (2)修改CMD文件,SCI任务堆栈大小不变,仍为0x100,如果将操作系统堆栈单独分配成一块RAM时不正常,

          与其他一起分配到一大块RAM时正常,这时SCI任务堆栈在0x50~0x100都正常;

   (3)CMD文件不修改,SCI任务堆栈大小不变,将ucos中一个不重要任务删除,程序也正常;

之前看TI的帖子,有TI工程师说DSP RAM分配是不按顺序分配,一般会分配更大留有一定裕量,但现在问题是好像有点似懂非懂说不清感觉,

TI有没有RAM资源使用说明,谢谢!!!

赞(0)
未经允许不得转载:TI中文支持网 » F28035 RAM使用问题
分享到: 更多 (0)