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.

[参考译文] TMS320VC5502:是否存在使用<strstream>对象的 TConf 要求?

Guru**** 2478765 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1460040/tms320vc5502-is-there-a-tconf-requirement-to-use-strstream-objects

器件型号:TMS320VC5502

工具与软件:

我是第一次尝试设置一个 鸵鸟流对象,但它崩溃的固件到 UTL_Halt ()当写入.

例如、g_diagLog <<"Hello World"<< endl

 CDiagLog :公共排斥流
{公共
:
CDiagLog (char buffer[]unsigned int size );

 private :};


#pragma DATA_SECTION ("ExtPgm3")
Char m_logBuffer[1024]=0#pragma DATA_SECTION ("ExtPgm3")
CDiagLog g_diagLog (m_logBuffer、sizeof (m_logBuffer));

CDiagLog::CDiagLog (char buffer[]unsigned int 大小)

memset (缓冲区、0、大小);
} 

当我跟踪程序执行时、它遵循这个路径(在进入指定函数时给出一些 CPU 寄存器的内容):

std::basic_ostream

 sputn (ptr、count)-- XAR0:0x04A044、T0:0x0014

 xsputn (ptr、count)-- xar0:0x04a044、T0:0x0014

std::strstreambuf:overflow (int)-- T0:0x0046

新操作员[]-- T0:0x0020

操作者 new -- T0:0x0020

malloc ()-- T0:0x0020

MEM_alloc ()-- T0:0x0001、T1:0x0024、T2:0x0024

lock2 ()-- XAR0:0x040000、XAR1:0x020000、T0:0x0001、T1:0x0024、T2:0x0001、 T3:0x0000

sys_abort ()-- XAR0:0x40000、XAR1:0x20001

UTL_Halt()

是否需要在 .tcf (main.tcf)中设置某些内容来支持 strstream 对象?

谢谢。

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

    您好!  

    我们关于这一主题的专家目前不在办公室。 我们应该能够在下周获得回复。  

    谢谢!

    -Randy

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

    您好、Dean:

    malloc()函数需要系统堆来动态分配内存。 系统堆在 TCF 文件中指定:

    确保选中"create a heap in this memory"、并且"heap size"已经足够大。

    此致、

    Ming

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

    谢谢 Ming。  我的问题得到了解决。

    在一个相关的注意事项,(这是另一个问题/问题,试图建立一个静态缓冲区用于诊断目的,将独立于调试器使用-我的另一篇文章昨晚侧重于使用 printf,这一个侧重于使用鸵鸟流)。  我昨天早些时候发布了这个,但没有注意到,当我发布它时有一个错误(某种类型的系统错误与网页)。  这又是一个。

    我正在尝试使用 rdbuf()将静态缓冲区分配给鸵鸟流对象、但使用类似的语句

    G_diagLog <<"Hello World"<<结束; 

    似乎不使用我的 m_logBuffer 数组。

    除了使用 rdbuf()来获取写入我的静态数组的流数据外、我还需要做些什么吗?

    注意:我可以进一步深入研究(我之前没有为 ostream 分配外部缓冲器)、但如果我正在做的事情有一个简单的补充(如下所示)、那就太棒了!

    谢谢!

    -dean

     CDiagLog :公共排斥流
    {公共
    :
    CDiagLog (char buffer[]unsigned int size );
    
     private :};
    
    
    #pragma DATA_SECTION ("ExtPgm3")
    Char m_logBuffer[1024]=0#pragma DATA_SECTION ("ExtPgm3")
    CDiagLog g_diagLog (m_logBuffer、sizeof (m_logBuffer));
    
    CDiagLog::CDiagLog (char buffer[]unsigned int 大小)
    
    memset (buffer、0、size); 
    this->rdbuf ()->pubsetbuf (缓冲区,大小); 
    }
    
    
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Dean:

    由于这个线程已经被解析、我将关闭这个线程。 您可以将相关内容移至新主题帖。

    BTW、我已经回复了您昨天发布的新主题。

    此致、

    Ming