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/TMDSLCDK6748:PDK 和 NDK 之间存在 Hwi 冲突

Guru**** 2562120 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/626253/rtos-tmdslcdk6748-hwi-confict-between-pdk-and-ndk

器件型号:TMDSLCDK6748
Thread 中讨论的其他器件:OMAPL138

工具/软件:TI-RTOS

我正在尝试在我的应用中设置网络和 UART 接口。  但当我在 LCDKC6748上调试我的应用时。 启动时会出现一些错误:

[C674x_0]使用

MAC 地址的默认 MAC 地址保存所需的200个字节:00-08-ee-03-14-99
00000.000 createInterrupts:错误:无法创建 RX Hwi!

00000.000 E_alreadyDefined:Hwi 已定义:INTR#-1094795586
00000.000 createInterrupts:错误:无法创建 TX Hwi!

00000.000 E_alreadyDefined:Hwi 已定义:INTR#-1094795586
00000.000 EMAC 已成功启动

00000.000 EMAC 注册 EMAC 成功

网络已添加:if-1:192.168.1.66
服务状态:Telnet:Enabled: :000
服务状态:Telnet:已禁用: :000
网络已删除:if-1:192.168.1.66

13:48 (20%) 11:96 (34%) 1:128 (4%) 6:256 (50%)
1:512 (16%) 0:1536 0:3072
(15360/49152毫米锁:40/0/34、mmBulk:3/0/3)

在48字节页面中分配3个块
(000d)(000d)(000b)
在256字节页面中分配3个块
(000a)(0000)

(000a)输入 main ()
ti.sysbios.family.c64p.htr:


已经定义的 Hwi# taskinfwi.intrl:#taskxwi#t:已经定义的 Hwi#taskined.infwi.ine.taskine.taskn#

我在评论时发现了这一点  

board_initCfg boardCfg;
boardCfg = Board_init_PINMUX_CONFIG |
Board_init_uart_stdio;
board_init (boardCfg); 

网络设置正常。 UART 中使用的某些 Hwi 似乎与网络模块冲突。

有人能帮我找出原因吗? 谢谢你

PS:这是我的 app.cfg

VAR Defaults = xdc.useModule('xdc.runtime.Defaults');
var Diags = xdc.useModule('xdc.runtime.Diags');
var Error = xdc.useModule('xdc.runtime.Error');
var Log = xdc.useModule('xdc.runtime.Log');
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
var Main = xdc.useModule('xdc.runtime.Main');
var Memory = xdc.useModule('xdc.runtime.Memory'
) var SysMin = xdc.useModule('xdc.runtime.SysMin');
var System = xdc.useModule('xdc.runtime.System');
var Text = xdc.useModule('xdc.runtime.Text');

var BIOS = xdc.useModule('ti.sysbios.BIOS');
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
VAR Swi = xdc.useModule('ti.sysbios.knl.Swi');
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 ECM = xdc.useModule('ti.sysbios.family.c64p.EventCombiner');
var core = xdc.useModule('ti.sysbios.hal.Core');
//
*取消注释此行以全局禁用断言。
*所有模块继承'库'模块的默认值。 您
*可以使用 Module.common$按模块覆盖这些默认值。
*禁用断言将节省代码空间并提高运行时性能。
Defaults.common$.diags_ASSERT = Diags.always_off;
*/

*
取消注释此行以防止模块名称加载到目标上。
*模块名称字符串放置在.const 段中。 将此
*参数设置为 false 将节省.const 段中的空间。 错误和
*断言消息将包含"未知模块"前缀、而
不是*实际模块名称。
Defaults.common$.namedModule = false;
*/

/*
将系统中的 exit 处理程序数组最小化。 System 模块包括
*一组函数,这些函数在 System_atexit()中注册,
*由 System_exit()调用。
//
System.maxAtexitHandlers = 4;

/*
取消注释此行以禁用错误打印功能。
*禁用时,我们会丢失错误信息,因为
*不打印错误。 如果
*由于 Error_print()函数
*调用 System_printf(),禁用 raiseHook 将节省一些代码空间。
error.raiseHook =空;
*/

/*
取消注释此行以防止*在
目标上加载错误、断言和日志字符串。 这些字符串放置在.const 段中。
*将此参数设置为 false 将节省.const 段中的空间。
*错误、断言和日志消息将打印原始 ID 和 args、而不是
*格式化的消息。
text.isLoaded = false;
*/

/*
取消注释此行以在
程序退出时禁用 SysMin *的字符输出。 SysMin 向循环缓冲区写入字符。
*可以使用 ROV 中的 SysMin Output 视图查看该缓冲器。
SysMin.flushAtExit = false;
*/

/*
BIOS 模块将为系统创建默认堆。
*指定此默认堆的大小。
//
//BIOS.heapSize = 0x1000;

//
*设置内存和高速缓存
*//

*使用内存堆配置模块*
/ var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
var Memory = xdc.useModule('xdc.runtime.Memory');
var MMU = xdc.useModule('ti.sysbios.family.c64p.Cache');

//*创建 HeapMem 堆实例"systemHeapParams"*
/ var systemHeapParams = new HeapMem.Params;
systemapParams = 0x00020;systemHeapParams.Params = 0x00020
VAR systemHeap = HeapMem.create (systemHeapParams);

//将"systemHeap "设置为应用程序的默认堆*/
Memory.defaultHeapInstance = systemHeap;


//
*从源构建自定义 SYS/BIOS 库。
//
BIOS.libType = BIOS.LibType_Custom;

//系统堆栈大小(由 ISR 和 Swi 使用)*/
Program.stack = 0x2000;

// System_printf ()的循环缓冲区大小*/
sysmin.bufSize = 0x200;

//
*为整个系统创建和安装记录
器*/
var logerBufParams = loggerBufParams;

创建 LoggerBufParams = 16.0=LoggerLoggerBufParams;创建和安装记录器
Defaults.common$.logger = logger0;
Main.common$.diags_INFO = Diags.always_on;

System.SupportProxy = SysMin;

/*
=== NDK 配置====
//

var Global = xdc.useModule('ti.ndk.config.Global');

//
*不生成任何代码,此示例显示如何
手动对 NDK 堆栈线程进行编码*'StackTest'。
//
Global. enableCodeGeneration = false;

//创建 NDK 堆栈任务线程*/
var Task = xdc.useModule('ti.sysbios.knl.Task');
var ndkTaskParams = new Task.Params ();
ndkTaskParams.priority = 5;
ndkTaskParams.stakSIZE = 8192;
Task.create ('&StackTest'、ndkParams);

/*
使用 OMAPL138 EMAC 模块。 这将导致 dirver 库链接
*到程序中。
*/
xdc.useModule('ti.drv.omapl138.Emac');

/*在启动时调用 init 函数*/
BIOS.startupFxns =['&EVM_Init'];

/*
=== PDK 配置====
//
var devType ="omapl138"

//加载 OSAL 软件包*/
var osType ="tirtos"
var OSAL = xdc.useModule('ti.osal.Settings');
OSAL.osType = osType;
OSAL.socType = devType;

/*使用 CSL 软件包*/
var devl = xdc.loadPackage ('ti.csl');
Csl.Settings.deviceType

= board.loadType
=板级软件包*和 board.loadType *
board.Settings.boardName ="lcdkOMAPL138";

//加载 UART 软件包*/
var UART = XDC.loadPackage ('ti.drv.UART');
UART.Settings.enableProfiling = false;
UART.Settings.socType = devType;

//创建 UART 任务线程*/
var uartTaskParams = new Task.Params= true.true/enuartams
(&truart.Params

)xdc.useModule('ti.sysbios.family.c64p.Exception');
;var = exception (&true/uart.Params = true/uart.Params = true/uart_exception) 

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

    我已通知软件团队。 请说明您使用的 NDK 和 PDK 版本。

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

    Jiawei、

    如果没有 EMAC 配置、UART HWI 设置是否正常工作? 您能否在 UART 配置下添加 EMAC 驱动程序配置并将以下内容添加到驱动程序设置中:

    /*加载 UART 软件包*/
    
    var UART = XDC.loadPackage ('ti.drv.UART');
    UART.Settings.socType = devType;
    
    //加载 EMAC 软件包*/
    var EMAC = XDC.loadPackage ('ti.drv.EMAC');
    EMAC.Settings.socType = devType; 

    您是否还可以指定如何完成 EMAC 驱动程序的 HWI 配置? 您可以查看 EMAC 驱动程序中的 test_main.c、了解如何 使用 app_interrupt_init ()函数设置 RX 和 TX 中断以供参考。

    在 EMAC 测试中、您可以看到 EMAC 和 UART 驱动程序一起使用、并且没有报告中断冲突。  UART 驱动程序使用事件 ID 36、48和69来映射、从而在 OSAL 中使用事件组合器。  您可以在 UART_SoC.c 中进行更改并尝试这样做。

    此致、

    Rahul

     

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

    感谢您的回复。 我将 NDK_2_20_06_35和 NSP_1_10_03_15用于网络、将 PDK_Omapl138_1_0_1用于 UART。 它应该与您的设置不同。

    在 NSP 内部使用 EMAC 的代码:

    /*
    使用 OMAPL138 EMAC 模块。 这将导致 dirver 库链接
    *到程序中。
    *
    xdc.useModule('ti.drv.omapl138.Emac'); 

    在 PDK 中使用 EMAC 的建议代码:

    /*加载 EMAC 软件包*/
    var EMAC = xdc.loadPackage ('ti.drv.emac');
    emac.Settings.socType = devType; 

    我已更改我的 app.cfg:

    VAR Defaults = xdc.useModule('xdc.runtime.Defaults');
    var Diags = xdc.useModule('xdc.runtime.Diags');
    var Error = xdc.useModule('xdc.runtime.Error');
    var Log = xdc.useModule('xdc.runtime.Log');
    var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
    var Main = xdc.useModule('xdc.runtime.Main');
    var Memory = xdc.useModule('xdc.runtime.Memory'
    ) var SysMin = xdc.useModule('xdc.runtime.SysMin');
    var System = xdc.useModule('xdc.runtime.System');
    var Text = xdc.useModule('xdc.runtime.Text');
    
    var BIOS = xdc.useModule('ti.sysbios.BIOS');
    var Clock = xdc.useModule('ti.sysbios.knl.Clock');
    VAR Swi = xdc.useModule('ti.sysbios.knl.Swi');
    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 ECM = xdc.useModule('ti.sysbios.family.c64p.EventCombiner');
    var core = xdc.useModule('ti.sysbios.hal.Core');
    
    //
    *取消注释此行以全局禁用断言。
    *所有模块继承'库'模块的默认值。 您
    *可以使用 Module.common$按模块覆盖这些默认值。
    *禁用断言将节省代码空间并提高运行时性能。
    Defaults.common$.diags_ASSERT = Diags.always_off;
    */
    
    *
    取消注释此行以防止模块名称加载到目标上。
    *模块名称字符串放置在.const 段中。 将此
    *参数设置为 false 将节省.const 段中的空间。 错误和
    *断言消息将包含"未知模块"前缀、而
    不是*实际模块名称。
    Defaults.common$.namedModule = false;
    */
    
    /*
    将系统中的 exit 处理程序数组最小化。 System 模块包括
    *一组函数,这些函数在 System_atexit()中注册,
    *由 System_exit()调用。
    //
    System.maxAtexitHandlers = 4;
    
    /*
    取消注释此行以禁用错误打印功能。
    *禁用时,我们会丢失错误信息,因为
    *不打印错误。 如果
    *由于 Error_print()函数
    *调用 System_printf(),禁用 raiseHook 将节省一些代码空间。
    error.raiseHook =空;
    */
    
    /*
    取消注释此行以防止*在
    目标上加载错误、断言和日志字符串。 这些字符串放置在.const 段中。
    *将此参数设置为 false 将节省.const 段中的空间。
    *错误、断言和日志消息将打印原始 ID 和 args、而不是
    *格式化的消息。
    text.isLoaded = false;
    */
    
    /*
    取消注释此行以在
    程序退出时禁用 SysMin *的字符输出。 SysMin 向循环缓冲区写入字符。
    *可以使用 ROV 中的 SysMin Output 视图查看该缓冲器。
    SysMin.flushAtExit = false;
    */
    
    /*
    BIOS 模块将为系统创建默认堆。
    *指定此默认堆的大小。
    //
    //BIOS.heapSize = 0x1000;
    
    //
    *设置内存和高速缓存
    *//
    
    *使用内存堆配置模块*
    / var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
    var Memory = xdc.useModule('xdc.runtime.Memory');
    var MMU = xdc.useModule('ti.sysbios.family.c64p.Cache');
    
    //*创建 HeapMem 堆实例"systemHeapParams"*
    / var systemHeapParams = new HeapMem.Params;
    systemapParams = 0x00020;systemHeapParams.Params = 0x00020
    VAR systemHeap = HeapMem.create (systemHeapParams);
    
    //将"systemHeap "设置为应用程序的默认堆*/
    Memory.defaultHeapInstance = systemHeap;
    
    
    //
    *从源构建自定义 SYS/BIOS 库。
    //
    BIOS.libType = BIOS.LibType_Custom;
    
    //系统堆栈大小(由 ISR 和 Swi 使用)*/
    Program.stack = 0x2000;
    
    // System_printf ()的循环缓冲区大小*/
    sysmin.bufSize = 0x200;
    
    //
    *为整个系统创建和安装记录
    器*/
    var logerBufParams = loggerBufParams;
    
    创建 LoggerBufParams = 16.0=LoggerLoggerBufParams;创建和安装记录器
    Defaults.common$.logger = logger0;
    Main.common$.diags_INFO = Diags.always_on;
    
    System.SupportProxy = SysMin;
    
    /*
    === NDK 配置====
    //
    var NDK = xdc.loadPackage ('ti.ndk.config');
    var Global = xdc.useModule('ti.ndk.config.Global');
    
    //
    *不生成任何代码,此示例显示如何
    手动对 NDK 堆栈线程进行编码*'stotTest'。
    //
    Global. enableCodeGeneration = false;
    
    //创建 NDK 堆栈任务线程*/
    var Task = xdc.useModule('ti.sysbios.knl.Task');
    var ndkTaskParams = new Task.Params ();
    ndkTaskParams.priority = 5;
    ndkTaskParams.stakSIZE = 8192;
    Task.create ('&StackTest'、ndkParams);
    
    /*
    使用 OMAPL138 EMAC 模块。 这将导致 dirver 库链接
    *到程序中。
    //
    //xdc.useModule('ti.drv.omapl138.Emac');
    
    //在启动时调用 init 函数*/BIOS.startupFxns
    =['&EVM_Init'];
    
    //
    *=== PDK 配置====
    //
    var devType ="omapl138"
    
    //加载 OSAL 软件包*/
    var osType ="tirtos"
    var OSAL = xdc.useModule('ti.osal.Settings');
    OSAL.osType = osType;
    OSAL.socType = devType;
    
    /*使用 CSL 软件包*/
    var devl = xdc.loadPackage ('ti.csl');
    Csl.Settings.deviceType
    
    = board.loadType
    =板级软件包*和 board.loadType *
    board.Settings.boardName ="lcdkOMAPL138";
    
    //加载 UART 软件包*/
    var UART = xdc.loadPackage ('ti.drv.UART');
    UART.Settings.enableProfiling = false;
    UART.Settings.loadType = devType;
    
    //创建 UART 任务线程*/
    var uart.taskParti = new Task.enable.ac.transl.transport
    
    
    =
    false;var.ac.transl.transl.ac.transl.ap.transl.ap.ac.transport = nimum.ac.transl.transl.ac.ap.ap.inations'.transl.transl.ac.translations'.ap.aporm.ap.transl.inations'.aporm.ap.ap.ac.ap.ap.ap.ap.ap.aporm.transl.aporm.ac.ap.
    
    
    
    
    
    var 异常=xdc.useModule('ti.sysbios.family.c64p.Exception');
    异常。enablePrint = true;
    
    

    但它不编译、错误是:

    未定义 第一个参考
    符号 文件中
    ------ --------
    convert_CoreLocal2GlobalAddr D:\ti\pdk_omapl138_1_0_1\packages/ti\transport \ndk\Nimu\lib\omapl138\c674\release\ti.transport.ndk.Nimu.ae674 
    OSAL_enterSingleCoreCriticalSection D:\ti\pdk_omapl138_1_0_1\packages/ti\drv\emac\lib\omapl138\c674\release\ti.drv.emac.ae674 
    OSAL_exitSingleCoreCriticalSection D:\ti\pdk_omapl138_1_0_1\packages/ti\transport \ndk\Nimu\lib\omapl138\c674\release\ti.transport.ndk.Nimu.ae674 
    OSAL_FREE D:\ti\pdk_omapl138_1_0_1\packages/ti\drv\emac\lib\omapl138\c674\release\ti.drv.emac.ae674 
    OSAL_malloc D:\ti\pdk_omapl138_1_0_1\packages/ti\drv\emac\lib\omapl138\c674\release\ti.drv.emac.ae674 
    

    我不知道为什么它会外倾? 我包含了 OSAL 封装

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我现在在 PDK 中使用 EMAC 驱动程序。 我在 pdk_omapl138_1_0_1\packages/ti\transport \ndk\Nimu\examples\HelloWorld\src 下找到"nimu_osal_omapl13x.c"文件已实现这些函数。 我的问题得到了解决。 感谢 TI 团队。