单片机第四季-第二课:uCos2源码-BSP

1,初始uCos2

文件中uC开头的为uCos相关的。

2,uCos2源码工程建立

建立Source Insight工程

寻找main函数

(1)RTOS其实就是一个大的裸机程序,也是从main开始运行的
(2)main之前也是有一个汇编的启动文件的
(3)main中调用了很多初始化函数

 bsp部分介绍:
(1)bsp是board support packet 板级支持包
(2)bsp其实就是对硬件操作的封装(底层驱动或中间驱动层封装)
(3)完全移植的工作量主要就在bsp这一块

3,BSP部分源码解析

BSP文件夹中主要有图中所示四个文件。

BSP_Init(void) 在bsp.c中定义,在app.c中被main函数调用。

BSP_Init(void)作用就是板载所有外设设备的初始化。

4,BSP源码测试

详细工程见:

包含BSP的工程

注意1:串口代码中有以下内容。

#ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) 
#else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) 
#endif /* __GNUC__ */ /*******************************************************************************
* Function Name  : PUTCHAR_PROTOTYPE
* Description    : Retargets the C library printf function to the USART.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
PUTCHAR_PROTOTYPE
//{
//  /* Write a character to the USART */
//  USART_SendData(USART1, (u8) ch);
//
//  /* Loop until the end of transmission */
//  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
//  {
//  }
//    return ch;
//}
{while (!(USART1->SR & USART_FLAG_TXE));USART1->DR = (ch & 0x1FF);return ch;
}

printf函数本身内部是调用__io_putchar(GNUC)或者fputc(Windows)来实现的,所以我们在单片机里面要移植printf,就得去实现__io_putchar(GNUC)或者fputc(Windows),这种就叫做重定位。

MDK5是在Windows环境中,所以使用的是fputc(int ch, FILE *f),FILE的定义在stdio.h,所以要#include <stdio.h>。

注意2:使用printf函数时,必须要勾选上Use MicroLIB选项。

强调:在MDK中移植printf后,必须勾选:USE MicroLib后才能成功,否则就什么错都不报就是串口不输出东西。

STM32中实现printf的细节,参考:http://masust.blog.163.com/blog/static/14695408420123308328203/

5,总结

本章节内容BSP是对外设驱动的初始化,与前边通过stm32标注库操作没有本质区别,与uCos有什么关系呢?

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

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

相关文章

html2canvas实现原理

html2canvas 是一个 JavaScript 库&#xff0c;可以将 HTML 元素转换为 Canvas 元素&#xff0c;进而实现对网页内容的截图功能。它的实现原理主要包括以下几个步骤&#xff1a; 1、解析和构建 DOM 树&#xff1a;html2canvas 首先会解析网页上指定的 HTML 元素&#xff0c;包…

开机动画结束正常进入桌面

systemUI 添加壁纸 1128 I am_proc_start: [0,1485,10019,com.android.systemui,service,{com.android.systemui/com.android.systemui.ImageWallpaper}] Line 87550: 03-08 17:29:15.680346 947 1128 I ActivityManager: Start proc 1485:com.android.systemui/u0a19 …

Linux信号补充——信号发送和保存

三、信号的发送与保存 3.1信号的发送 ​ 必须有操作系统来保存信号&#xff0c;因为他是管理者&#xff1b; ​ 信号给进程的task_struct发送信号&#xff0c;在task_struct中维护了一个整数signal有0-31位&#xff0c;共32个bit位&#xff1b;对于信号的管理使用的是位图结…

Java常见的垃圾回收器GC

本节讲解一下常见的垃圾回收器。需要特别注意的是&#xff0c;每一种垃圾回收器都会存在用户线程&#xff08;即用户程序&#xff09;暂停的问题&#xff0c;只不过每种回收器用户线程暂停的时长优化程度不一样。在启动JVM时&#xff0c;可以通过“指定参数-xx:垃圾回收器名称”…

Android静默安装一(Root版)

近期开发上线一个常驻app&#xff0c;项目已上线&#xff0c;今天随笔记录一下静默安装相关内容。我分三篇静默安装&#xff08;root版&#xff09;、静默安装&#xff08;无障碍版&#xff09;、监听系统更新、卸载、安装。先说说我的项目需求&#xff1a;要求app一直运行&…

贵价茶叶产区成谜,竹叶青茶是“行业黑马”还是“韭菜镰刀”?

撰稿|行星 来源|贝多财经 近日&#xff0c;央视“315”晚会曝光了自诩“高端商务白酒”的听花酒。这款白酒号称拥有提升免疫力、改善睡眠、保障男性功能等多种保健功能&#xff0c;标准装售价5860元&#xff0c;精品装售价更是达到5.86万元&#xff0c;昂贵程度令人瞠目结舌。…

为什么c++要在c语言的基础上添加命名空间?命名空间如何定义和使用?

1、为什么c要在c语言上增添命名空间的概念 在c语言中&#xff0c;定义的全局变量与库中相同&#xff0c;或者和别人代码结合的时候可能存在相同的命名&#xff0c;此时就会命名冲突。c语言是没有办法很好的解决这个问题的。 假设这样一种情况&#xff0c;当一个班上有两个名叫…

jmeter的函数助手使用方法

如某个上传文件接口&#xff0c;一个文件只能同时被一个接口调用&#xff0c;如果被并发同时调用就会报错 创建多个测试文件 比如50并发&#xff0c;创建更多的文件防止并发多时随机数生成重复 生成随机数函数 工具–函数助手-选择random-输入范围&#xff08;1-696&#…

网络学习:IPV6基础配置

目录 一、配置接口的全球单播地址 二、配置接口本地链路地址 三、配置接口任播地址 四、配置接口PMTU 配置静态PMTU&#xff1a; 配置动态PMTU&#xff1a; 五、接口配置IPV6地址示例&#xff1a; 一、配置接口的全球单播地址 全球单播地址类似于IPv4公网地址&#xff0…

前端 js 经典:数组常用方法总结

一&#xff1a;不改变原数组的方法 1. join 数组拼接 let arr [1, 2, 3]; // 默认拼接 arr.join(""); // 默认 , 拼接&#xff0c;返回&#xff1a;1,2,3 // 使用 - 拼接 arr.join("-"); // 返回&#xff1a;1-2-3 2. concat 尾部插入 let arr [1, 2…

Redis技术学习|实战项目记录|短信登录(重点:拦截器)+ Redis代替session存储用户登录信息

学习资料声明 黑马程序员的Redis学习视频&#xff1a;黑马程序员Redis入门到实战教程 需要用到的知识&#xff1a;linux&#xff08;推荐韩顺平老师的教程&#xff0c;学到p30&#xff0c;创建好虚拟机和简单的几个命令就好。&#xff09;SSM。SpringBoot。 还用到了MybatisPl…

富格林:合理规避虚假风险安全盈利

富格林悉知&#xff0c;黄金投资不仅具有强大的保值功能&#xff0c;其剧烈的市场变化也隐含着巨大的盈利潜力&#xff0c;吸引着众多投资者入市。但投资都会存在一定的风险&#xff0c;因此大家在投资的过程中要学习总结一些技巧&#xff0c;以便能在必要时帮助投资者规避虚假…

linux系统kubernetes容器检查和恢复机制

容器检查和恢复机制 容器检查和恢复机制命令模式探针http get方式探针POD 的恢复策略 容器检查和恢复机制 在kubernetes中&#xff0c;可以为容器定义一个健康探针&#xff0c;kubelet 就会根据这个 Probe 的返回值决定这个容器的状态&#xff0c;而不是直接以容器是否运行&…

5G里面NR,gNB,en-gNB,ng-eNB是什么意思

不得不提一个国际组织&#xff0c;叫国际电信联盟(ITU, International Telecommunication Union)&#xff0c;简称国际电联。我们先看看国际电联的自我介绍&#xff1a; 国际电信联盟 『国际电联 (国际电信联盟) 是主管信息通信技术事务&#xff08;ICT&#xff09;的联合国机…

微信打卡小程序怎么做_用户的每日习惯培养神器

微信打卡小程序&#xff1a;你的每日习惯培养神器 在这个快节奏的现代社会&#xff0c;我们每天都在忙碌中度过&#xff0c;有时候甚至会忘记自己曾经立下的那些小目标、小习惯。然而&#xff0c;随着科技的不断发展&#xff0c;微信打卡小程序的出现&#xff0c;为我们的生活…

Apollo(阿波罗)配置中心

Apollo&#xff08;阿波罗&#xff09;配置中心&#xff1a; 采用分布式架构&#xff0c;它能够集中管理不同环境、不同集群的配置&#xff0c;配置修改后能够实时推送到应用端&#xff0c;有可视化界面 和 规范的权限&#xff0c;支持 版本管理、灰度发布、监控 等功能。 主要…

早期零撸项目,预注册即将截止, AI身份项目GenomeFi明牌空投教程

简介&#xff1a;GenomeFi基金会旨在用个人基因信息推动生物产业发展&#xff0c;他们通过AI大数据平台和区块链技术验证身份、保护个人信息、提升收入。GenomeFi和CLINOMICS&#xff08;一家基于基因组学疾病早期诊断的领先公司&#xff09;合作提供基因诊断、早期疾病检测、个…

朋友圈之于私域的意义

朋友圈作为社交媒体的一种&#xff0c;是品牌主进行私域流量营销的主要载体&#xff0c;具有推动产品销售、传播信息等多种作用。具体来说&#xff0c;朋友圈在私域中的意义可以体现在以下几个方面&#xff1a; 1. 传播信息&#xff1a;朋友圈可以成为品牌主向其潜在客户传递信…

面试算法-63-全排列

题目 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 解 class Solution {public List&l…

前端学习笔记|CSS基础

css学习 中文学习网站 https://www.w3school.com.cn/ 非语义化的标签 1.div 2.span 类型选择器 类型选择器有时也叫做“标签名选择器*”*或者是”元素选择器“&#xff0c;因为它在文档中选择了一个 HTML 标签/元素 类选择器 类选择器以一个句点&#xff08;.&#xff…