FreeRTOS应用总结

在使用FreeRTOS做项目时,虽然前期也看了一些FreeRTOS讲解的书籍和文章,主要是参考的正点原子和野火的FreeRTOS应用开发指南,这两本书讲解了FreeRTOS基本的原理和相关API函数的使用,也给出了相应的demo。但是在具体的项目过程中,还是发生了很多问题,走了不少弯路,这里把遇到的一些典型问题做一个简单的总结:

1、对于硬件外设的访问,全局变量的操作,硬件寄存器的操作,不可重入函数的调用等,凡是会涉及到多个任务都要调用的资源,一定要严格做互斥。

2、要考虑到低优先级任务在使用某些功能过程中会被高优先级任务打断;比如一个低优先级任务在调用串口发送函数USART1Send时,刚好被一个较高优先级任务打断,那么所发送的数据就不再连续。这种情况要么使用DMA发送数据,最好还是使用守护任务来实现。

3、任务划分时一个比较重要的因素就是考虑公共资源的使用,如串口发送,数据存储,LCD显示等等;这些基本的硬件驱动可能多个任务中都会使用到,每个任务在使用这些资源的时候都要做互斥信号量,保证资源独占性,但是当任务功能复杂的时候,一个任务调用多个互斥信号量来独占公共资源时,又可能会出现优先级反转和死锁的问题!所以这种情况最好的处理方式就是将这些公共资源的硬件驱动做成守护任务。守护任务就是单独建立一个任务,该任务对某一个资源具有唯一使用权。比如串口1发送,单独建立一个任务调用串口1发送函数,其他任务需要使用串口1发送数据时,只能通过队列将要发送的数据传递给串口1发送任务;再比如SPI_FLASH存储数据,也可以做成守护任务,其他任务要存储数据都通过队列的方式将要存储的数据传递给该守护任务,实现数据存储。这样是最佳的资源独占方式。为了提高响应速度,应当给守护任务分配较高的优先级。

你可能感兴趣的:(FreeRTOS应用总结)