自制电子相机(4)-FreeRTOS的使用

如何在这个项目中使用 FreeRTOS?

逻辑图

我们知道,如果要使用 FreeRTOS,我们需要先创建一个任务,然后在任务中创建其他任务,这些任务之间通过消息传递进行通信。

所以,我们首先需要知道我们需要创建哪些任务,以及它们之间的关系。

首先,我们在从 boot 进入系统之后应该直接进入了 实时查看模式 了。其实也就是照片拍摄模式,在这个模式下,我们可以进行拍摄照片。

同时我们需要一个按键作为一个模式的选择按键,虽然初始的模式就是照片拍摄模式,但是我们还有一个查看模式,这个模式可以用来查看之前拍摄的照片和视频。

所以,在 拍摄模式 的时候我们应该有一个按键是用来 拍摄 的,有一个按键是用来 切换模式 的。还有一个 旋钮 是用来对于拍摄模式中的子模式的选择。

总的来说可以看作如下图所示:

任务创建

初步确定了上面的这些模式,我们就可以开始创建任务了。

首先,我们需要创建一个任务用来处理按键的输入,这个任务的作用就是监听按键的输入,并且根据所处的模式的不同,对于不同的按键进行监听。

然后,我们应该需要一个模式管理任务,这个任务的作用就是根据按键的输入切换不同的模式。

根据不同的模式,我们还需要创建两个任务:

第一个任务是用来处理拍摄模式下的拍摄功能,这个任务应该在拍摄模式下运行,并且应该在按下拍摄按键的时候进行拍摄。

第二个任务是用来处理查看模式下的查看功能,这个任务应该在查看模式下运行,并且应该在按下查看按键的时候进行查看。

所以,总结如下:

所以,我们一共需要创建四个任务。

各个任务流程分析

由于不同的任务的功能不一,流程也应该是不同的。下面我们需要对于这四个任务进行分析。

输入处理任务

模式管理任务

拍摄任务

查看任务

FreeRTOS 的使用

通过上面对于任务的分析之后,我们可以来确定 FreeRTOS 的使用了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
osThreadDef(ModeMgr, modeMgr_task, osPriorityBelowNormal, 0, 128);
ModeMgrHandle = osThreadCreate(osThread(ModeMgr), NULL);

/* definition and creation of LiveviewCtrl */
osThreadDef(LiveviewCtrl, liveviewCtrl_task, osPriorityNormal, 0, 512);
LiveviewCtrlHandle = osThreadCreate(osThread(LiveviewCtrl), NULL);

/* definition and creation of PlaybackCtrl */
osThreadDef(PlaybackCtrl, playbackCtrl_task, osPriorityNormal, 0, 512);
PlaybackCtrlHandle = osThreadCreate(osThread(PlaybackCtrl), NULL);

/* definition and creation of Input */
osThreadDef(Input, input_task, osPriorityAboveNormal, 0, 128);
InputHandle = osThreadCreate(osThread(Input), NULL);


自制电子相机(4)-FreeRTOS的使用
https://ysc2.github.io/ysc2.github.io/2024/09/01/自制电子相机(4)-FreeRTOS的使用/
作者
Ysc
发布于
2024年9月1日
许可协议