主题中讨论的其他器件:TM4C1294KCPDT、 SYSBIOS
工具/软件:TI-RTOS
您好!
我正在使用 wolfSSL 处理 TI_RTOS 示例。
是否有任何其他 SSL 库可与 TI-RTOS 一起使用、而不是 wolfSSL 等其他库?
如果是、是否有任何示例?
谢谢你。
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
您好!
我正在使用 wolfSSL 处理 TI_RTOS 示例。
是否有任何其他 SSL 库可与 TI-RTOS 一起使用、而不是 wolfSSL 等其他库?
如果是、是否有任何示例?
谢谢你。
Deepak、您好!
对于 MSP432E4和 SimpleLinkSDK、我们使用 mbedtls。 您可以在 以下位置下载 SDK:https://www.ti.com/tool/download/SIMPLELINK-MSP432E4-SDK。 其中有几个示例。 注意:具有 SimpleLink SDK 的 NDK 比用于 TivaC 的 TI-RTOS 更新、因此可能需要进行一些调整、但一般概念是相同的。
Todd
Deepak、您好!
请查看 tcpechatls 示例。
此示例在安全套接字上创建 TCP 回显服务器。
SimpleLink SDK 中网络应用的一个新方面是,它们使用称为 SlNetSock (实际上是 SlNet* API)的模块进行接口设置。
如果您在 tcpEchoHooks.c 中的 netIPAddrHook()函数中查看这些初始化调用。 TCP 回显服务器线程也是从此处创建的。
在服务器代码中创建和初始化套接字时、会进行 SSL/TLS 设置。 您可以在文件 tcpEchoTLS.c 的函数 tcpHandler 中找到该文件。 在这里,您将找到更多设置安全套接字和证书的 SlNet*()调用。
Steve
P.S. 有关 SlNetSock API 的文档、请参阅 SDK 文档目录下的 NS_API_Reference.html
您好、Steve、
我有一个使用 TI-RTOS 的基于 HTTPS POST 的项目、我使用 wolfSSl 发布到服务器。 我让它工作。
现在、我尝试用 mbedTLS 替换 wolfSSL。 为了将 wolfSSl 添加到项目中、我们提供了有关如何构建 wolfSSl 以及如何将其添加到项目中的适当文档。
但有了 mbed,我就没有任何东西可以把它添加到项目中。
项目中已存在套接字接口和线程创建。
我需要一种将 mbedTSL 添加到 TIvaC 系列的方法。 我使用的是带 TM4C1294KCPDT 的定制板。
此致、
Deepak
您好 Todd、
有人可以帮助我解决这个问题吗?
我正在尝试将 mbedTLS 代替 wolfSSL、并将 TI-RTOS 用于 TM4C129NCPDT Tiva C 系列。 我没有找到任何与它相关的东西。
我浏览 了 SimpleLinkSDK、没有任何帮助、因为没有有关构建和使用 Mbed 的说明。
如果我删除 wolfSSl、TI_RTOS 项目仍会保留这些变量和文件。 我不知道要删除哪些文件并替换为什么文件?
是否有办法实现这一目标?
此致、
Deepak
Deepak、您好!
您需要自己从网络上获取 mbedTLS: https://github.com/ARMmbed/mbedtls。 这里提供了有关如何使用它的说明。
对于适用于 MSP432E4 SDK 的 SimpleLink、我们更新了 NDK 以处理大多数 mbedTLS 设置。 您不能将该 NDK 版本与 TI-RTOS 一起用于 TivaC、但可以使用 simplelink_msp432e4_SDK_ sources\ti\ndk\slnetif\slnetifndk.c 文件作为参考(以及来自开源网站的 mbedTLS 文档)。
Todd
您好 Todd、
我已经从网站下载了 mbedTLS 并浏览了这些文档。
我的问题是针对 Tiva C 的 TI-RTOS NDK。 网络服务1.11.00.10有很多文件依赖于 wolfSSL。
tirtos_tivac_2_16_01_14\products\ns_1_11_00_10\packages/ti\net\lib 和 tirtos_tivac_2_16_01_14\products\ns_1_11_00_10\packages\ti\net\http\lib
有许多.mak 文件引用 wolfsl。 您能告诉我哪些文件需要删除、哪些文件需要更改以便我可以使用 mbed 吗?
我很抱歉提出这么多问题。 我对这很陌生、对此我不知道。
此致、
Deepak
您好 Todd、
我正在努力实现这一目标、在您的帖子的帮助下、我正在朝着正确的方向移动、但我遇到了总线故障错误。
使用 slnettifndk.c 文件、我已在 http 示例中添加了熵源代码、但当我尝试使用 mbedtls_CTR_drbg_seed 时、我收到错误消息。
硬故障:强制:BUSFAULT:PRECISERR.Data Access 错误。 地址= 0xcf6c6c77
我正在尝试找到原因、但我无法找到原因。 您对此有什么想法吗?
我还附加了 ROV 的图像。
此致、
您好 Todd、
我确实使用了断点、我可以看到 CTR_drbg 中的 int mbedtls_CTR_drbg_resedeed()函数导致了该压缩。
if (0!= ctx->f_entropy (ctx->p_entropy、seed、
ctx->entropy_len ))
{
return (MBEDTLS_ERR_CTRL_DRBG_entropy_source_FAILED);
}
这是为我提供该异常的代码行。
将光标悬停在 ctx 上时、我可以看到 p_entropy 没有加载。 这是否是导致该总线故障的原因?
您好 Todd、
我使用了"Disassembly"单步执行代码、我可以看到 pthread_mutex_lock 函数导致了此错误。
对于该项目、我使用 了"C:\ti\simplelink_msp432e4_sdk_3_20_00_10\source\third_party\mbettls\ti\ccs\m4f\mbedtls.a"链接器文件将 mbedTLS 链接到我的项目。 当我尝试构建我的项目时、我遇到了 pthread 互斥量函数的未定义 sybol 错误、我在 TI 网站上查找并将这两行添加到我的.cfg 文件中
VAR 设置= xdc.useModule('ti.sysbios.posix.Settings');
settings.supportsMutexPriority = true;
添加这些行后、我成功构建了我的项目。
但仍然是 由于 pthread_mutex_lock 函数、我收到异常错误。
我是否需要更改.cfg 文件中的某些内容或添加或删除某些内容?
我要在这里附加.cfg 文件。
/*
*版权所有(c) 2015-2016、德州仪器(TI)公司
*保留所有权利。
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
**源代码的重新分发必须保留上述版权
*注意、此条件列表和以下免责声明。
*
**二进制形式的再发行必须复制上述版权
*请注意、中的此条件列表和以下免责声明
*随分发提供的文档和/或其他材料。
*
**德州仪器公司的名称和名称均不相同
*其贡献者可用于认可或推广衍生产品
*未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者"按原样"提供
*以及任何明示或暗示的保证、包括但不限于:
*特定适销性和适用性的隐含保证
*不承认目的。 在任何情况下、版权所有者不得或
*派遣国应对任何直接、间接、偶然、特殊、
*典型或必然的损害(包括但不限于
*采购替代货物或服务;丧失使用、数据或利润;
*或业务中断)、无论原因是什么以及任何责任理论、
*无论是合同、严格责任还是侵权行为(包括疏忽或)
*否则)因使用本软件而以任何方式产生、
*即使被告知可能会发生此类损坏。
*
/*========================= 时钟配置======================== *
VAR 时钟= xdc.useModule('ti.sysbios.knl.Clock');
/*
*默认值取决于系列。 例如、Linux 系统通常只能使用
*支持的最小周期为10000us、倍数为10000us。
* TI 平台的默认值为1000us。
*
clock.tickPeriod = 1000;
/*========================= 默认值(模块)配置=================== *
VAR 默认值= xdc.useModule('xdc.runtime.Defaults');
/*
*允许在目标上加载模块名称的标志。 模块名称
出于调试目的、*字符串放置在.const 段中。
*
*选择一项:
*- true (默认值)
*将此参数设置为 true 将在.const 中包含名称字符串
*部分、以便更轻松地调试错误和断言。
*-错
*将此参数设置为 false 将减小.const 中的占用空间
*部分。 因此、错误和断言消息将包含
*"未知模块"前缀、而不是实际的模块名称。
*
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 =错误。policyDefault;
//Error.PolicyFxn = Error.PolicySpin;
/*
*如果 Error.policyFxn 设置为 Error.policyDefault,则调用此函数
*每当错误模块引起错误时。
*
*选择一项:
*- Error.print (默认值)
*为方便,错误通过 System_printf()进行格式化和输出
*调试。
*-空
*错误未格式化或记录。 此选项减少了代码占用空间。
*-非空函数
*错误调用自定义用户函数。 请参阅错误模块文档
*以了解更多详细信息。
*
error.raiseHook =错误。打印;
//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.initStackFlag = 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;
/*========================= 空闲配置========================= *
VAR 空闲= xdc.useModule('ti.sysbios.knl.Idle');
/*
*空闲模块用于指定在无时要调用的函数列表
*系统中正在运行其他任务。
*
*此处添加的函数将在空闲任务内连续运行。
*
*函数签名:
* void func (void);
*
//idleFunc ("&myIdleFunc");
/*========================= 内核(SYS/BIOS)配置=================== *
VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
/*
*在 BIOS 库中启用断言。
*
*选择一项:
*- true (默认值)
*启用断言以进行调试。
*-错
*禁用断言以减小代码占用空间并提高性能。
*
//BIOS.assertsEnabled = true;
BIOS.sertsEnabled = false;
/*
*为 BIOS 指定默认堆大小。
*
BIOS.heapSize = 131072;//20480
BIOS.heapTrackEnabled = true;//DR 8/21/19
/*
*用于确定 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_析 构函数()析构。
*
BIOS.runtimeCreatesEnabled = true;
//BIOS.runtimeCreatesEnabled = false;
/*
*在 BIOS 库中启用日志。
*
*选择一项:
*- true (默认值)
*启用日志以进行调试。
*-错
*禁用日志记录以减少代码占用空间并改善运行时间
性能。
*
//BIOS.logsEnabled = true;
BIOS.logsEnabled = false;
/*========================= 内存配置=================== *
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 = 2048;
}
/*
*为 GNU 目标启用半主机功能以打印到 CCS 控制台
*
if (Program.build.target.$name.match (/GNU/)){
VAR SemiHost = xdc.useModule('ti.sysbios.rts.gnu.SemiHostSupport');
}
/*========================= 信标配置=================== *
VAR 信标= xdc.useModule('ti.sysbios.knl.Semaphore');
/*
*启用对任务优先级挂起队列的全局支持。
*
*选择一项:
*- true (默认值)
*这允许根据任务优先级为待处理的任务提供服务。
*-错
*待处理任务是基于先入先出的服务。
*
*在 ROM 中使用 BIOS 时:
*此选项必须设置为 false。
*
//semaphore.supportsPriority = true;
Semaphore.supportsPriority = false;
/*
*允许通过信标隐式布置事件、
*禁用以保存其他代码。
*
*选择一项:
*-正确
*这允许信标模块发布信标和事件
*同步。
*- false (默认值)
*必须显式发布事件以解除阻止任务。
*
*
//semaphore.supportsEvents = true;
Semaphore.supportsEvents = false;
VAR 设置= xdc.useModule('ti.sysbios.posix.Settings');
settings.supportsMutexPriority = true;
//Settings.supportsMutexPriority = false;
/*========================= Swi 配置=================== *
VAR Swi = xdc.useModule('ti.sysbios.knl.Swi');
/*
*软件中断是封装函数的对象
*已执行且具有优先级。 软件中断被优先化、优先于任务
和被硬件中断服务例程抢先。
*
*包括此模块是为了允许在用户的应用程序中使用 Swi。
*
/*========================= 系统配置=================== *
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');
Task.initStackFlag = true;
/*
*检查任务堆栈是否有溢出情况。
*
*选择一项:
*- true (默认值)
*在期间启用任务堆栈溢出情况的运行时检查
*上下文切换("从"和"到")
*-错
*禁用任务堆栈溢出情况的运行时检查。
*
Task.checkStackFlag = true;
//Task.checkStackFlag = false;
/*
*设置创建任务时的默认任务堆栈大小。
*
*默认值取决于所使用的器件。 减少默认堆栈
*大小可节省更多内存。
*
Task.defaultStackSize = 2048;
/*
*启用空闲任务。
*
*选择一项:
*- 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 = 16;
/*========================= 文本配置=================== *
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;
/*========================= 应用程序特定实例========================= *
VAR 秒= xdc.useModule('ti.sysbios.hal.Seconds');
VAR 时间戳= xdc.useModule('xdc.runtime.Timestamp');
/*========================= NDK 配置=================== *
VAR NDK = XDC.loadPackage ('ti.NDK.config');
VAR Global = xdc.useModule('ti.ndk.config.Global');
VAR TCP = xdc.useModule('ti.ndk.config.Tcp');
global.ipv6 = false;
global.stackLibType = Global. min;
Global.networkIPAddrHook ="&netIPAddrHook";
//自动调用 fdOpen/CloseSession 以执行套接字任务*/
Global.autoOpenCloseFD = true;
global.pktNumFrameBufs=10;
global.memRawPageCount = 6;
global.ndkThreadStackSize = 1536;
global.lowTaskStackSize = 1280;
Global.normTaskStackSize = 1024;
global.highTaskStackSize = 1024;
tcp.transmitBufSize = 1024;
tcp.receiveBufSize = 1024;
/*========================= HTTP 配置=================== *
VAR HTTP = xdc.useModule('ti.net.http.Http');
Http.networkStack = HTTP.NDK;
/*========================= SNTP 配置======================== *
VAR SNTP = xdc.useModule('ti.net.sntp.Sntp');
Sntp.networkStack = SNTP;
此致、
Deepak