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/LAUNCHXL-CC1310:Log_info0 ()出现问题-无法用于 CC1310 LaunchPad

Guru**** 2540720 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/569568/rtos-launchxl-cc1310-problems-with-log_info0--not-working-for-cc1310-launchpad

器件型号:LAUNCHXL-CC1310

工具/软件:TI-RTOS

我正在使用 TI 15.4-Stack 示例传感器项目、SWRU488B 对此进行了介绍。 项目包括 System_printf ()路由到的 UART_printf 实用程序,我可以在 Putty 客户端中看到 System_printf ()输出。

我在 main.c 中包含了 XDC/runtime Log.h,并在 主任务中将 Log_info0 ()与 System_printf ()一起添加到无限循环中

while (1)
{
sensor_process();
system_printf ("hello world \n"r);
log_info0 ("hello again \n");
} 

System_printf 正在打印、而 Log_info0未提供输出。

正如我从 RTSC-pedia 中发现的,日志函数生成日志事件,这些事件由 LoggerSys logger 处理,后者将 evens 路由到 System_printf()。  根据 RTCS-pedia 、我已将这行添加到.cfg 文件中

VAR Log = xdc.useModule("xdc.runtime.Log");
var Diags = xdc.useModule("xdc.runtime.Diags");

//为非模块启用"info"事件的运行时控制*/
var Main = xdc.useModule("xdc.runtime.Main");
Main.common$.diags_INFO = Diags.RUNTIME_ON;

//使用 LoggerSys ILogger 服务提供商*/
var Logger = xdc.useModule("xdc.runtime.LoggerSys");

/*为所有非模块代码创建和绑定记录器*/
Main.common$.logger = Logger.create(); 

我还对行进行了注释

// var ROM = xdc.useModule('ti.sysbios.rom.ROM');

// rom.romName = rom.CC1350; 

并将 BIOS.logs Enabled 修改为 true 以避免注销编译

BIOS.logsEnabled = true; 

这是我的完整.cfg 文件

/* SYSBIOS */
var useSysbiosInRom;

/*确定是否使用 TIRTOS ROM 代码*/
if (typeof no_rom =='undefined'||
(typeof no_rom!='undefined'&& no_ROM = 0)
{
useSysbiosInRom = true;
}
否则
{
useSysbiosInRom = false;
}

if (useSysbiosInRom)
{//
var ROM = xdc.useModule('ti.sysbios.rom.ROM');

// rom.romName = ROM.CC1350;
}

var Defaults = xdc.useModule('xdc.runtime.Defaults');
var Types = xdc.useModule('xdc.runtime.Types');
var Diags = xdc.useModule('xdc.runtime.Diags');
VAR Log = xdc.useModule("xdc.runtime.Log");

//使用 LoggerSys ILogger 服务提供商*/
var Logger = xdc.useModule("xdc.runtime.LoggerSys");

var Error = xdc.useModule('xdc.runtime.Error');
var Main = xdc.useModule('xdc.runtime.Main');
var Memory = xdc.useModule('xdc.runtime.Memory');
var SysCallback = xdc.useModule('xdc.runtime.SysCallback');
var System = xdc.useModule('xdc.runtime.System');
var text = xdc.useModule('xdc.runtime.Text');
if (sysbiosInRom)
{
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
}
否则
{
var HeapMin = xdc.useModule('xdc.runtime.HeapMin');
}
var Reset = xdc.useModule('xdc.runtime.Reset');
var BIOS = xdc.useModule('ti.sysbios.BIOS');
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
var Task = xdc.useModule('ti.sysbios.knl.Task');

var Semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');
var Hwi = xdc.useModule('ti.sysbios.hal.Hwi');
var M3Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');

//启用对非模块的"info"事件的运行时控制*
Main.common$.diags_INFO = Diags.Runtime_on;

/*为所有非模块代码创建和绑定记录器*/
Main.common$.logger = Logger.create();


//启用空闲任务(默认)。 */
Task.enableIdleTask = true;

//编译所有断言的*/
Defaults.common$.diags_ASSERT = Diags.always_off;

//不要在目标上加载模块的字符串名称*/
Defaults.common$.namedModule = false;

//允许 Mod_create()和 Mod_construct(),但不能删除()或析构()*/
Defaults.common$.memoryPolicy = types.create_policy;

/*不要在目标上加载诊断/描述性文本字符串*/
text.isLoaded = false;

//使用用户提供的最小回调提供程序*/
System.SupportProxy = SysCallback;
//不需要退出处理程序*/
System.maxAtexitHandlers = 0;

// main()和 Hwi、Swi 堆栈大小*/
Program.stack = 1280;

如果(useSysbiosInRom)
{
//不需要命令行参数 main (argc、argv)*/
Program.argSize = 0;
}

//构建 SYS/BIOS 的自定义优化版本*/
BIOS.libType = BIOS.LibType_Custom;

//不记录-全部编译*/
BIOS.logsEnabled = true;

//禁用 SYS/BIOS.AssertsCode =
false

/*减少任务优先级数量以保存 RAM */
Task.numPriorities = 6;

//设置默认任务堆栈大小-在未指定任务堆栈时使用*/
Task.defaultStackSize = 512;

//不检查堆栈是否溢出-节省周期(和功耗)并且闪存*/
Task.checkStackFlag = false;

/*禁用异常处理以保存闪存-在活动开发期间撤消*/
M3Hwi.enableException = true;
M3Hwi.exhandlerFunc ="&Main_exhandler";
M3Hwi.nvicCCR.UNALIGN_TRP = 0;
M3Hwi.nCCR.DIV_0_TRP = 0;

/*在空闲循环期间不检查
*中断溢出;* Hwi.checkStackFlag

/*最大限度地减少错误模块的闪存和 RAM 使用*/
Error.raiseHook =空;/* null = LOOP 函数的默认值。 例如、将"&myFxn"用于您自己的处理程序函数。 //
Error.maxDepth = 2;

//设置默认的 CPU 频率*/
BIOS.cpufreq.lo = 48000000;

//将复位向量放置在闪存的开始位置*/
M3Hwi.resetVectorAddress = 0x0;

//将中断向量放置在 RAM 的开始位置,以便在运行时配置中断*/
M3Hwi.vectorTableAddress = 0x20000000;

/* CC2650有50个中断*/
M3Hwi.NUM_INTERRUPTS = 50;

if ( useSysbiosInRom )
{//
创建一个小型的"只分配"堆*/
BIOS.heapSize = 1724;
}
否则
{
var heapMinParams = new HeapMinMinMats.Params;
heapMinParams.size = 1724;}myvar

= myapMapmyMatvs
=

xdc.useModule('ti.sysbios.knl.Swi');;myHeapMinMatwis = myHeapMinumin Memory.defaultHeapInstance;

BIOS.swiEnabled = true;

BIOS.includeXdcRuntime = true;

//任务无法基于优先级挂起*/
semaphore.supportsPriority = false;

//更改默认错误函数-仅旋转*/
Error.policyFxn = Error.policySpin;

// true:允许运行时创建例如 semaphores
* false:编译 BIOS 中的内存引用*/
BIOS.runtimeCreatesEnabled = true;

/*中止和退出函数-仅 SPIN */
System.ABortFxn = System.ABortSpin;
System.exitFxn = System.exitSpin;

/* CC13xx 启动模块*/
var Boot = xdc.useModule('ti.sysbios.family.arm.cc26xx.Boot');
Boot.driverlibVersion = 2;
Boot.customerConfig = false;
//Boot.checkBackdoor = true;

//时钟周期设置为10时
钟周期;如果未定义* Perticktick = 10;

/*空闲电源*
/ var 空闲= xdc.useModule('ti.sysbios.knl.Idle');
idle.addFunc ('&Power_idleFunc');

/* UART 输出*/idle.addFunc
('&UartPrintf_flush');
SysCallback.putchFxn ="&UartPrintf_puttutch;

此外、我在编译器预定义符号中将 XDC_runtime _Log_disable_all 更改为 X_XDC_runtime _Log_disable_all、但仍没有从 Log_info0 ()输出

我忘记或错过了什么?

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

    您可能需要在日志打印语句之后调用 System_flush()。

    此外、您是否检查了用于日志输出的 ROV 工具?  如果不清除日志缓冲区、则可能可以在其中一个记录器模块下找到输出。

    它位于 CCS 中的以下位置:

       工具-> RTOS 对象查看器(ROV)

    这是我的设置的屏幕截图。  我使用不同的记录方式(UIA LoggerStopMode 模块)。  但与您拥有的内容类似。

    在 ROV 视图中、它可能位于"LoggerSys"下。  但查找其他日志模块并检查它们。

    Steve

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

    [引用 user="eGor Shundeev"]

    /* enable runtime control of "info" events for non-modules */
    Main.common$.diags_INFO = Diags.RUNTIME_ON;

    [/报价]

    如果您仍然看不到任何内容、您可以将其更改为 Diags.always_on