主题中讨论的其他器件:HALCOGEN
您好!
我目前 正在通过 FreeRTOS 系统使用看门狗模块。 在 main 中、我使用 dwInit()和 dwdCounterEnable 来初始化和启用看门狗。 然后、在任务中、我重置看门狗、但当我在另一个任务中使用无穷大环路对此进行测试时 、看门狗不起作用。 是否有任何将看门狗与 FreeRTOS 配合使用的示例?
提前感谢。
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.
您好!
我目前 正在通过 FreeRTOS 系统使用看门狗模块。 在 main 中、我使用 dwInit()和 dwdCounterEnable 来初始化和启用看门狗。 然后、在任务中、我重置看门狗、但当我在另一个任务中使用无穷大环路对此进行测试时 、看门狗不起作用。 是否有任何将看门狗与 FreeRTOS 配合使用的示例?
提前感谢。
您好、Pablo、
当选择 FreeRTOS 时、HALCoGen 不会生成 RTI 驱动程序和 DWD AP。
RTI 看门狗密钥寄存器应在特权模式下编程。 MCU 可以在特权模式或用户(非特权)模式下执行代码。 在用户模式下执行的代码不能写入受保护的寄存器、也不能访问其自身堆栈和为其配置的 MPU 区域之外的 RAM。
在 xTaskCreate()中,uxPriority 用于设置初始创建任务的优先级。 在 xTaskCreateRestricted()中,它还用于将任务设置为特权模式或用户模式。 要使用 portPRIVILEGE_BIT 创建特权模式任务、按位或所需的任务优先级。
尊敬的 QJ Wan:
// Create FreeRTOS watchdogTask
watchdogTaskHandle = xTaskCreateStatic(watchdogTask, "watchdogTask", EC_WATCHDOG_TASK_STACK_SIZE, NULL, (3 | portPRIVILEGE_BIT), watchdogStackBuffer, &watchdogTCB);
appAssert(watchdogTaskHandle != NULL, "### ERROR ### when trying to create watchdog task");
int main(void)
{
dwdInit(rtiREG1,4095);
epic_common_Init();
epic_protocol_Init();
PCU_init();
vTaskStartScheduler();
return 0;
}static void watchdogTask(void *arg)
{
dwdCounterEnable(rtiREG1);
for(;;)
{
vTaskDelay( (TickType_t) (10/portTICK_RATE_MS));
if(wtd == 0)
dwdReset(rtiREG1);
// if( !(EC_WATCHDOG_CHECK_PATTERN ^ watchdogFlags) ) dwdReset(rtiREG1);
// watchdogFlags = 0;
}
}谢谢
什么类型的中止? 中止有多种类型:数据中止、预取中止和未定义中止。
请参阅此常见问题解答:
从 DFSR=0x1008可以看出、数据中止是由存储器接口或高速缓存中的 ECC 错误引起的、这是异步中止、这意味着很难使用 DFAR 寄存器中的地址跟踪中止位置。 根据 ADFSR (0x0050000)的值、我们可以确认访问是通过 AXI 外设端口进行的、
R14_abt = 0xD0CC-0x8、 r14_abt - 0x8 = 0xD0C4、这是导致数据中止的指令附近的地址。 请检查0xD0C4周围是否有 str 说明。