STM32F103ZET6_移植uC/OS_HAL

1下载源码

网址

GitHub - weston-embedded/uC-OS2: µC/OS-II is a preemptive, highly portable, and scalable real-time kernels. Designed for ease of use on a huge number of CPU architectures.

需要下载三个文件

1看你使用是ucos2还是3(第一个文件)

2第二个文件

3第三个文件

文件意思

|   |-- 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配置时钟和调试接口

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文件,创建任务的过程有点不严谨

任务的创建后续会讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中常用的压缩与解压文件

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

力扣第206题“反转链表”

在本篇文章中&#xff0c;我们将详细解读力扣第206题“反转链表”。通过学习本篇文章&#xff0c;读者将掌握如何使用迭代和递归的方法来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述 力扣第…

【Python】类和对象高级特性

目录 前言 类变量与实例变量 类方法 静态方法 私有属性和方法 多重继承 元类 描述符 总结 前言 在前一篇文章中&#xff0c;我们讨论了 Python 类和对象的基本概念。本文将深入探讨一些高级特性&#xff0c;这些特性可以帮助你更有效地使用 Python 进行面向对象编程。…

Next.js开发中使用useRouter实现点击返回到上一页

在使用Next.js框架做前端页面开发时&#xff0c;如果想返回到上一页&#xff0c;可以利用useRouter钩子提供的back()方法&#xff0c;可以这样做: import {useRouter} from "next/navigation"; import {Space} from "antd"; import {ArrowLeftOutlined} f…

Mendix 创客访谈录|医疗设备领域的数字化转型利器

本期创客 尚衍亮 爱德亚&#xff08;北京&#xff09;医疗科技有限公司 应用开发和数字化事业部开发经理 大家好&#xff0c;我叫尚衍亮。毕业于软件工程专业&#xff0c;有6年的软件开发经验。从2021年开始&#xff0c;我在爱德亚&#xff08;北京&#xff09;医疗科技有限公司…

智能合约开发的过程

智能合约是一种运行在区块链上的程序&#xff0c;可以自动执行预先设定的条款和条件。智能合约具有去中心化、透明、不可篡改等特点&#xff0c;因此被广泛应用于金融、供应链、物联网等领域。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流…

Spring Boot集成Minio插件快速入门

1 Minio介绍 MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;而一个对象文件可以是任意大小&…

LSM-Tree数据结构原理

LSM-Tree树原理 什么是LSM-Tree LSM-Tree 即 Log Structrued Merge Tree&#xff0c;这是一种分层有序&#xff0c;硬盘友好的数据结构。核心思想是利用磁盘顺序写性能远高于随机写。 LSM-Tree 并不是一种严格的树结构&#xff0c;而是一种内存磁盘的多层存储结构。HBase、L…

TDengine 签约上海晶澳太阳能,助力储能业务平台搭建

在全球能源结构转型和碳中和目标的大背景下&#xff0c;太阳能作为清洁能源的重要组成部分&#xff0c;正逐渐成为新能源发展的关键。作为一个领先的数据处理平台&#xff0c;TDengine 最近与太阳能行业的领头羊晶澳太阳能科技股份有限公司开展了深度合作。这项合作旨在利用 TD…

基于Baichuan2的新冠流感中医自我诊断治疗(大模型微调+Gradio)

一、项目说明 项目使用paddleNLP提供的大模型套件对Baichuan2-7b/13b进行微调&#xff0c;使用《中医治疗新冠流感支原体感染等有效病历集》进行Lora训练&#xff0c;使大模型具备使用中医方案诊断和治疗新冠、流感等上呼吸道感染的能力。 二、PaddleNLP PaddleNLP提供的飞桨…

css 文字两端对齐

<body><div class"box"><p>姓名</p><p>性与别</p><p>家庭住址</p><p>how are you</p><p>hello</p><p>1234</p><p>1 2 3 4</p></div> </body> text-a…

SysInitQuery 类是NC 参数的前后台公共服务类, 前后台使用参数的必须通过该接口调用

SysInitQuery 类是NC 参数的前后台公共服务类, 前后台使用参数的必须通过该接口调用 package nc.pubitf.para;import java.util.Map;import nc.bs.framework.common.NCLocator; import nc.itf.uap.busibean.ISysInitGetValue; import nc.itf.uap.busibean.ISysInitQry; import…

使用Java实现的深度优先搜索(DFS)

package test3;import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set;//实现的深度优先搜索&#xff08;DFS&#xff09;和广度优先搜索&#xff08;BFS&#xff09;算法的示例代码 public class Node {int id; //节点的唯一标…

锻炼筋骨之力

中国武术注重通过多种训练方法来锻炼筋骨之力&#xff0c;以提升身体的力量、柔韧性和协调性。这些训练方法包括但不限于以下几种&#xff1a; 1. 基本功训练 基本功是所有武术的基础&#xff0c;包括站桩、马步、弓步等&#xff0c;这些训练有助于增强腿部和腰部的力量和稳定性…

Ubuntu-24.04-live-server-amd64启用ssh

系列文章目录 Ubuntu-24.04-live-server-amd64安装界面中文版 Ubuntu安装qemu-guest-agent Ubuntu乌班图安装VIM文本编辑器工具 文章目录 系列文章目录前言一、输入安装命令二、使用私钥登录&#xff08;可选&#xff09;1.创建私钥2.生成三个文件说明3.将公钥复制到服务器 三…

面向对象进阶--继承(Java继承(超详解))

目录 1. 继承 1.1 继承概述 1.2 继承特点 1.3练习 1.4继承父类的内容 构造方法是否被子类继承 成员变量是否被子类继承 成员方法是否被子类继承 1.5总结 继承中&#xff1a;成员变量的访问特点 继承中&#xff1a;成员方法的访问特点 方法重写概述 方法重写的本质 …

飞睿智能LR-WIFI无线数据采集模块,6公里视频图传,安防监控、工业传输数据更高效

在数字化浪潮席卷全球的今天&#xff0c;无线数据采集技术已经成为推动社会进步的重要力量。特别是在安防监控和工业领域&#xff0c;高效、稳定的数据传输成为了实现智能化、自动化的关键。飞睿智能LR-WiFi无线数据采集模块不仅具备可靠的传输性能&#xff0c;还能在复杂环境下…

尚硅谷爬虫学习第一天(3) 请求对象定制

#url的组成 #协议 http&#xff0c;https&#xff0c;一个安全&#xff0c;一个不安全。 #主机&#xff0c; 端口号 学过java 的肯定知道 沃日&#xff0c;以前面试运维的时候&#xff0c;问到主机地址&#xff0c;我懵逼了下&#xff0c;回了个8080 # 主机地址 80 # …

GEE(六边形制作)——实现研究去边界蜂窝状(六边形)矢量的转换

简介 在GEE中实现研究区边界蜂窝状矢量的转换,这里我们首先获取研究区边界,然后进行边界坐标点进行获取,然后根据六边形坐标点计算公式,然后遍历研究区即可。 在Google Earth Engine(GEE)中,可以使用以下步骤来制作去边界的六边形矢量: 1. 首先,选择一个区域或图像…

python pandas 读取excel表格

情况说明 py文件和数据已经在同一文件路径中&#xff0c;excel表名为“BloombergESG_ClosePrice.xlsx”&#xff0c;内含两张工作表。第一张工作表名为“ESG_score”&#xff0c;数据较少&#xff1b;第二张工作表名为“all_stock_close&#xff08;1209&#xff09;”&#x…