1下载源码
网址
需要下载三个文件
1看你使用是ucos2还是3(第一个文件)![](https://img-blog.csdnimg.cn/direct/c11d866921be45708db93fb463d7fddb.png)
2第二个文件![](https://img-blog.csdnimg.cn/direct/32980fbc7b6b495486cdf6973dfd413a.png)
3第三个文件![](https://img-blog.csdnimg.cn/direct/1ac9c81bd6c84aa5b77e665a1bbd30eb.png)
文件意思
| |-- cpu/ # CPU相关代码,通常包含特定架构的移植文件
| |-- os/ # μC/OS-II的核心源代码
Cfg配置文件
Ports接口连接文件
Source核心文件
| |-- lib/ # 库文件,可能包含第三方库或通用功能实现
官网也可以下载官网下载的慢
但比较集中下载方便(好找)(内部参数官方会改好)
我的主页有官方的资源,要一积分才能下载
以积分没有的化可以在评论区把邮箱写如并说要什么资源,我免费发给你们
μC/OS-II/
|
|-- Documentation/ # 文档目录,包含μC/OS-II的手册和参考资料
|
|-- Source/ # 源代码目录
| |-- cpu/ # CPU相关代码,通常包含特定架构的移植文件
| | |-- arm-cortex-m/ # Cortex-M系列处理器的特定代码
| | | |-- common/ # 通用代码,如中断和上下文切换
| | | |-- gcc/ # GNU编译器集合(GCC)相关的编译文件
| | | |-- iar/ # IAR编译器相关的编译文件
| | | |-- keil/ # Keil编译器相关的编译文件
| | | |-- ucosii.c # Cortex-M架构的主要移植文件
| | | |-- ucosii.h # Cortex-M架构的主要头文件
| |
| |-- os/ # μC/OS-II的核心源代码
| | |-- core/ # 核心功能,如任务管理、时间管理等
| | |-- portable/ # 可移植层,包含与硬件无关的代码
| | |-- shell/ # 命令行外壳(如果支持)
| | |-- source/ # 核心源文件
| | |-- ucos_ii.c # μC/OS-II的主要实现文件
| | |-- ucos_ii.h # μC/OS-II的主要头文件
| |
| |-- board/ # 板级支持包(BSP),包含特定硬件平台的初始化代码
| | |-- stm32f1xx/ # STM32F1系列微控制器的BSP
| | |-- stm32f4xx/ # STM32F4系列微控制器的BSP
| | |-- ... # 其他可能的BSP
| |
| |-- lib/ # 库文件,可能包含第三方库或通用功能实现
| |
| |-- test/ # 测试代码和应用程序示例
| |
| |-- Makefile # 用于编译工程的Makefile文件
|
|-- Examples/ # 示例工程目录,包含针对不同硬件平台的示例项目
| |-- stm32f103/ # 针对STM32F103系列微控制器的示例项目
| |-- stm32f429/ # 针对STM32F429系列微控制器的示例项目
| |-- ... # 其他可能的示例项目
|
|-- Include/ # 头文件目录,包含所有公共的头文件
| |-- cpu/ # CPU相关的头文件
| |-- os/ # μC/OS-II核心的头文件
| |-- board/ # BSP相关的头文件
| |-- lib/ # 库相关的头文件
|
|-- Tools/ # 工具和脚本目录,可能包含用于配置或生成代码的工具
|
|-- License.txt # μC/OS-II的许可证文件
|
|-- Readme.txt # 有关μC/OS-II的简要信息和安装指南
2实现移植(以官网下载的为例)
1建立基本项目(实现LED的点亮uCOS实现)
1配置时钟和调试接口![](https://img-blog.csdnimg.cn/direct/d0c71a6ae1f841b9b82a3a927158d383.png)
2配置gpio(以实现创建任务实现LED)
3创建项目
2移植ucos代码
1在klie5的项目中创建6个分组
对应的下五个文件(ucosiii才分了两个)
注意
cpu的文件中app.和app.h文件可以不用导入进去它们可以用main.h文件代替
main.h文件格局项目例程的app.c更改
2开始为五个分组导入文件
2.1
将ucos文件放入项目文件中
(app.c app.h可以不添加)(我添加了但没写只添加了头文件如图)
2.2导入bsp文件在导入路径后面我就不把路径的截图放进去了请自己添加
2.3导入cpu 文件
2.4导入第三方库LIB
2.5导入ucos的文件
2.6导入配置文件
注意
文件在下图的选中的文件内下图上面两个不是
修改文件
1找到图中的文件双击
2再到下列代码
代码前
代码后
代码前
代码后
3在main.c中添加头文件并创建任务运行即可
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <includes.h>
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
//任务控制块
static OS_TCB AppTaskStartTCB;
//任务堆栈
static CPU_STK AppTaskStartStk[APP_TASK_START_STK_SIZE];
/* 私有函数原形 --------------------------------------------------------------*/
static void AppTaskStart(void *p_arg);
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
OS_ERR err;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
OSInit(&err);
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
// MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
/* 创建任务 */
OSTaskCreate((OS_TCB *)&AppTaskStartTCB, /* Create the start task */
(CPU_CHAR *)"App Task Start",
(OS_TASK_PTR ) AppTaskStart,
(void *) 0,
(OS_PRIO ) APP_TASK_START_PRIO,
(CPU_STK *)&AppTaskStartStk[0],
(CPU_STK_SIZE) APP_TASK_START_STK_SIZE / 10,
(CPU_STK_SIZE) APP_TASK_START_STK_SIZE,
(OS_MSG_QTY ) 0,
(OS_TICK ) 0,
(void *) 0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *)&err);
/* 启动多任务系统,控制权交给uC/OS-III */
OSStart(&err); /* Start multitasking (i.e. give control to uC/OS-III). */
}
/**
* 函数功能: 启动任务函数体。
* 输入参数: p_arg 是在创建该任务时传递的形参
* 返 回 值: 无
* 说 明:无
*/
static void AppTaskStart (void *p_arg)
{
OS_ERR err;
BSP_Init(); /* Initialize BSP functions */
CPU_Init();//必须添加也可以写在创建任务之前
while (1)
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);
OSTimeDlyHMSM(0, 0, 3, 0,
OS_OPT_TIME_HMSM_STRICT,
&err);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
}
/* USER CODE END 4 */
/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
__disable_irq();
while (1)
{
}
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
总结
如果使用GitHub要修改配置文件
使用官网的官方已经修改好了
导入时要注意路径是否正确
有问题评论区见
最终的项目可在资源中找到
本项目重点讲解如何配置和导入ucos文件,创建任务的过程有点不严谨
任务的创建后续会讲解