FreeRTOS定时器中断

中断函数

1.开中断函数   portENABLE_INTRRUPOTS()

2.关中断服务函数    portDISABLE_INTRRUPOTS()

这两个函数在list.c的portmacro.h中

中断配置宏,在FreeRTOSconfig.h里有中断相关的配置

中断优先级数字越大,优先级等级越低,有0~15个优先级。但是0~4不可用。因为不能调用RTOS中的API

配置中断

在RTOS中要使用中断也是要去配置中断函数的,先建立tim文件夹,添加tim.cyu.h。记得添加路径,main中也要添加头文件

定时器的配置请看文章32定时器CSDN

要初始化,外设文件中也要添加stm32f10x_tim.c文件,调用定时器函数,先测定时器是否好用

FreeRTOS定时器中断_第1张图片

没有问题之后再建立的动态任务中建立定时器任务,动态任务创建请查看CSDN

FreeRTOS定时器中断_第2张图片

外加知识,临界区

taskEXIT_CRITICAL是一个在实时操作系统(RTOS)中使用的宏或函数,特别是在使用FreeRTOS这样的RTOS时。它用于在多任务环境中管理临界区(critical section)的退出。临界区是指一段代码,当某个任务(task)在执行这段代码时,不希望被其他任务中断或访问共享资源,以确保数据的一致性和避免竞争条件(race conditions)。
在使用taskENTER_CRITICAL宏进入临界区后,通常会执行一些需要保护的代码,比如对共享变量的访问或修改。一旦这些关键操作完成,就需要使用taskEXIT_CRITICAL宏来退出临界区。这样做可以释放之前由taskENTER_CRITICAL获取的资源(如调度器的锁定),允许其他任务继续执行。
下面是一个简单的使用示例,假设我们在FreeRTOS环境中:
 
// 进入临界区
taskENTER_CRITICAL();

// 执行需要保护的代码
// 例如,对共享变量的访问或修改
sharedVariable++;

// 退出临界区
taskEXIT_CRITICAL();


在调用taskENTER_CRITICAL之后,直到调用taskEXIT_CRITICAL之前,当前任务持有对调度器的控制权(或者说,调度器被锁定),这意味着其他任务不能抢占CPU执行。这可以确保共享资源的安全访问,但长时间持有临界区会导致系统响应变慢,因为其他任务被阻塞等待。
因此,使用taskENTER_CRITICAL和taskEXIT_CRITICAL时,应该尽量保持临界区内的代码简短高效,以减少对系统性能的影响。
 

你可能感兴趣的:(FreeRTOS,单片机,嵌入式硬件)