您好!
我将 am243x-evm 用于 TCP 服务器示例。
我设置了一个计时器、以便为信标提供自由唤醒的 RTOS 任务。
我在 FreeRTOSConfig.h 中具有以下行 #define configMAX_SYSCALL_INTERRUPT_priority (0xE0U)
在(syscfg)中、计时器中断优先级应该是多少、这样它将低于 FREE RTOS -使任务能够唤醒? (允许的范围为0-15)
谢谢。
Eli
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.
您好!
我将 am243x-evm 用于 TCP 服务器示例。
我设置了一个计时器、以便为信标提供自由唤醒的 RTOS 任务。
我在 FreeRTOSConfig.h 中具有以下行 #define configMAX_SYSCALL_INTERRUPT_priority (0xE0U)
在(syscfg)中、计时器中断优先级应该是多少、这样它将低于 FREE RTOS -使任务能够唤醒? (允许的范围为0-15)
谢谢。
Eli
尊敬的 Ming:
我将计时器中断 设置为15 、但任务仍在~ 20usec 而非~2usec 的条件下唤醒
我已经使用 FreeRTOS 任务和计时器中断回调测试了一个简单的程序。
SemaphoreHandle_t sem=NULL;
sem = xSemaphoreCreateBinary();
//----------------------------------------------------------------------------------------------------------
空任务(空)
{
while (1)
{
if (xSemaphoreTake (SEM、0xFFFFFFFF));
{
do_somethes(); //<-------- POINT B
}
}//永远
}//任务
//----------------------------------------------------------------------------------------------------------------------------------------------------------
空 TimerTick (空)
{
basetype_t xHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR (SEM、&xHigherPriorityTaskWoken);
portYIELD_FROM_ISR (xHigherPriorityTaskWoken);//请求上下文切换 //<<---------------- POINT A
}//TimerTick
//------------------
TimerTick()按预期每31.24usec 运行一次! (用示波器测量)
I 测量 从 A 点到 B 点, 时间=~ 20us。
我应该配置什么来获得最大2usec 延迟?
谢谢。
此致、
Eli
尊敬的 Eli:
我唯一能想到的是你的 Task ()的优先级,其中 xSemaphoreTake ()正在等待。 通常、任务调度每1000uS 发生一次、或者发生一个中断。 任务调度程序将执行最高的任务。 如果有一个任务的优先级高于 Task (),那么 xSemaphoreTake ()的执行将被延迟。 请检查示例中所有任务的优先级、包括空闲任务。 确保 Task ()处于最高优先级。
此致、
明
尊敬的 Ming:
我检查了任务()的优先级是其他 FreeRTOS 任务中最高的- 30/32。
计时器中断优先级为0、5、15。
在 FreeRTOS Config.h 中 、中断优先级为0xE0 -先原始、后32、后20。
在所有情况下,我都有一个抖动任务工作从3usec 到40usec。
我已经按照 TimerTick ()中断的反汇编进行了操作,它似乎很长-是否有办法缩短它-以更快的中断?
谢谢。
此致、
Eli
尊敬的 Ming:
我将计时器中断优先级设为15、
configMAX_SYSCALL_INTERRUPT_Priority (10)
CONFIGKERNEL_INTERRUPT_PRIORY (0)
CONFIGMAX_API_CALL_INTERRUPT_PRIORY (0)
FreeRTOS 任务是330/32 -最高
从中断到任务唤醒、我得到2-25us。 我的实时限制是~3usec!
请提供建议。
谢谢。
此致、
Eli
尊敬的 Eli:
我认为我们在以下主题中提供的解决方案已回答您的问题:
(+) LP-AM243:[Servotronix\Mideo]-基于 Arm 的微控制器-内部论坛-基于 Arm 的微控制器-内部- TI E2E 支持论坛
即使在最坏的情况下、我的数字也小于2us、除非您有更多中断来处理您的应用。
中断的优先级与任务优先级无关、这是因为中断处理总是高于任务执行。
此致、
明
尊敬的 Eli:
下面是我从 TCP 服务器示例中得到的信息:
最大延迟为1.8us、超过187次。 它仍然不到2us、但我也可以看到问题可能在哪里。 在本例中、TCP 服务器正在等待网络正常运行。 (连续打印"Waiting for network up..")。 我想、一旦网络建立、就会有更多的中断提供服务、并且运行更多的优先级任务。 所有这些都会以两种不同的方式影响延迟(最大延迟和平均延迟):
1.为与互联网相关的中断执行 ISR
2.优先级较高的任务(具有比运行"xSemaphoreTake (gSem、portMAX_DELAY)"的任务更高的优先级。
总之、延迟实际上取决于应用程序环境。 网络流量越高、延迟越高;运行"xSemaphoreTake (gSem、portMAX_DELAY)"的任务优先级越低、延迟越高。
实际上、您不能太多地减少项目1引入的延迟。 但是、您可以提高运行"xSemaphoreTake (gSem、portMAX_DELAY)"的任务的优先级以减少延迟。
还有一点、如果您尚未完成此操作、请使用 Release 配置文件构建您的 CCS 项目。
此致、
明