【S32K3 MCAL配置】-3.1-CANFD配置-经典CAN切换CANFD(基于MCAL+FreeRTOS)

本文介绍了基于MCAL层在NXP S32K312EVB-Q172开发板上配置CANFD的过程,包括启用CANFD、配置CANFD波特率的步骤,详细解析了CAN_CLK、Tq和Prescaller之间的关系,以及如何生成配置后的驱动代码。
S32K3中,裸机环境下MCAL配置CAN与RTOS环境配置CAN存在多方面区别。 #### 任务调度 裸机环境下,程序执行是顺序的,CAN相关任务需要在主循环中轮询处理。例如: ```c while(1) { Can_Process(); // 其他任务 } ``` RTOS环境中,CAN任务可以作为独立线程运行,由操作系统进行调度。比如使用FreeRTOS创建一个CAN接收任务: ```c void CanReceiveTask(void *pvParameters) { while(1) { Can_Receive(); vTaskDelay(pdMS_TO_TICKS(10)); } } ``` 然后通过`xTaskCreate`函数创建该任务。 #### 资源管理 裸机环境下,资源管理需要手动进行,例如对CAN硬件资源的访问需要开发者自己保证互斥。 RTOS环境中,操作系统提供了信号量、互斥锁等机制来管理资源。例如使用信号量保护CAN发送函数: ```c SemaphoreHandle_t canSendSemaphore; void CanSendTask(void *pvParameters) { while(1) { if(xSemaphoreTake(canSendSemaphore, portMAX_DELAY) == pdTRUE) { Can_Send(); xSemaphoreGive(canSendSemaphore); } } } ``` #### 错误处理 裸机环境下,错误处理通常是简单的跳转或者重试逻辑。例如在CAN发送失败时进行重试: ```c if(Can_Send() != E_OK) { // 重试 Can_Send(); } ``` RTOS环境中,可以利用任务的挂起、恢复等机制进行更复杂的错误处理。例如在CAN接收错误时挂起接收任务,等待一段时间后再恢复: ```c void CanReceiveTask(void *pvParameters) { while(1) { if(Can_Receive() != E_OK) { vTaskSuspend(NULL); vTaskDelay(pdMS_TO_TICKS(1000)); vTaskResume(NULL); } } } ``` #### 实时性 裸机环境下,实时性依赖于代码的执行效率,对于复杂任务可能无法保证实时响应。 RTOS环境中,通过合理配置任务优先级,可以保证CAN任务在规定时间内得到执行,满足实时性要求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车电子助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值