一:RTOS的知识分享:
RTOS 全称是 RealTime OperatingSystem,中文名就是实时操作系统。可以看出 FreeROTS 就是一个免费的 RTOS 类系统。这里要注意,RTOS 不是指某一个确定的系统,而是指一类系统。、操作系统允许多个任务同时运行,这个叫做多任务,实际上,一个处理器核心在某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务,任务调度在各个任务之间的切换非常快!这就给人们造成了同一时刻有多个任务同时运行的错觉。、
RTOS 的任务调度器被设计为可预测的,而这正是嵌入式实时操作系统所需要的,实时环境中要求操作系统必须对某一个事件做出实时的响应,因此系统任务调度器的行为必须是可预测的。像 FreeRTOS 这种传统的 RTOS 类操作系统是由用户给每个任务分配一个任务优先级,任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。
二:cube 工程的创建过程:
2.1 使能项目的RTOS功能:
在softpack中使能freertos设置,并且选择cmsis_v1版本

这里的还有V版本,CMSIS是一种接口标准,目的是屏蔽软硬件差异以提高软件的兼容性。RTOS v1使得软件能够在不同的实时操作系统下运行(屏蔽不同RTOS提供的API的差别),而RTOS v2则是拓展了RTOS v1,兼容更多的CPU架构和实时操作系统。这里为了简单的理解,我们仅仅使用cmsis_v1版本就好了。
2.2 时基的选择:这里sysstick作为系统的时间,为了不占用定时器的资源,这里我们使用基本的定时器6,或者基本定时器7作为系统的时间基础:

这里因为定时器6在之前的项目中做了其他用途,这里就是用的定时器7。
2.3 添加任务:

这里我们简单的添加两个任务,为了方便看到效果,添加板载的LED灯闪烁和串口1的输出功能。
这里值得注意的是,任务的优先级在添加任务时候,就配置好了,在中断向量分组中无需配置。

三:代码编写:
3.1 在生成的代码中添加 输出的字符串如下所示:

/* USER CODE BEGIN Includes */
extern UART_HandleTypeDef huart1;
static unsigned char outputchar[] ={ "nebula pi STM32F103VE RTOS test by:cong cong ge ge\r\n" } ;
/* USER CODE END Includes */
3.2 两个任务的代码如下所示:
/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the myTask02 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void const * argument)
{
/* USER CODE BEGIN StartTask02 */
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(GPIOB ,GPIO_PIN_4);
osDelay(1000);
}
/* USER CODE END StartTask02 */
}
/* USER CODE BEGIN Header_StartTask03 */
/**
* @brief Function implementing the myTask03 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask03 */
void StartTask03(void const * argument)
{
/* USER CODE BEGIN StartTask03 */
/* Infinite loop */
for(;;)
{
HAL_UART_Transmit(&huart1, outputchar, sizeof(outputchar), 0xffff);
osDelay(500);
}
/* USER CODE END StartTask03 */
}
四:实物测试图片如下所示:

源码地址如下所示:
https://gitee.com/congcong-brother/rymcus-evaluation-code-series.git

全部评论