c/c++语言MCU学习笔记

程序=数据结构+算法

算法:解决问题的方法的步骤

算法的分类:

数值运算法和非数值运算法

算法的表示方法;

自然语言表示法、流程图  N/S        

NS流程图,又被称为N-S图,或者是盒图,它是一种可视化建模的结构化编程。NS流程图的结构分为图形、流程线和文字,其特点包括直观表达、容易学习、能够保证程序设计的质量等。但如果是手工作图,不易修改。

NS流程图主要应用于程序算法,它可以限制控制转移,保证程序稳定,比传统程序流程图更方便、直观,因此受到程序设计人员的欢迎。同时,它通过简单的条件和盒子套用,能够更形象地描述出程序表达,方便后期测试,也更符合程序员思考逻辑,并且操作简单,能够为新手设计师提供学习便利,在学习教育上更容易被学生接受。

伪代码的目的是清晰地表达算法的逻辑和步骤,它不遵循特定编程语言的严格语法规则,但能让人们直观地理解算法的基本流程和思路。它在算法设计、交流和理解中经常被使用。

结构化程序就是用高级语言表示的结构化算法

自顶向下  逐步细化  模块化设计        结构化编码

单片机c语言程序开发流程

1.项目规划

1.成本要求,和时间要求,

2.输入输出接口是什么,接口的定义,

3.项目的结果要求是什么,项目的结果如何去验证,

4.项目需要有那些测试,

5,项目设计要采用什么样的硬件方案,使用哪一种单片机,单片机的资源是否满足需求,

6.性价比是否合适,是否方便购买,

7.单片机的仿工具如何,硬件设计和软件设计如何配合,人员分工)

2.  编写程序  汇编程序和c、c++程序(都需要包含头文件)、以及库文件

   tips:文件的包含  函数的声明   常量定义

3.链接文件(指定程序段在存储器中的位置)

4、生成目标代码  (二进制代码)

5.下载  调试   修改

单片机程序的总体结构

1启动文件+2主程序+3中断   服务程序    

1启动文件  复位延时  初始化ram   配置振荡器  

2主程序单片机和应用程序的初始化。打开主主中断开关,执行主循环程序

3.关注中断执行频率  和执行时间  中断嵌套   优先级不同时

如何编写驱动文件

技术基础要求:

1.指件(函数指针,空指针,结构体指针等)
2.结构体(struct)
3.联合体(union)
4.枚举(enum)
5.动态分配内存(malloc)
预处理器指令(宏定义,条件编译,文件包含,错误指示)
7.链表
8.操作系统的线程间通信(队列,信号量)

写驱动的流程


1、分析原理图&看数据手册


2、写.h文件


        0.命名规则(项目_层_设备名_H)
        1.定义接口&明确解耦点(南向接口、北向接口、阻塞非阻塞,事件驱动,中断硬实时)

        2.明确资源(堆栈,数据流大小,队列数量,中断优先级,线程数量,栈深)

        3.明确数据流方式(共享内存,线程通信,多核通信)
        4.包含头文件(编译器库、操作系统库、硬件驱动库等)

3、写.c文件


        1.实现接口
        2.测试节点(Trace、RTT接口),单元测试节点。


4、单元测试

(接口容灾能力、数值范围、传入类型&合法性判断等)

5、上传git分

代码规范的目标

(1)代码简洁精炼,美观,可持续性好

(2)高效率
(3)高复用,可移植性好
(4)高内聚,低耦合
(5)没有几余

(6)规范性,代码有规可循.

(7)特殊排版,特殊语法,特殊指令,必须特别说明
代码规范的参考书
代码规范标准参考(1)google,华为等大厂(2)典型开源项目,如opencv,opengl, boost库等

头文件包含


(1)先系统文件,后用户头文件.系统文件使用: #include <xxx.h>,
自定义和第三方库头文件使用: #include“xxx.h"
(2)如果头文件与程序文件在同一个子目录里,则可以这么写: #include"./xxx.h”
(3)如果头文件在上级子目录,则可以这么写: #include"../xxx.h"

(4)如果头文件位于某个下级子目录里,那么以下级子目录的名字开头: #include"somedir/xxx.h"

(5)如果头文件位于某个与当前子目录平行的"兄弟"子目录里,则需要这么写: #include"/somedirlxxx.h'

(6)只引用需要的头文件

MCU层级规划

BSP: 板级支持驱动程序


BSP: Board Support Package
MCU和板上外设器件(比如MPU6050)的通信与交互过程有时候分两种:
1裸机(有限状态机)情况下,写的驱动程序2.在操作系统下,写驱动程序。

Core: MCU驱动程序


面向MCU进行编程,初始化MCU内部的外设(时钟,IIC,SPI等外设)。包含main.c文件。


Drivers: 厂商SDK程序


MCU厂商和MCU内的CPU厂商提供的,用来对CPU和偏上外设编程时用的驱动库,一般由厂家提供。

tips:当面向mcu编程时,调用的就是drivers厂商提供的hall库,对外设进行初始化


Middlewares:中间件


抽象程度很高,能在各个项目中安插通用的:LVGL\FreeRTOS\数学库\快速傅里叶变换库

SYSTEM: 系统配置层对系统定义整体的宏;


应用层:
实现具体地应用逻辑,

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

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

相关文章

SAMformer创新点

SAMformer 提供了一种新的方法来改进变换器&#xff08;Transformer&#xff09;在时间序列预测任务中的性能&#xff0c;特别是针对泛化能力和训练稳定性问题。具体来说&#xff0c;SAMformer结合了两个关键技术&#xff1a;锐度感知最小化&#xff08;Sharpness-Aware Minimi…

鸿蒙登录页面及页面跳转的设计

目录 任务目标任务分析任务实施1.新建工程项目HMLogin2.设计登录页面Index.visual3.设计第二个页面SecondPage4.修改Index.ets代码5.修改SecondPage.ets代码6.运行工程 任务目标 设计一个简单的登录页面&#xff0c;要求可以将第一页的登录信息&#xff0c;传递到第二个页面&a…

Cesium 在加载 3dTiles 如何如何获取ID

文章目录 问题分析问题 加载的 3dTiles 打印content.getFeature(i)出来后如图所示,想获取到id值 分析 var tileset = mapLayer.init3dTileLayer({url:it.url,maximumMemoryUsage: it.maximumMemoryUsage,

一起学Hugging Face Transformers(7) - 使用Transformers 库进行机器翻译(Machine Translation)

文章目录 前言一、 环境准备二、 导入库并加载预训练模型三、 进行翻译四、 支持多语言对五、 调整翻译参数六、 使用具体任务的模型总结 前言 机器翻译&#xff08;Machine Translation&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的一个重要任务&#xff0c;它…

关于RAG优化的几个小技巧

一、背景说明 RAG技术为大型语言模型&#xff08;LLMs&#xff09;提供了从数据源检索到的信息&#xff0c;以支撑其生成的答案。简而言之&#xff0c;RAG就是搜索加上LLM提示&#xff0c;你让模型在提供的信息上下文中回答问题。查询和检索到的上下文都被注入到发送给LLM的提…

Spring Boot 启动流程是怎么样的

引言 SpringBoot是一个广泛使用的Java框架&#xff0c;旨在简化基于Spring框架的应用程序的开发过程。在这篇文章中&#xff0c;我们将深入探讨SpringBoot应用程序的启动流程&#xff0c;了解其背后的机制。 Spring Boot 启动概览 SpringBoot应用程序的启动通常从一个包含 m…

求生之路史低入手 教你怎么使用求生之路创意工坊提高体验性

求生之路是一款抵御丧尸的第一人称射击游戏&#xff0c;四名幸存者联机配合&#xff0c;在现代的城市中&#xff0c;击败各种丧尸还有强大的变种人BOSS&#xff0c;虽然是十几年前的游戏&#xff0c;但是毫不夸张的说&#xff0c;游戏丝毫不过时&#xff0c;目前steam夏促&…

理解SurfaceFlinger在Android中的作用

理解SurfaceFlinger在Android中的作用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨Android系统中一个关键的组件——SurfaceFlinger&#xff…

Spring Boot实现多环境配置

1.为什么需要多环境配置&#xff1f; 在实际项目开发过程中&#xff0c;我们往往需要区分开发&#xff0c;测试&#xff0c;联调,预发布&#xff0c;生产等不同的应用环境。这些应用环境用途不同&#xff0c;对应环境的配置项,稳定性,数据质量,保障性,可接触人群等要求也不同&…

Redis持久化(RDB AOF)

Redis持久化 MySQL的事务&#xff0c;有四个比较核心的特性&#xff1a; 原子性一致性持久性&#xff08;和持久化一样&#xff09;&#xff0c;将数据存储在硬盘上&#xff0c;重启主机之后数据仍然存在隔离性 redis是一个内存数据库&#xff0c;把数据存储在内存中&#xff0…

【高考】【填志愿】分数限制下,选好专业还是选好学校?

【高考】选专业时&#xff0c;应避免的误区-CSDN博客 【高考】选专业时以什么为主&#xff1f;-CSDN博客 分数限制下&#xff0c;选好专业还是选好学校&#xff1f;-CSDN博客 分数限制下&#xff0c;选好专业还是选好学校&#xff1f;-CSDN博客 分数限制下&#xff0c;选好专…

低代码开发助力中小企业数字化转型难度持续降低

随着数字化转型的趋势不断加强&#xff0c;越来越多的中小企业开始意识到实现数字化升级是提升企业竞争力、适应市场变化的重要手段。然而&#xff0c;受制于资金、技术等方面的限制&#xff0c;这些企业在转型过程中面临着不少挑战。如何有效克服这些困难&#xff0c;找到一条…

算法题 — 接雨水

给定 n 给非负整数&#xff0c;表示每个宽度为 1 的柱子的高度图&#xff0c;计算按照此排列的柱子&#xff0c;下雨之后能能接到多少雨水。 输入&#xff1a;height [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0, 1, 0, 2, 1,…

布尔运算00

题目链接 布尔运算 题目描述 注意点 运算符的数量不超过 19 个布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成算出有几种可使该表达式得出 result 值的括号方法 解答思路 可以使用动态规划根据左右两侧区间不同结果相应组合数量计算得出当前…

国产Cortex-A55人工智能教学实验箱_基于Python机械臂跳舞实验案例分享

一、实验目的 本实验通过TL3568-PlusTEB教学实验箱修改机械臂不同舵机的角度&#xff0c;增加延迟时间&#xff0c;从而做到机械臂跳舞的效果。 二、实验原理 ROS&#xff08;机器人操作系统&#xff09; ROS&#xff08;机器人操作系统&#xff09;&#xff0c;是专为机器人…

Golang解决bufio.Scanner: token too long的问题

Golang解决bufio.Scanner: token too long的问题 在Go语言中使用bufio.Scanner时&#xff0c;遇到“token too long”&#xff08;标记过长&#xff09;的错误&#xff0c;通常是因为尝试读取的行太大&#xff0c;超过了bufio.Scanner默认的最大容量。bufio.Scanner默认的缓冲…

@ComponentScan注解在Spring的作用

ComponentScan注解的作用是什么&#xff1f; 告知Spring扫描那些包下的类&#xff0c;可以配置includeFilters&#xff0c;excludeFilters&#xff0c;过滤某些类&#xff0c;更多内容可以具体看下此注解文件。 Spring是如何通过这个注解将类注入到Ioc容器中的&#xff1f; 请…

[linux]sed命令基础入门详解

sed是一种流编辑器&#xff0c;它一次处理一行内容。处理时&#xff0c;把当前处理的行存储在临时缓冲区中&#xff0c;称为“模式空间”&#xff0c;接着用sed命令处理缓冲区中的内容&#xff0c;处理完成后&#xff0c;把缓冲区的内容送往屏幕。接着处理下一行&#xff0c;这…

生命在于折腾——Macbook虚拟机开启360核晶

首先启动PD虚拟机&#xff0c;打开360&#xff0c;发现提示如下&#xff1a; 此时将虚拟机关机。 打开该虚拟机设置&#xff1a; 将虚拟机监控程序改为Parallels&#xff0c;并启动nested虚拟化。 改好后截图如下&#xff1a; 保存设置&#xff0c;开机 此时就可以开启了…

硬件实用技巧:摄像头常用的输出协议类型和输出接口类型

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140042485 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…