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:NDK 自定义节拍周期和结构 timeval.sec 值

Guru**** 2463330 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/655630/rtos-ndk-custom-tick-period-and-struct-timeval-sec-value

工具/软件:TI-RTOS

您好!

我想将默认的1000US 时钟更改为100us。 这一个:

/*========================= 时钟配置======================== */
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
var Mailbox = xdc.useModule('ti.sysbios.knl.Mailbox');
var HTTP = xdc.useModule('ti.ndk.config.Http');
//
*默认值取决于系列。 例如、Linux 系统通常仅
*支持最短时间为10000us、是10000 us 的倍数。
* TI 平台的默认值为1000us。
*/
Clock.tickPeriod = 100; 

在我实例化时钟实例的每个任务中、我都更新了周期值(将它们乘以10)以获得正确的时序。 在我的应用中、我必须使用 custom_ndk_thread、以便将 clockParams.period 设置为1000:

//--------------------------------------------------------------
//自定义 NDK 线程
void custom_NDK_config_Global_stackThread (UArg0、UArgarg1)
{
System_printf ("自定义 NDK 堆栈线程正在运行");
system_flush();

内部 RC;
句柄 hCfg;

TI_SYSBIOS_KNL_Clock_Params 时钟参数;

/*创建 NDK 心跳*/
TI_SYSBIOS_KNL_Clock_Params_init (&clockParams);
clockParams.startFlag = true;
//默认值为100,但时钟周期减少
clockParams.period = NDK_tick_period;
TI_SYSBIOS_KNL_Clock_create (&llTimerTick、clockParams.period、&clockParams、NULL);


/*这必须是应用程序中做的第一件事!! *
RC = NC_SystemOpen (NC_Priority_LOW、NC_OPMODE_INTERRUPT);
如果(RC){
XDC_runtime_System_abort ("NC_SystemOpen Failed (%d)\n");
}

/*从头开始创建和构建系统配置。 *
hCfg = CfgNew();
如果(!hCfg){
xdc_runtime_System_printf ("无法创建配置\n");
转至 MAIN_EXIT
;}

{
extern void hook_StackInit();

/*调用用户定义的堆栈初始化挂钩*/
HOOK_StackInit (hCfg);
}
//等等 

我的问题如下:

我正在使用 select()函数来检查套接字上是否有数据等待读取:

静态 int read_packet (int timeout)
{
if (timeout >0)
{
fd_set readfds;
struct timestimal tmv;

//初始化文件描述符 set
fd_zero (&readfds);
fd_set (socket_id、&readfds);

//初始化超时数据结构
tmV.tv_tv_sec = timeout;
tval.tv =

NULL、tv = 1、intu_usec、int2、int2 = NULL、int2、int2 = NULL;int

//如果超时,select 返回0;如果输入可用,则返回1;如果(
RetVal <=0)
返回 RetVal,则返回-1;
}

int total_bytes = 0,bytes_rcvd,packet_length;
memset (packet_buffer,0, sizeof (packet_buffer));

if ((bytes_rcvd = recv (socket_id、(packet_buffer+total_bytes)、RCVBUFSIZE、0))<= 0){
System_printf ("套接字错误:%d\n",fdError());System_flush();
返回-1;
}

但是 tV_sec 忽略更新后的时钟、它似乎可以处理设置值的第10个。 (当我设置10超时时、实际超时为1秒)如果我为 NDK 设置了正确的时序、为什么会忽略 sec 参数? 我有什么问题吗?

感谢你的答复

 

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

    Daniel、您好!

    遗憾的是、我们有一个打开的错误/增强票证

    NDK-9:根据 NDK 节拍的单位推导所有与时间相关的定义和值

    详细信息:NDK 内核堆栈包含许多与时间相关的定义、变量和代码段。 其中一些不是从 NDK 的计时器节拍(当前为100ms)值得出的。 因此、如果您更改节拍值、NDK 的某些部分不受变更影响。 这可能会以各种方式导致 NDK 的多功能。

    为什么要 Clock.tickPeriod 为100us?  

    Todd

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

    我有基于时钟函数的代码(ADC 相关内容)、并且在 RTOS 封装中找不到任何计时器示例。 因此,它的种子更容易更新时钟而不是使用计时器....

    但是、根据您的回答、我需要找到一些答案。

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

    请看阶梯示例。 它会创建一个计时器。 它实际上构建一个。 如果您不熟悉 create 和构造之间的区别,请查看此页: processors.wiki.ti.com/.../TI-RTOS_Object_Creation_Comparison

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

    谢谢! 看起来很有希望!

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

    我已将 ADC 注释从 BP101拆分为以下主题: e2e.ti.com/.../656051 。 我们将在此处回答/回复它。

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

    [引用 USER="Daniel Vamos"],所以它种子更容易更新时钟而不是使用计时器....

    但是、根据您的回答、我需要找到一些答案。

    即使没有任何内部依赖关系使时钟周期变得很好、也会显著增加操作系统开销(即使1ms 也很好)。 时钟节拍管理所有等待等。 因此、在每个时钟节拍上、它必须管理这些时钟。 周期越长、在任何操作系统中所代表的开销越大。

    Robert

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

    您 设置的 GPTM 时钟模块(节拍模式) 在1000us 时"跳过不必要的节拍"的一件好事。 在后台 CPU 执行中、如果没有构建或创建内核任务、这似乎会对这些函数有所帮助。

    我说过、由于 RTOS 分析器 CPU 负载/执行图似乎从来没有为上述函数绘制主模块动态创建的任务行。 如果它们被集中到 HWI/SWI 图形行中、则帮助文本未提及这一点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的评论和解释。 我可以使它与计时器模块一起工作。 它工作得非常好。 我使用了此来源 :www.ti.com/.../spruex3t.pdf 第8.3节。 这很容易理解并被很好地描述。