东莞沙田门户网站建设,免费字体网站,深圳网站定制价格表,wordpress橱窗插件目录
中断定义
中断优先级
相关注意
中断相关函数
1.队列
2.信号量
3.事件标志组
4.任务通知
5.软件定时器
中断管理实操 中断定义
中断是指在程序执行的过程中#xff0c;突然发生了某种事件#xff0c;需要立即停止当前正在执行的程序#xff0c;并转而处理这个…目录
中断定义
中断优先级
相关注意
中断相关函数
1.队列
2.信号量
3.事件标志组
4.任务通知
5.软件定时器
中断管理实操 中断定义
中断是指在程序执行的过程中突然发生了某种事件需要立即停止当前正在执行的程序并转而处理这个事件处理完后再回到原来的程序执行点继续执行的过程。
中断可以是硬件中断由硬件设备触发或软件中断由程序执行中断指令触发。
中断可以提高计算机的响应速度和效率使得计算机可以同时处理多个任务。
中断优先级
任何中断的优先级都大于任务
在我们的操作系统中断同样是具有优先级的并且我们也可以设置它的优先级但是他的优先 级并不是从 0~15 默认情况下它是从 5~15 0~4 这 5 个中断优先级不是 FreeRTOS 控制的5是 取决于 configMAX_SYSCALL_INTERRUPT_PRIORITY。
相关注意
1. 在中断中必需使用中断相关的函数
2. 中断服务函数运行时间越短越好。
中断相关函数
1.队列
xQueueReceiveFromISR()
在中断中从队列头部读取消息并删除消息
xQueuePeekFromISR()
在中断中从队列头部读取消息
2.信号量
xSemaphoreGiveFromISR()
在中断中释放信号量
xSemaphoreTakeFromISR()
在中断中获取信号量
3.事件标志组
xEventGroupClearBitsFromISR()
在中断中清零事件标志位
xEventGroupSetBitsFromISR()
在中断中设置事件标志位
4.任务通知
xTaskNotifyFromISR()
在中断中发送任务通知
xTaskNotifyAndQueryFromISR()
在中断中发送任务通知
vTaskNotifyGiveFromISR()
在中断中发送任务通知
5.软件定时器
xTimerStartFromISR()
在中断中开启软件定时器定时
xTimerStopFromISR()
在中断中停止软件定时器定时
xTimerResetFromISR()
在中断中复位软件定时器定时
xTimerChangePeriodFromISR()
在中断中更改定时超时时间
中断管理实操
创建一个队列及一个任务按下按键 KEY1 触发中断在中断服务函数里向队列里发送数据任 务则阻塞接收队列数据。
打开CubeMX
1.将FreeRTOS移植到STM32F103C8T6具体看我之前写过的文章
将FreeRTOS移植到STM32F103C8T6
2.在NVIC中使能中断 3.中断代码示例
用到的中断函数
xQueueSendFromISR
stm32f1xx_it.c
#include cmsis_os.h // 增加CubeMX封装好的头文件extern osMessageQId myQueue01Handle;void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{uint32_t snd 1;xQueueSendFromISR(myQueue01Handle, snd, NULL);
}4.主程序代码示例
freertos.c
void StartDefaultTask(void const * argument)
{uint32_t rev 0;for(;;){if (xQueueReceive(myQueue01Handle, rev, portMAX_DELAY) pdTRUE)printf(rev %d\r\n, rev);osDelay(1);}
}
5.打开串口助手查看结果