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.
工具/软件:TI-RTOS
你好!
我想使用 UART 在 cc2650和 MSP430之间进行通信。 我从项目0开始、但它使用 UART 进行 RTOS 日志记录。 如果我通过禁用 UART、我只能将其用于我的目的
#define XDC_RAUNITY_LOG_DISABLE_ALL、或者我是否仍可以将其用于通信?
这是 main 中的 UART 初始化。
此致、
Mayer Tamás
Janet、您好!
我使用 的是 CCS。
此外、我还有另一个问题。 我尝试使用 RTOS Analyzer/Execution Analyzis、但我不能正常工作、因为 它没有显示任何内容。 我复制到 适当的.cfg 文件此行:
VAR LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
之后、它开始工作、但无法正常工作。
我还有两条警告。
1、
说明
xdc.runtime.Main:"C:/ti/tirtos_cc13xx_cc26xx_2_20_01_08/products/uia_2_00_06_52/packages/ti/uia/sysbios/LoggingSetup.xs ",第809行:xdc.runtime.Main:xdc.runtime.Main.common$.logger 已分配,LoggingSetup 将记录器重新分配给 ti.UIA.loggers.LoggerStopMode.Instancy#1 xdc.runtime.Main:"C:/ti/tirtos_cc13xx_cc26xx_2_20_01_08/products/uia_2_00_06_52/packages/ti/uia/sysbios/LoggingSetup.xs,第809行:xdc.runtime.Main:xdc.runtime.Main.common$.logger 已分配,LoggingSetup 将记录器重新分配给 ti.UIA.Loggers.LoggerStopMode.instance.logger#1
资源
app_ble_uartlog.cfg
路径
/project_zero_app_cc2650launchxl/tools
类型
C/C++
2、
说明
xdc.runtime.Main.common$.logger 已被分配,LoggingSetup 将记录器重新分配给 ti.uIA.loggers.LoggerStopMode.instance#1
资源
app_ble_uartlog.cfg
路径
/project_zero_app_cc2650launchxl/tools
位置
xdc.runtime.Main
类型
XDCTools 配置标记
Janet、您好!
这是.cfg 文件。
/********* @文件 cc2640.cfg @CC26xx 的 TI RTOS 配置文件简介 导入的符号 注意:这些符号是在--cfgArgs 选项之后定义的。 在 IAR 中、这是在预编译步骤的末尾完成的。 在 CCS 中、这是 在 Properties->Build->XDCtools-Advanced options->Configuration 中完成 脚本参数。 可以使用多个符号将它们分隔为 逗号("、")。 默认情况下、TI RTOS 在 ROM 中以 RTOS 构建、中断向量启动 地址0x0处、并且仅使用 ROM 内核模块。 NO_ROM: 当被设定为一个非零值时、RTOS 建立在闪存中 ROM OAD_IMG_A:设置为非零值时、中断向量设置为 其片上 OAD 映像 A 的预期位置 OAD_IMG_B:设置为非零值时、中断向量设置为 其片上 OAD 映像 B 的预期位置 OAD_IMG_E:设置为非零值时、中断向量设置为 外部闪存 OAD 的预期位置。 USE_Events:生成 RTOS 内核事件模块。 小组成员:WCS、BTS 目标设备:CC2650、CC2640、CC1350 版权所有(c) 2013-2016、德州仪器(TI)公司 保留所有权利。 只要 满足以下条件、就允许以源代码和二进制形式重新分发和使用(无论是否修改): *源代码的重新分发必须保留上述版权 声明、此条件列表和以下免责声明。 *二进制形式的再发行必须复制上述版权 注意、本条件列表和中的以下免责声明 分发时提供的文档和/或其他材料。 *德州仪器公司的名称和名称均不相同 其贡献者可用于认可或推广衍生产品 未经特定的事先书面许可。 本软件由版权所有者和贡献者"按原样"提供 、 不承认任何明示或暗示的保证、包括但不限于对适销性和特定用途适用性的暗示保证。 在任何情况下、版权所有者或 贡献者都不对任何直接、间接、偶然、特殊、 模范、 或相应的损害(包括但不限于 采购替代产品或服务;丧失使用、数据或利润; 或业务中断)、但出于任何责任理论、 无论是在合同中、严格责任还是在使用 本软件时以任何方式产生的侵权行为(包括疏忽或其他原因)、 即使被告知存在此类损坏的可能性。 秘书长的报告 发布名称:BLE_SDK_2_02_01_18 发布日期:2016年5月06日22:17:28 //* ========================= ROM 配置======================== // * *要在闪存中使用 BIOS,请注释掉下面的代码块。 // if (typeof no_rom =='undefined'||(typeof no_rom!='undefined'&& no_rom == 0) ){ 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; } }/* ========================= 引导配置=================== // if (typeof no_rom =='undefined'||(typeof no_ROM!='undefined'&& no_ROM == 0) { var Boot = xdc.useModule('ti.sysbios.family.arm.cc26xx.Boot'); } // *此模块包含特定于系列的引导 API 和配置设置。 *有关更多信息、请参阅 SYS/BIOS API 指南。 // if (typeof no_rom =='undefined'||(typeof no_rom !='undefined'&& no_ROM == 0) { boot.driverlibVersion = 2; Boot.customerConfig = false; } /*===== 时钟配置======================== // var Clock = xdc.useModule('ti.sysbios.knl.Clock'); // *当使用 Power 和 calibrateRCOSC 时设置为 true,应将其设置为10。 *时钟模块使用的计时器支持 TickMode_dynamic。 这使我们 *能够将节拍周期设置为10us、而不会产生额外 的*中断开销。 * *注意:calibrateRCOSC 参数在电源配置中设置 * "Board.c"文件中的结构。 */ Clock.tickPeriod = 10; Clock.swiPriority = 5; /*==== 类型配置=================== */ var types = xdc.useModule('xdc.runtime.Types'); /* 此模块定义了在 * xdc.runtime 软件包中使用的基本常量和类型。 // /*========================= 默认值(模块)配置=================== // var Defaults = xdc.useModule('xdc.runtime.Defaults'); // *允许在目标上加载模块名称的标志。 模块名称 *字符串放置在.const 段中以用于调试。 * *选择一个: *- true (默认值) * 将此参数设置为 true 将在.const *中包含名称字符串 部分、以便更容易调试错误和断言。 *- false * 将此参数设置为 false 将减小.const *中的占用空间 部分。 因此、错误和断言消息将包含 * "未知模块"前缀、而不是实际的模块名称。 * *在 ROM 中使用 BIOS 时: * 此选项必须设置为 false。 // //Defaults.common$.namedModule = true; Defaults.common$.namedModule = false; //编译所有断言的*/ //Defaults.common$.diags_ASSERT = Diags.always_off; //允许 Mod_create()和 Mod_construct(),但不允许 delete()或析构()*/ Defaults.common$.memoryPolicy = types.create_policy; /*=========== 错误配置=================== // var Error = 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 = Error.PolicySpin; // *如果 Error.PolicyFxn 设置为 Error.PolicyDefault,则 每当错误模块引发错误时,都会调用此函数*。 * *选择一个: *- Error.print (默认值) * 为了更方便 *、错误通过 System_printf()进行格式化和输出 调试。 *-空 * 通过 while (1)存根函数捕获错误。 此选项会减少 * 代码占用量。 *-非空函数 * 调用自定义用户函数时出错。 请参阅错误模块文档 * 以了解更多详细信息。 // //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 (默认值) * 检查系统堆栈在空闲循环期间溢出的顶字和 * 如果检测到错误、则会引发错误。 *- false * 禁用运行时检查可提高运行时性能并产生 * 减小了闪存尺寸。 // //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.excHandlerFunc =空; // *在除以零时启用硬件异常生成。 * *选择一个: *- 0 (默认值) * 在除以0 *- 1 *时禁用硬件异常 在除以零时启用硬件异常 */ m3Hwi.nvicCCR.DIV_0_TRP = 0; //m3Hwi.nvicCCR.DIV_0_TRP = 1; // *为无效的数据对齐启用硬件异常生成。 * *选择一个: *- 0 (默认值) * 禁用数据对齐的硬件异常 *- 1 * 为数据对齐启用硬件异常 */ m3Hwi.nvicCCR.UNALIGN_TRP = 0; //m3Hwi.nvicCCR.UNALIGN_TRP = 1; //将复位矢量置于闪存的开头*/ if (类型 OAD_IMG_Address_A!='Undefined'& Owi_IMG_A = 0x06HAD_A = 1);m3IMG_A = 0x0610} 否则、如果(类型 OAD_IMG_B!='未定义'& OAD_IMG_B = 1) { m3Hw.resetVectorAddress = 0x6010; } 否则(类型 OAD_IMG_E!='未定义'& OAD_IMG_E = 1) { m3HwI.resetVectorAddress = 0x10; } 则为0x3Hwi.ResetVectorAddress = 0x10;否则为0x0 /*将中断矢量置于 RAM 的开头,以便在运行时配置中断*/ m3Hwi.vectorTableAddress = 0x20000000; /* CC2650有50个中断*/ m3Hwi.NUM_INTERRUPTS = 50; /*=========== 空闲配置========================= // var Idle = xdc.useModule('ti.sysbios.knl.Idle'); // *空闲模块用于指定 在系统中没有*其他任务正在运行时要调用的函数列表。 * *此处添加的函数将在空闲任务内连续运行。 * *函数签名: * void func (void); */ ///idle.addFunc ("&myIdleFunc"); /*=================== 内核(SYS/BIOS)配置=================== */ var BIOS = xdc.useModule('ti.sysbios.BIOS'); /* 启用 BIOS 库中的断言。 * *选择一个: *- true (默认值) * 启用断言以进行调试。 *- false * 禁用断言以减小代码占用空间并提高性能。 * *在 ROM 中使用 BIOS 时: * 此选项必须设置为 false。 // //BIOS.assertsEnabled = true; BIOS.assertsEnabled = false; // *指定 BIOS 的默认堆大小。 // if (typeof no_rom =='undefined'||(typeof no_ROM!='undefined'& no_ROM = 0) ){ BIOS.heapSize = 1668; } // *一个用于确定 xdc.runtime 源是否包含在自定义 *构建的 BIOS 库中的标志。 * *选择一个: *- false (默认值) * 预构建的 xdc.runtime 库由相应的目标 *提供 用于构建应用。 *- true * 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 (),* 需要一个用于动态内存分配的默认堆。 *- false * 通过禁止 Mod_create()和 Mod_delete ()来减少代码占用空间 * 调用的函数。 对象实例通过 *构造 mod_construct()并通过 Mod_析 构函数()析构。 * *在 ROM 中使用 BIOS 时: * 此选项必须设置为 true。 */ BIOS.runtimeCreatesEnabled = true; //BIOS.runtimeCreatesEnabled = false; /* 启用 BIOS 库中的日志。 * *选择一个: *- true (默认值) * 启用日志以进行调试。 *- false * 禁用日志记录以减少代码占用空间并改善运行时间 * 性能。 * *在 ROM 中使用 BIOS 时: * 此选项必须设置为 false。 // //BIOS.logsEnabled = true; BIOS.logsEnabled = false; BIOS.swiEnabled = true; //*================== 内存配置=================== // var 内存= xdc.useModule('xdc.runtime.Memory'); // *内存模块本身只为 IHeap 模块(例如、 HeapMem、HeapBuf)。 // //创建一个小型的“只分配”堆*/ if (typeof no_rom!='undefined'& no_ROM!= 0) { var HeapMin = xdc.useModule('xdc.runtime.HeapMin'); var heapMinParams = new HeapMinMin;参数: heapMinParams.size = 1668; var myHeapMin = HeapMinParin = Memory.defaultHeapInstance;= myapMinMin == myapMinParams.== ;= myapMin====mymyMate.===mymymyapMinParams.in=====mymymymymymyapMinParams.imum======= 程序配置=================== IAR 忽略*//* Program.stack。 使用 * IAR Embedded Workbench 中的项目选项来改变系统堆栈大小。 // if (typeof no_rom =='undefined'||(typeof no_rom !='undefined'&& no_ROM == 0) { Program.stack = 1024; Program.argSize = 0; } else { Program.stack = 512; } /*==== 信标配置=================== // var semaphore = xdc.useModule('ti.sysbios.knl.Semaphore'); // *启用对任务优先级挂起队列的全局支持。 * *选择一个: *- true (默认值) * 这允许根据任务优先级为待处理的任务提供服务。 *- false * 待处理任务是基于先入先出的服务。 * *在 ROM 中使用 BIOS 时: * 此选项必须设置为 false。 // //semaphore.supportsPriority = true; semaphore.supportsPriority = false; // *允许通过信号量隐式布置事件, *禁用以保存其他代码。 * *选择一个: *- true * 这允许信标模块发布信标和事件 * 同步。 *- false (默认值) * 必须显式发布事件以解除任务阻止。 * *在 ROM 中使用 BIOS 时: * 此选项必须设置为 false。 // //semaphore.supportsEvents = true; semaphore.supportsEvents = false; /*==== 事件配置=================== // if (typeof use_events!='undefined'&& use_events!= 0) { var events = xdc.useModule('ti.sysbios.knl.Event'); } /*========================= Swi 配置=================== // var Swi = xdc.useModule('ti.sysbios.knl.Swi'); // *软件中断是一个包含 要*执行的函数和优先级的对象。 软件中断被优先化、优先任务 *并被硬件中断服务例程抢先。 * *包括此模块是为了允许在用户的应用程序中使用 Swi。 */ swi.numPriorities = 6; /*========================= 系统配置=================== // var System = xdc.useModule('xdc.runtime.System'); // *当系统异常退出时调用中止处理程序。 * *选择一个: *- System.AbortStd (默认) * 调用 ANSI C 标准'abort()'来终止应用程序。 *- System.AbortSpin * 在 while (1) trap *中无限循环的轻量级中止函数 功能。 *-自定义中止处理程序 * 用户定义的函数。 请参阅*的系统模块说明文件 详细信息。 // //System.ABortFxn = System.ABortStd; System.ABortFxn = System.ABortSpin; //System.ABortFxn =“&myAbortSystem”; // *系统正常退出时调用 Exit 处理程序。 * *选择一个: *- System.exitStd (默认) * 调用 ANSI C 标准'exit()'来终止应用程序。 *- System.exitSpin * 在 while (1) trap *中无限循环的轻量级退出函数 功能。 *-自定义退出函数 * 用户定义的函数。 请参阅*的系统模块说明文件 详细信息。 // //System.exitFxn = System.exitStd; System.exitFxn = System.exitSpin; //System.exitFxn ="&myExitSystem"; // *最小化系统模块中的退出处理程序数组。 System 模块包括 *一个在 System_atexit()中注册的函数数数组,System_exit() 调用该函数组。 默认值为8。 // System.maxAtexitHandlers = 0; // * 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 ="&myUserFlushFlushn";/myUserFlushFlush =";/myUserExit =" //SysCallback.putchFxn ="&myUserPutch"; //SysCallback.readyFxn ="&myUserReady"; /*=========== 任务配置=================== // var Task = xdc.useModule('ti.sysbios.knl.Task'); // *检查任务堆栈是否存在溢出情况。 * *选择一个: *- true (默认值) * 在 *期间启用任务堆栈溢出情况的运行时检查 上下文切换("从"和"到") *- false * 禁用任务堆栈溢出条件的运行时检查。 * *在 ROM 中使用 BIOS 时: * 此选项必须设置为 false。 // //Task.checkStackFlag = true; Task.checkStackFlag = false; // *设置创建任务时的默认任务堆栈大小。 * *默认值取决于所使用的器件。 减小默认堆栈 *大小可节省更多内存。 */ Task.defaultStackSize = 512; /* 启用空闲任务。 * *选择一个: *- true (默认值) * 创建优先级为0的任务、该任务调用空闲挂钩函数。 此 * 选项必须设置为 true 才能获得 Power *提供的节能效果 模块。 *- false * 未创建空闲任务。 此选项占用的内存较少、为 no * 需要额外的默认任务堆栈。 * 若要在没有空闲任务的情况下通过电源模块实现节能 、请执行* 将 Idle.run 添加为 Task.allBllockedFunc。 // Task.enableIdleTask = true; //Task.enableIdleTask = false; //Task.allBlockedFunc = Idle.run; // *如果 Task.enableIdleTask 设置为 true,则该选项设置空闲任务 的*堆栈大小。 * *减小空闲堆栈大小可节省更多内存。 */ Task.idleTaskStackSize = 512; /* 减少任务优先级的数量。 *默认值为16。 *减少任务优先级的数量可节省内存。 */ Task.numPriorities = 6; /*========================= 文本配置=================== // var text = xdc.useModule('xdc.runtime.Text'); // *这些字符串放置在.const 段中。 将此参数设置为 * false 将节省.const 段中的空间。 错误、断言和日志消息 *将打印原始 ID 和 args、而不是格式化的消息。 * *选择一个: *- true (默认值) * 此选项将测试字符串加载到.const 中、以便于调试。 *- false * 此选项可减小.const 占用空间。 // //text.isLoaded = true; text.isLoaded = false; /*====== 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_nonetieded; //driversConfig.libType = driversConfig.LibType_Instrumented; //其余模块 var Diags = xdc.useModule('xdc.runtime.Diags'); var Main = xdc.useModule('xdc.runtime.Main'); var Reset = xdc.useModule('xdc.runtime.Reset'); //需要加载文本以格式化 Log_info/warning/error,但不用于 Log_print。 text.isLoaded = true; //日志 记录 var 日志= xdc.useModule('xdc.runtime.Log'); //使用 ANSI 代码覆盖错误输出颜色,并使用更短的(file.c:line)格式。 log.L_error ={ mask:diags.status、 级别:diags.error、 MSG:"\x1b[31;1mERROR:\x1b[0m (%s:%d)%$S" }; Log.L_info ={ mask:diags.info、 MSG:"\x1b[32;1mINFO:\x1b[0m (%s:%d)%$S" }; Log.L_warning ={ mask:diags.status、 级别:diags.warning、 MSG:"\x1b[33;1mWARNING:\x1b[0m (%s:%d)%$S" }; //拉入 LoggerCallback var LoggerCallback = xdc.useModule('xdc.runtime.LoggerCallback'); //让 LoggerCallback 调用我们的输出函数 LoggerCallback.outputFxn ="&uartLog_outputFxn"; //告诉空闲模块将 flush()函数添加到空闲循环(在电源之前) var flush= xdc.useModule('ti.sysbios.knl.Idle');//如果空闲未导入则添加。 idle.addFunc ('&uartLog_flush'); //创建 LoggerCallback 的静态实例并设置为默认主记录 器 var logerParams = new LoggerCallback.Params (); logerParams.arg = 1; //仅用于 Main (不在 rtsc 模块中的代码) Main.common$.logger = LoggerCallback.Params ( Defaults.common$.logger);createLogerLogerLoggring/ create Loggringringrams.rums = 1 xdc.useModule('ti.uia.sysbios.LoggingSetup'); //打开主模块中的 User1日志和信息(用户代码)。 关闭 User2以获得乐趣。 Main.common$.diags_USER1 = Diags.always_on; Main.common$.diags_USER2 = Diags.always_off; Main.common$.diags_USER6 = Diags.always_on; Main.common$.diags_INFO = Diags.always_on;
此致、
Mayer Tamás
尊敬的 Mayer:
尝试在.cfg 文件中替换此代码:
// Remaining Modules
var Diags = xdc.useModule(
'xdc.runtime.Diags'
);
var Main = xdc.useModule(
'xdc.runtime.Main'
);
var Reset = xdc.useModule(
'xdc.runtime.Reset'
);
// Need Text loaded for formatting of Log_info/warning/error, but not for Log_print.
Text.isLoaded =
true
;
// Logging
var Log = xdc.useModule(
'xdc.runtime.Log'
);
// Override error output color with ANSI codes, and use shorter (file.c:line) format.
Log.L_error = {
mask: Diags.STATUS,
level: Diags.ERROR,
msg:
"\x1b[31;1mERROR:\x1b[0m (%s:%d) %$S"
};
Log.L_info = {
mask: Diags.INFO,
msg:
"\x1b[32;1mINFO:\x1b[0m (%s:%d) %$S"
};
Log.L_warning = {
mask: Diags.STATUS,
level: Diags.WARNING,
msg:
"\x1b[33;1mWARNING:\x1b[0m (%s:%d) %$S"
};
// Pull in LoggerCallback
var LoggerCallback = xdc.useModule(
'xdc.runtime.LoggerCallback'
);
// Tell LoggerCallback to call our output function
LoggerCallback.outputFxn =
"&uartLog_outputFxn"
;
// Tell the Idle module to add our flush() function to the idle loop (before Power)
var Idle = xdc.useModule(
'ti.sysbios.knl.Idle'
);
// Add if Idle isn't already imported.
Idle.addFunc(
'&uartLog_flush'
);
// Create a static instance of LoggerCallback and set as default Main logger
var loggerParams =
new
LoggerCallback.Params();
loggerParams.arg = 1;
// Only for Main (code that's not in an rtsc module)
Main.common$.logger = LoggerCallback.create(loggerParams);
//Defaults.common$.logger = LoggerCallback.create(loggerParams); // Use for all log events
var LoggingSetup = xdc.useModule(
'ti.uia.sysbios.LoggingSetup'
);
// Turn on USER1 logs and INFO in Main module (user code). Turn off USER2 for fun.
Main.common$.diags_USER1 = Diags.ALWAYS_ON;
Main.common$.diags_USER2 = Diags.ALWAYS_OFF;
Main.common$.diags_USER6 = Diags.ALWAYS_ON;
Main.common$.diags_INFO = Diags.ALWAYS_ON;