工具/软件:
平台:J784S4XEVM
SDK: ti-processor-sdk-rtos-j784s4-evm-11_00_00_06
内核:R5F (MCU2_0)
操作系统:FreeRTOS
使用 Linux 运行:是
您好、
我正在尝试使用以下测试代码创建一个计时器中断。
我总是获得计时器中断回调、但具有不同的中断周期时间。
我使用相同的应用二进制文件进行测试。
在断电/上电周期后、我通常得到的中断周期时间为 1000usec(失败)。 在一些断电/接通周期中、我得到的中断周期时间为 5000 个用例(成功)
如果更改周期值、会出现类似的行为。 大多数情况下、我得到的值为 1000usec、至少是我得到正确值的时间。
原因可能是什么?
此致
#include <utils/timer/include/app_timer.h>
#include <utils/rtos/include/app_rtos.h>
#include <ti/osal/osal.h>
#include <ti/osal/TimerP.h>
#include <ti/drv/ipc/ipc.h>
#include <app_ipc_rsctable.h>
static uint8_t gTskStackMain[64*1024]
__attribute__ ((aligned(8192)));
static void timer_callback(void *arg) {
Ipc_Trace_printf("Time: %llu\n", TimerP_getTimeInUsecs());
}
static void initTask(void* arg0, void* arg1)
{
TimerP_Params params;
TimerP_Params_init(¶ms);
params.startMode = TimerP_StartMode_USER;
params.runMode = TimerP_RunMode_CONTINUOUS;
params.periodType = TimerP_PeriodType_MICROSECS;
params.startMode = TimerP_StartMode_USER;
params.period = 5000;
TimerP_Handle tmhandle = TimerP_create(TimerP_ANY, (TimerP_Fxn)timer_callback, ¶ms);
if(NULL_PTR != tmhandle) {
if(TimerP_OK != TimerP_start(tmhandle)) {
Ipc_Trace_printf("TimerP_start failed!\n");
return;
}
} else {
Ipc_Trace_printf("TimerP_create failed!\n");
return;
}
}
int main(void)
{
OS_init();
Ipc_loadResourceTable((void*)&ti_ipc_remoteproc_ResourceTable);
app_rtos_task_params_t tskParams;
appRtosTaskParamsInit(&tskParams);
tskParams.priority = 10u;
tskParams.stack = gTskStackMain;
tskParams.stacksize = sizeof (gTskStackMain);
tskParams.taskfxn = &initTask;
tskParams.name = "initTask";
app_rtos_task_handle_t task = (void*)appRtosTaskCreate(&tskParams);
if(NULL == task) {
Ipc_Trace_printf("Task create failed!\n");
OS_stop();
return -1;
}
OS_start();
return 0;
}成功日志:
时间:2665001
时间:2670001
时间:2675001
时间:2680001
失败日志:
时间:1282001 年
时间:1283001
时间:1284001
时间:1285001.
