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.

[参考译文] CCS/CC2650STK:尽管 README.MD 这样说、但仍可以#39;t 启动系统分析器

Guru**** 2394305 points
Other Parts Discussed in Thread: CC2650STK, CC2650, SYSBIOS, CC2640R2F, CC1350

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/831543/ccs-cc2650stk-can-t-start-the-system-analyzer-despite-the-readme-md-saying-so

器件型号:CC2650STK
Thread 中讨论的其他器件: CC2650SYSBIOSCC2640R2FCC1350

工具/软件:Code Composer Studio

我使用 CCC 9.1、传感器标签 CC2650STK 和 XDS110调试器。

我从 tirix 中构建和调试示例 uartecho_CC2650STK_TI、并停止在调试器中执行。

我打开"Tools"->"System Analyzer"->"Duration Analysis"、然后得到错误:

自述文件指出:

  • 此示例还演示了 CCS 中的系统分析器。 这是通过停止模式读取目标上的日志来实现的。 停止目标并打开系统分析 器、如 TI-RTOS 用户指南查看日志中所述。

我是否仍需要配置某项内容?

谢谢

Peter

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

    Peter、

    系统分析器用户指南 包含有关此套高级调试工具的有用信息、但需要通过源项目启用其他步骤。 您阅读的是哪个自述文件? 我在 Resource Explorer 树中找不到它、uartecho 工程似乎没有启用 UIA (如上面的错误中所述)。  

    ROV Classic 是最基本的调试工具、它已经附带了各种高级调试工具、这些工具在 Resource Explorer 中 TI-RTOS for CC2650产品的内核文档链接中进行了更详细的介绍

    希望这对您有所帮助、

    拉斐尔

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

    你(们)好

    下面是该项目的一张截图:

    以下是 README.MD 的相关部分

    • 此示例还演示了 CCS 中的系统分析器。 这是通过停止模式读取目标上的日志来实现的。 停止目标并打开系统分析 器、如 TI-RTOS 用户指南查看日志中所述。

    我知道这份指南,但由于 README.MD 似乎说它是开箱即用的,我想知道结果是什么...

    谢谢

    Peter

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

    Peter、  

    谢谢;我完全忽略了项目本身上的 README.MD 文件。  

    看一下、它看起来相当过时-开发套件列表很旧、甚至没有提及 SensorTag。 我将与 SDK 团队的某个人交流、以更新此文档、或者提供其他详细信息。  

    给您带来的不便、我深表歉意、

    拉斐尔

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

    尊敬的 Peter:

    对于大多数 TI-RTOS 产品、我们确实启用了 UART Echo 来进行记录。 由于 CC2650器件采用 RAM、因此我们选择不启用 UART Echo 启用记录。 您需要执行以下操作才能启用它

    1.启用内核日志记录

    BIOS.logsEnabled = true;
    //BIOS.logsEnabled = false;
    

    2.不要在内核中使用 ROM

    //var ROM = xdc.useModule('ti.sysbios.rom.ROM');
    //if (Program.cpu.deviceName.match(/CC26/){
    // rom.romName = ROM.CC2650;
    //}
    //else if (Program.cpu.deviceName.match(/CC13/)){
    // rom.romName = ROM.CC1350;
    //}
    

    3.引入 LoggingSetup (并可能减小内部缓冲区的大小)。

    VAR LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
    LoggingSetup.loadLoggerSize = 256;
    LoggingSetup.mainLoggerSize = 512;
    LoggingSetup.sysbiosLoggerSize = 1024; 

    Todd

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

    你(们)好

    谢谢、这对我们有所帮助。 配置屏幕仍然显示持续时间分析仪器不足

    从“System Analyzer Guide (系统分析器指南)”中,我了解到需要检查:

    LoggingSetup.sysbiosLogging = true;
    LoggingSetup.sysbiosHwiLogging = true;

     不充分的标志仍用于上下文感知配置文件。 我是否需要激活其他日志功能?

    自述文件还指出、我应该看到:

     Live Session 应具有如下记录

       - "LS_cpuLoad: 0%"
       - "Wrote character 0xa"

    我在哪里可以看到这种情况? 在 printf 日志中?

    谢谢

    Peter

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

    尊敬的 Peter:

    该示例的自述文件在 CCS 中演示系统分析器时不正确。  该示例的.cfg 文件中没有任何可用于启用系统分析器的检测的内容。  在较新版本的 coresdk 中已更正自述文件。

    要启用检测、您需要在.cfg 文件中执行以下操作:

    1.启用 BIOS 日志记录: BIOS.logsEnabled = true;
    2.通过注释掉以下行来禁用 ROM 构建:


    //var ROM = xdc.useModule('ti.sysbios.rom.ROM');
    if (Program.cpu.deviceName.match(/CC2640R2F/)){
    //   rom.romName = rom.CC2640R2F;

    否则(Program.cpu.deviceName.match(/CC26.2/)){
    //   rom.romName = rom.CC26X2V2;

    否则(Program.cpu.deviceName.match(/CC13.2/)){
    //   rom.romName = rom.CC13X2V2;

    否则(Program.cpu.deviceName.match(/CC26/)){
    //   rom.romName = rom.CC2650;

    否则(Program.cpu.deviceName.match(/CC13/)){
    //   rom.romName = rom.CC1350;

    3.添加登录设置:

    VAR LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');

    这应该足以使您获得 CPU 负载和执行图。  您应该在 Live Session 窗口中看到 CPU 负载和任务状态消息。

    如果要执行上下文感知分析、则会有点棘手。  您需要将以下内容添加到.cfg 文件中:

    LoggingSetup.enableContextAwareFunctionProfiler = true;
    VAR UIABenchmark = xdc.useModule('ti.uia.events.UIABenchmark');

    然后、您需要将函数入口和出口挂钩函数添加到您的.c 文件中:

    为函数分析添加了/*
    #include
    #include


    void functionEntryHook( void (*addr)()){
       log_writeUC3 (UIABenchmark_startInstanceWithAdrs、
               (IARg)"context=0x%x、fnAdrs=0x%x:"、(IArg) 0、(IArg) addr);


    void functionExitHook( void (*addr)()){
       log_writeUC3 (UIABenchmark_stopInstanceWithAdrs、
               (IARg)"context=0x%x、fnAdrs=0x%x:"、(IArg) 0、(IArg) addr);


    log_writeUC3 ()是 UIA 附带的重量更轻的日志函数。

    现在构建您的项目。

    编译之后、在工程属性中、启用 Build->ARM Compiler->Advanced Options->Entry/Exit Hook Options 下的进入和退出函数:

    然后构建(而不是重建)项目。  我执行了此操作、在系统分析器中、我仍然为上下文感知配置文件获取了"部分"、但我忽略了它、一切正常。  函数分析的棘手部分是 BIOS 自定义库使用与项目相同的编译标志构建、并且您不想使用上面的入口/出口挂钩构建 BIOS。  原因是 UIA 的 Log_write()调用 BIOS Timestamp_get64()。  如果 Timestamp_get64 ()是使用入口挂钩函数构建的、则它将依次调用 Log_write()、该函数调用 timestamp_get64、以此类推。  堆栈溢出时、程序将崩溃。  为避免这种情况、每次修改.cfg 文件时、都需要禁用构建选项中的入口/出口挂钩并重新编译。  然后重新启用挂钩并编译(不重新编译)。

    如果您只想添加基准测试日志记录、只需将 UIABenchmark 添加到.cfg 文件中、然后将基准测试代码放入.c 文件中、就像下面要进行基准测试的代码块那样:

       /*循环、直到达到终止时间戳*/
       log_write1 (UIABenchmark_start、(IArg")"doLoad");
       执行{
           现在= Timestamp_get32();
       } while ((end - now)< count);
       log_write1 (UIABenchmark_stop、(IArg")"doLoad");

    您将在"持续时间"窗口中看到这些输出。  我收到一条消息、说我的持续时间配置不充分、但似乎仍然有效。

    此致、

    Janet

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

    为避免这种情况,每次修改.cfg 文件时,都需要禁用构建选项中的入口/出口挂钩并重新生成。  然后重新启用挂钩并编译(而不是重新编译)。

    是一个更可维护的选项、可以使用  Timestamp_get64 ()函数上的 no_hooks pragma 来防止编译器仅为有问题的函数生成挂钩?

    此技术有助于解决非 RTOS 项目上的类似问题-请参阅 Compiler/TMS570LS3137:--entry_hook 编译器选项导致 sys_startup 中出现故障

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

    切斯特、您好!

    添加 NO_HOOKS 似乎是一个好主意。  还有一些其他需要执行的位置、例如 LoggerStopMode_write4()、它位于生成的.c 文件中、因为它依赖于.cfg 设置。

    我尝试在这些地方添加 no_hooks,但在 main()之前仍然遇到崩溃。  我猜有一些 BIOS 初始化函数需要添加到"无挂钩"列表中。

    谢谢、

    Janet

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

    Janet

    是的,我获得了实时会话信息和持续时间信息,但是上下文感知配置文件将在窗口底部显示警告:超出序列数据。

    以下是我的.cfg 文件:




    /*========================= 引导配置=================== *
    VAR Boot = xdc.useModule('ti.sysbios.family.arm.cc26xx.Boot');
    /*
     *此模块包含特定于系列的引导 API 和配置设置。
     *有关更多信息、请参阅 SYS/BIOS API 指南。
     *



    /*========================= 时钟配置======================== *
    VAR 时钟= xdc.useModule('ti.sysbios.knl.Clock');
    /*
     *当使用 Power 和 calibrateRCOSC 设置为 true 时、应将其设置为10。
     *时钟模块使用的计时器支持 TickMode_dynamic。 这使我们能够做到
     *将节拍周期设置为10us、而不产生额外的开销
     *中断。
     *
     *注意:calibrateRCOSC 参数在电源配置中设置
     *    "Board.c"文件中的结构。
     *
    clock.tickPeriod = 10;



    /*========================= 默认值(模块)配置=================== *
    VAR 默认值= xdc.useModule('xdc.runtime.Defaults');
    /*
     *允许在目标上加载模块名称的标志。 模块名称
     出于调试目的、*字符串放置在.const 段中。
     *
     *选择一项:
     * - true (默认值)
     *     将此参数设置为 true 将在.const 中包含名称字符串
     *     部分、以便更轻松地调试错误和断言。
     *- 错
     *     将此参数设置为 false 将减小.const 中的占用空间
     *     部分。 因此、错误和断言消息将包含
     *     "未知模块"前缀、而不是实际的模块名称。
     *
     * 在 ROM 中使用 BIOS 时:
     *     此选项必须设置为 false。
     *
    //Defaults.common$.namedModule = true;
    Defaults.common$.namedModule = false;



    /*========================= 错误配置=================== *
    VAR 错误= xdc.useModule('xdc.runtime.Error');
    /*
     *调用此函数是为了处理所有产生的错误,但与不同
     * Error.raiseHook、此函数负责完全处理
     带有适当初始化的 Error_Block 的*错误。
     *
     *选择一项:
     * - Error.policyDefault (默认值)
     *     使用已初始化的 Error_Block 结构和日志调用 Error.raiseHook
     *     使用模块的记录器时出错。
     * - Error.PolicySpin
     *     在 while (1)循环中捕获以最小化目标的简单替代方案
          *占用空间。
     *     使用 Error.PolicySpin 时,将不会调用 Error.raiseHook。
     *
    //Error.policyFxn = Error.policyDefault;
    error.policyFxn =错误。policySpin;

    /*
     *如果 Error.policyFxn 设置为 Error.policyDefault,则调用此函数
     *每当错误模块引起错误时。
     *
     *选择一项:
     * - Error.print (默认值)
     *     为方便,错误通过 System_printf()进行格式化和输出
     *     调试。
     *- 空
     *     错误未格式化或记录。 此选项减少了代码占用空间。
     * -非空函数
     *     错误调用自定义用户函数。 请参阅错误模块文档
     *     以了解更多详细信息。
     *
    //Error.raiseHook = Error.print;
    error.raiseHook =空;
    //Error.raiseHook ="&myErrorFxn";

    /*
     *如果 Error.policyFxn 设置为 Error.policyDefault,则此选项适用于
     * Error.raiseHook 函数可递归的最大次数
     *已调用。 此选项限制无限递归的可能性
     *可能导致堆栈溢出。
     *默认值为16。
     *
    error.maxDepth = 2;



    /*========================= Hwi 配置=================== *
    var halHwi = xdc.useModule('ti.sysbios.hal.Hwi');
    var m3Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');
    /*
     *在空闲循环中检查 Hwi (系统)堆栈溢出。
     *
     *选择一项:
     * - true (默认值)
     *     检查系统堆栈在空闲循环期间溢出的顶字和
     *     如果检测到一个错误,则会发出一个错误。
     *- 错
     *     禁用运行时检查可提高运行时性能并得到
     *     减小了闪存尺寸。
     *
    //halHwi.checkStackFlag = true;
    halHwi.checkStackFlag = false;

    /*
     *以下选项会在发生硬件异常时改变系统的行为
     检测到*。
     *
     *选择一项:
     * - Hwi.enableException = true
     *     此选项会使默认的 m3Hwi.excHandlerFunc 函数完全启用
     *     解码异常并将寄存器转储到系统控制台。
     *     此选项会在错误模块中引发错误并显示
     *     ROV 中出现异常。
     * - Hwi.enableException = false
     *     此选项通过不解码或打印来减少代码占用空间
     *     系统控制台异常。
     但是     、它仍会在错误模块中引发错误并显示
     *     ROV 中出现异常。
     * - Hwi.exHandlerFunc =空
     *     这是节省代码空间的最积极的选择;但它是最有效的选择
     *     很难调试异常。 它将闪存占用空间减小了
     *     发生异常时插入默认 while (1)陷阱。 此选项
     *     不会引起错误模块的错误。
     *
    //m3Hwi.enableException = true;
    //m3Hwi.enableException = false;
    m3Hwi.exHandlerFunc =空;

    /*
     *在除以0时启用硬件异常生成。
     *
     *选择一项:
     * - 0 (默认值)
     *     在除以0时禁用硬件异常
     * - 1.
     *     除以0时启用硬件异常
     *
    m3Hwi.nvicCCR.DIV_0_TRP = 0;
    //m3Hwi.nvicCCR.DIV_0_TRP = 1;

    /*
     *为无效数据对齐启用硬件异常生成。
     *
     *选择一项:
     * - 0 (默认值)
     *     禁用数据对齐的硬件异常
     * - 1.
     *     为数据对齐启用硬件异常
     *
    m3Hwi.nvicCCR.UNALIGN_TRP = 0;
    //m3Hwi.nvicCCR.UNALIGN_TRP = 1;

    /*
     *为复位矢量分配一个地址。
     *
     *默认为0x0、这是闪存的开始。 此设置通常应
     *不可更改。
     *
    m3Hwi.resetVectorAddress = 0x0;

    /*
     *为 RAM 中的矢量表分配一个地址。
     *
     *默认为 RAM 的启动。 该表放置在 RAM 中、因此是中断
     *可以在运行时添加。
     *
     *注意:要更改、请验证器件特定数据表中的地址'
     *    内存映射。
     *
    m3Hwi.vectorTableAddress = 0x20000000;



    /*========================= 空闲配置========================= *
    VAR 空闲= xdc.useModule('ti.sysbios.knl.Idle');
    /*
     *空闲模块用于指定在无时要调用的函数列表
     *系统中正在运行其他任务。
     *
     *此处添加的函数将在空闲任务内连续运行。
     *
     *函数签名:
     *    void func (void);
     *
    //idleFunc ("&myIdleFunc");



    /*========================= 内核(SYS/BIOS)配置=================== *
    VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
    /*
     *在 BIOS 库中启用断言。
     *
     *选择一项:
     * - true (默认值)
     *     启用断言以进行调试。
     *- 错
     *     禁用断言以减小代码占用空间并提高性能。
     *
     * 在 ROM 中使用 BIOS 时:
     *     此选项必须设置为 false。
     *
    //BIOS.assertsEnabled = true;
    BIOS.sertsEnabled = false;

    /*
     *为 BIOS 指定默认堆大小。
     *
    BIOS.heapSize = 1024;

    /*
     *指定默认 CPU 频率。
     *
    bios.cpufreq.lo = 48000000;

    /*
     *用于确定 xdc.runtime 源是否包含在自定义中的标志
     *构建的 BIOS 库。
     *
     *选择一项:
     * - false (默认值)
     *     预构建的 xdc.runtime 库由相应的目标提供
     *     用于构建应用程序。
     * -正确
     *     xdc.runtime 库源代码将包含在自定义 BIOS 中
     *     库。 此选项在两个代码中生成最高效的库
          *占用空间和运行时性能。
     *
    //BIOS.includeXdcRuntime = false;
    BIOS.includeXdcRuntime = true;

    /*
     * SYS/BIOS 运行时以链接的库的形式提供
     *与应用程序一起使用。 随提供了该库的几种形式
     * SYS/BIOS 产品。
     *
     *选择一项:
     *  - BIOS.LibType_Custom
     *     针对代码大小和进行了高度优化的定制构建库
          *运行时性能。
     *  - BIOS.LibType_Debug
     *     可用于的非优化自定义构建库
     *     使用调试器单步执行 API。
     *
     *
    BIOS.libType = BIOS.LibType_Custom;
    //BIOS.libType = BIOS.LibType_Debug;

    /*
     *运行时实例创建使能标志。
     *
     *选择一项:
     *  - true (默认值)
     *     允许在运行时调用 Mod_create()和 Mod_delete ()
     *     需要一个默认堆用于动态内存分配。
     *-  错
     *     通过禁止 Modo_create()和 Mod_delete ()来减少代码占用空间
     *     在运行时调用。 对象实例是通过构建的
     *     Mod_construct()并通过 Mod_析 构函数()析构。
     *
     * 在 ROM 中使用 BIOS 时:
     *     此选项必须设置为 true。
     *
    BIOS.runtimeCreatesEnabled = true;
    //BIOS.runtimeCreatesEnabled = false;

    /*
     *在 BIOS 库中启用日志。
     *
     *选择一项:
     * - true (默认值)
     *     启用日志以进行调试。
     *- 错
     *     禁用日志记录以减少代码占用空间并改善运行时间
     性能。      
     *
     * 在 ROM 中使用 BIOS 时:
     *     此选项必须设置为 false。
     *
    BIOS.logsEnabled = true;
    //BIOS.logsEnabled = false;

    VAR LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
    LoggingSetup.loadLoggerSize = 256;
    LoggingSetup.mainLoggerSize = 512;
    LoggingSetup.sysbiosLoggerSize = 1024;
    LoggingSetup.enableContextAwareFunctionProfiler = true;
    VAR UIABenchmark = xdc.useModule('ti.uia.events.UIABenchmark');


    /*========================= 内存配置=================== *
    VAR 内存= xdc.useModule('xdc.runtime.Memory');
    /*
     *内存模块本身只为任何一个提供一个通用接口
     *各种系统和应用特定的内存管理策略
     *由 IHeap 模块实现(例如、 HeapMem、HeapBuf)。
     *



    /*========================= 程序配置=================== *
    /*
     * IAR 会忽略 Program.stack。 使用中的项目选项
     * IAR Embedded Workbench 以更改系统堆栈大小。
     *
    if (!Program.build.target.$name.match (/IAR/)){
       /*
        * 减小系统堆栈大小(由 ISR 和 Swi 使用)以减小
         * RAM 使用情况。
        *
       program.stack = 768;




    /*
     *取消注释以启用将 GNU 目标打印到 CCS 控制台的半主机功能。
     *请阅读以下 TIRTOS Wiki 页面以了解有关半主机的更多信息:
     * processors.wiki.ti.com/.../TI-RTOS_Examples_SemiHosting
     *

    if (Program.build.target.$name.match (/GNU/)){
       //var SemiHost = xdc.useModule('ti.sysbios.rts.gnu.SemiHostSupport');




    /*========================= ROM 配置======================== *
    /*
     *要在闪存中使用 BIOS,请注释掉下面的代码块。
     *
     /*
    VAR ROM = xdc.useModule('ti.sysbios.rom.ROM');
    if (Program.cpu.deviceName.match(/CC26/)){
       rom.romName = ROM.CC2650;

    否则(Program.cpu.deviceName.match(/CC13/)){
       rom.romName = ROM.CC1350;

    *


    /*========================= 信标配置=================== *
    VAR 信标= xdc.useModule('ti.sysbios.knl.Semaphore');
    /*
     *启用对任务优先级挂起队列的全局支持。
     *
     *选择一项:
     * - true (默认值)
     *     这允许根据任务优先级为待处理的任务提供服务。
     *- 错
     *     待处理任务是基于先入先出的服务。
     *
     * 在 ROM 中使用 BIOS 时:
     *     此选项必须设置为 false。
     *
    //semaphore.supportsPriority = true;
    Semaphore.supportsPriority = false;

    /*
     *允许通过信标隐式布置事件、
     *禁用以保存其他代码。
     *
     *选择一项:
     * -正确
     *     这允许信标模块发布信标和事件
          *同步。
     * - false (默认值)
     *     必须显式发布事件以解除阻止任务。
     *
     * 在 ROM 中使用 BIOS 时:
     *     此选项必须设置为 false。
     *
    //semaphore.supportsEvents = true;
    Semaphore.supportsEvents = false;



    /*========================= Swi 配置=================== *
    VAR Swi = xdc.useModule('ti.sysbios.knl.Swi');
    /*
     *软件中断是封装函数的对象
     *已执行且具有优先级。 软件中断被优先化、优先于任务
     和被硬件中断服务例程抢先。
     *
     *包括此模块是为了允许在用户的应用程序中使用 Swi。
     *

    /*
     *将 swi 优先级的数量从缺省值16减少。
     *减少 swi 优先级的数量可节省内存。
     *
    SWI.numPriorities = 6;



    /*========================= 系统配置=================== *
    VAR 系统= xdc.useModule('xdc.runtime.System');
    /*
     *当系统异常退出时调用中止处理程序。
     *
     *选择一项:
     * - System.AbortStd (默认)
     *     调用 ANSI C 标准'abort()'来终止应用程序。
     * - System.abortSpin
     *     在 while (1)陷阱中无限循环的轻量级中止函数
     *     函数。
     * -自定义中止处理程序
     *     用户定义的函数。 请参阅的系统模块说明文件
     *     详细信息。
     *
    //System.ABortFxn = System.ABortStd;
    System.ABortFxn = System.ABortSpin;
    //System.AbortFxn ="&myAbortSystem";

    /*
     *系统正常退出时调用 Exit 处理程序。
     *
     *选择一项:
     * - System.exitStd (默认)
     *     调用 ANSI C 标准'exit()'以终止应用程序。
     * - System.exitSpin
     *     在 while (1)陷阱中无限循环的轻量级退出函数
     *     函数。
     * -自定义退出函数
     *     用户定义的函数。 请参阅的系统模块说明文件
     *     详细信息。
     *
    //System.exitFxn = System.exitStd;
    System.exitFxn = System.exitSpin;
    //System.exitFxn ="&myExitSystem";

    /*
     *最小化系统模块中的退出处理程序数组。 系统模块包括
     *向 System_atexit()注册的函数数数组,即
     *由 System_exit()调用。 默认值为8。
     *
    System.maxAtexitHandlers = 2;

    /*
     * System.SupportProxy 定义了 System 的低级实现
     *诸如 System_printf()、System_flush()等函数
     *
     *选择一对:
     * - SysMin
     *     此模块维护一个内部可配置的循环缓冲器
     *     存储输出,直到调用 System_flush()。
     *     循环缓冲区的大小通过 SysMin .bufSize 设置。
     * - SysCallback
     *     SysCallback 允许系统 API 的用户定义实现。
     *     SysCallback 支持代理的代码占用空间更小,可以是
     *     用于提供定制 System_printf 服务。
     *     默认的 SysCallback 函数指向存根函数。 请参阅
     *     SysCallback 模块的文档。
     *
    VAR SysMin = xdc.useModule('xdc.runtime.SysMin');
    SYSMIN.bufSize = 128;
    System.SupportProxy = SysMin;
    //var SysCallback = xdc.useModule('xdc.runtime.SysCallback');
    //System.SupportProxy = SysCallback;
    //SysCallback.abortFxn ="&myUserAbort";
    //SysCallback.exitFxn ="&myUserExit";
    //SysCallback.flushFxn ="&myUserFlush";
    //SysCallback.putchFxn ="&myUserPutch";
    //SysCallback.readyFxn ="&myUserReady";



    /*========================= 任务配置=================== *
    VAR 任务= xdc.useModule('ti.sysbios.knl.Task');
    /*
     *检查任务堆栈是否有溢出情况。
     *
     *选择一项:
     * - true (默认值)
     *     在期间启用任务堆栈溢出情况的运行时检查
     *     上下文切换("从"和"到")
     *- 错
     *     禁用任务堆栈溢出情况的运行时检查。
     *
     * 在 ROM 中使用 BIOS 时:
     *     此选项必须设置为 false。
     *
    //Task.checkStackFlag = true;
    Task.checkStackFlag = false;

    /*
     *设置创建任务时的默认任务堆栈大小。
     *
     *默认值取决于所使用的器件。 减少默认堆栈
     *大小可节省更多内存。
     *
    Task.defaultStackSize = 512;

    /*
     *启用空闲任务。
     *
     *选择一项:
     * - true (默认值)
     *     创建优先级为0的任务,调用空闲挂钩函数。 这种情况
     必须     将*选项设置为 true 才能通过 Power 实现节能
          *模块。
     *- 错
     *     未创建空闲任务。 此选项占用的内存较少、因为没有
     *     需要附加的默认任务堆栈。
     *     要在没有空闲任务的情况下通过电源模块实现节能、
     *     将 Idle.run 添加为 Task.allBlockedFunc。
     *
    task.enableIdleTask = true;
    //Task.enableIdleTask = false;
    //Task.allBlockedFunc = Idle.run;

    /*
     *如果 Task.enableIdleTask 设置为 true,则此选项设置空闲任务
     *堆栈大小。
     *
     *减小空闲堆栈大小可节省更多内存。
     *
    task.idleTaskStackSize = 512;

    /*
     *减少任务优先级的数量。
     *默认值为16。
     *减少任务优先级的数量可节省内存。
     *
    Task.numPriorities = 4;



    /*========================= 文本配置=================== *
    var text = xdc.useModule('xdc.runtime.Text');
    /*
     *这些字符串放置在.const 段中。 将此参数设置为
     * false 将在.const 段中节省空间。 错误、断言和记录消息
     *将打印原始 ID 和 args、而不是格式化的消息。
     *
     *选择一项:
     * - true (默认值)
     *     此选项将测试字符串加载到.const 中以方便调试。
     *- 错
     *     此选项可减小.const 占用空间。
     *
    //text.isLoaded = true;
    text.isLoaded = false;



    /*========================= 类型配置=================== *
    VAR 类型= xdc.useModule('xdc.runtime.Types');
    /*
     *此模块定义了在中使用的基本常量和类型
     * xdc.runtime 软件包。
     *



    /*========================= TI-RTOS 中间件配置================= *
    var mwConfig = xdc.useModule('ti.mw.Config');
    /*
     *包括 TI-RTOS 中间件库
     *



    /*========================= TI-RTOS 驱动程序的配置==== *
    VAR driversConfig = xdc.useModule('ti.drivers.Config');
    /*
     *包含 TI-RTOS 驱动程序
     *
     *选择一项:
     * - driversConfig.LibType_NonInstrumented (默认)
     *     使用针对封装和性能进行优化的 TI-RTOS 驱动程序库
     *     无断言或日志。
     * - driversConfig.LibType_Instrumented
     *     使用 TI-RTOS 驱动程序库在启用断言和日志的情况下进行调试。
     *
    driversConfig.libType = driversConfig.LibType_NonInstrumented;
    //driversConfig.libType = driversConfig.LibType_Instrumented;



    /*========================= 应用程序特定实例========================= *

    此外,“仪器不足”警告可能会在 CCS 中标记为错误?

    谢谢

    Peter

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

    尊敬的 Peter:

    可能是日志缓冲区太小、这会导致数据序列错误:


       LoggingSetup.mainLoggerSize = 512;


    函数分析和 UIABenchmark 事件记录在主记录器中。  如果缓冲区太小、则当系统分析器中显示的最后一个序列编号为"记录事件"时、您将看到间隙。

    通过将以下行添加到.cfg 文件中、可以消除持续时间分析的"不足"警告:

       LoggingSetup.benchmarkLogging = true;

    此致、

    Janet

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

    你好、Janet

    非常好,谢谢!

    CC2650STK 上的合理记录器大小是多少?

    谢谢

    Peter

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

    尊敬的 Peter:

    每个 Log_writeUC3()都将32个字节放入日志缓冲区(假定为64位时间戳)。  因此、对于每个函数 ENTER/EXIT、这是64字节。  这取决于您进行的函数调用次数以及暂停目标的频率、以便系统分析器可以上载日志。

    此致、

    Janet

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

    你好、Janet

    这很奇怪,我只在开始/停止调用时记录了64个字节...

    同时、如果访问丢失:

    [开始:德州仪器 XDS110 USB 调试探针]

    执行以下命令:

    %CCS_base%/common/uscif/dbgjtag -f %boarddatafil文件%-RV -o -S 完整性

    [结果]


    ---- [打印电路板配置路径名]---------------

    /home/p/.ti/ccs910/0/0/BrdDat/testBoard.dat

    ---- [打印重置命令软件日志文件]-----------------

    此实用程序已选择100或510类产品。
    此实用程序将加载适配器'libjioxds110.so'。
    库构建日期为 2019年6月3日。
    库构建时间为'15:03:57'。
    库软件包版本为'8.2.0.00004'。
    库组件版本为'35.0.0'。
    控制器不使用可编程 FPGA。
    控制器的版本号为'5'(0x00000005)。
    控制器的插入长度为"0"(0x00000000)。
    此实用程序将尝试重置控制器。
    此实用程序已成功重置控制器。

    ---- [打印重置命令硬件日志文件]-----------------

    扫描路径将通过切换 JTAG TRST 信号进行复位。
    控制器是具有 USB 接口的 XDS110。
    从控制器到目标的链路是直接的(不带电缆)。
    该软件配置为 XDS110功能。
    控制器无法监控 EMU[0]引脚上的值。
    控制器无法监控 EMU[1]引脚上的值。
    控制器无法控制输出引脚上的时序。
    控制器无法控制输入引脚上的时序。
    扫描路径链路延迟已精确设置为"0"(0x0000)。

    ---- [发生了错误,该实用程序已中止]-----

    此错误由 TI 的 USCIF 驱动程序或实用程序生成。

    值为'-230'(0xffffff1a)。
    标题为"SC_ERR_PATH_measure"。

    说明如下:
    测得的 JTAG IR 和 DR 扫描路径长度无效。
    这表示链路延迟或扫描路径中存在错误。

    [结束:德州仪器 XDS110 USB 调试探针]

    从浏览论坛所学到的知识中,无论这意味着什么,我都可能欺骗了我的设备。

    我在 Linux 上,您会推荐什么闪存擦除过程?

    谢谢

    Peter

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

    尊敬的 Peter:

    我不确定您遇到的仿真器错误。  您可以通过在.cfg 文件中进行设置来尝试关闭分析(您仍可以使用 UIABenchmark 进行基准测试):

    LoggingSetup.enableContextAwareFunctionProfiler = false;

    此致、

    Janet

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

    你好、Janet

    目前、我在 Linux 下进行调试时遇到了几个传感器标签问题、我购买了几块 CC1352 LaunchPad、我将在其中测试 SA。

    我还会回来的

    此致

    Peter

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

    你好、Janet

    我现在已收到 SensorTag DevPack、日志配置按预期工作。 将 XDS110 独立探针与传感器标签配合使用时、似乎存在问题。

    此致

    Peter