自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (5)
  • 收藏
  • 关注

原创 Gcov 查看代码覆盖率

絮絮叨叨:想写的素材有很多,每次都是拖到最后也没写完,还是要多学习彭同学的 “先找软柿子捏” 。GCOV 工具简介gcov是一个测试代码覆盖率的工具。它是 gcc 自带的查看代码覆盖率的工具,无需额外安装,在嵌入式的 arm-eabi-none-gcc 中同样可以使用(需要重写部分系统函数)。使用效果如下图所示:程序运行完成后,可以查看每个文件的代码覆盖率情况,上面报告中展示了每个文件的行覆盖率,函数覆盖率和分支覆盖率。打开一个文件的覆盖率报告,页面对开始有文件的基本信息描述,以 FreeRT

2021-09-14 02:08:14 2957 1

原创 STM32上使用POSIX接口 (基于freertos)

STM32上使用POSIX接口 (基于freertos)絮絮叨叨:如果不是博客粉丝,我都快要遗忘公众号这回事了,感谢所有认真阅读的读者的支持!FreeRTOS 和 POSIX 接口简介POSIX 接口的全称是:可移植性操作系统接口(Portable Operating System Interface, POSIX)。它是由电器和电子工程师协会(IEEE)开发的开放操作系统接口标准,并且得到 IOS 和 ANSI 的认可。其主要目的是提升应用程序在各种 UNIX 系统环境之间的可移植性。使用 PO

2021-07-06 02:25:21 4095 6

原创 变长数组和柔性数组

变长数组和柔性数组絮絮叨叨: 让人不开心的事,不去做就好数组的变种我们常规使用的数组大部分都是C89标准的功能,在C99标准中添加了对变长数组和零长度数组的支持。这两种新的特性有时会给开发带来不错的效果。变长数组变长数组(variable-length array)并不是长度可以变化的数组。在最开始学习C语言时,基本都强调过数组的长度是不可变的,同样这句话依然适用。这里指的变长,是在定义数组的时候长度可变,而不是在使用数组时长度可变。即定义数组时的数组长度可以是变量。例如:int cp

2021-05-22 00:27:13 452

原创 为什么建议少用if语句,不是运行效率!

为什么建议少用if语句,不是影响运行效率!絮絮叨叨:放假使我的作息混乱…相信大家或多或少的听说过,少用点if-else吧?但是为什么要少用呢,有人说他会影响程序运行效率,但是这并不是他最大的罪状!if-else 的罪状if-else 作为三种最基本的程序结构之一,是我们从最开始学习编程时就接触的基本语句。但是到后面的阶段就不断听人说少用if-else。如果询问原因的话,你得到的结果大概率时if-else导致程序运行效率下降。这次来扯扯为什么我们说要少用if-else。导致程序运行效率下降(大

2021-05-04 00:52:25 3316

原创 什么是工厂模式(C语言面向对象实现)

什么是工厂模式(C语言示例)絮絮叨叨:今天师傅让我给他讲讲什么是工厂模式,工厂模式又要怎么用。虽然说知道什么是工厂模式,但是在还没在实际的代码中用过。于是乎又深入的学习了下,发现工厂模式其实我们都见过,只是并没意识到而已。什么是工厂模式这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。按照我的理解就是:“工厂模式将创建对象和使用对象两个过程分离,对于使用者无需关心对象的产

2021-03-12 00:40:53 685 1

原创 时间片轮询的任务调度方法(二)

时间片轮询的任务调度方法(二)调度器设计思路在上篇文章末,对时间调度的基本结构进行抽象。一个时间片轮询任务调度器(定时器调度),包括任务函数(func)、任务执行间隔(interval)、上次执行时间(last_time)三个核心参数。然后将所有待执行的任务节点(time_node)放到任务链表中。由上面的几个参数组成了调度器的数据结构:struct time_task{ uint32_t last_time; //上次执行时间 uint32_t interval;

2021-02-28 23:50:15 1390

原创 时间片轮询的任务调度方法(一)

时间片轮询的任务调度方法(一)使用场景在MCU开发的时候肯定会碰到和时间有关的任务,例如:每10ms刷新屏幕数据,每20ms检测按键状态,每100ms读取传感器数据,电机每1分钟运行10s后关闭。这些都是基于时间的任务,在未使用操作系统的时,有两种常见的做法:1. 使用flag记录当前任务执行状态(推荐指数:⭐)基本思路为:在开启一个定时器中断中,作为时钟源,在中断中判断时间是否到达,时间到达后将任务标志为置位。然后在main函数的超级循环中检查标志位状态。具体实现方式代码如下:int

2021-02-27 01:16:20 3246

原创 开发日记 - 关于敏捷开发的点点思考 V0.0.1

关于敏捷开发的点点思考 V0.0.1絮絮叨叨:前段时间在阅读文章的时候看到这个词,查了下什么是敏捷开发,然后深深吸引了我的注意力。最开始时候理解敏捷开发就是快速开发,而作为一个开发者,自己在做一些业余项目时,深刻的感觉到开发效率低下。在后面的了解中,了解了更多关于敏捷开发的知识,而对自己的开发流程有了些不一样的思考。注:这里不介绍敏捷开发的详细流程,只有从敏捷开发开始产生的一些思考。什么是敏捷开发首先看敏捷开发的概念:敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发

2021-02-25 00:01:36 165

原创 开发日记 - VSCode 使用 Docker 配置gcc环境

VSCode 使用 Docker 配置gcc环境絮絮叨叨:第一篇开发日记,尝试一下把每天工作学习中使用的技术和新的用日记的方式记录下来。开发日记不追求写博客一样的详细,正如名字一样是以日记的形式记录自己每天的学习收获,要求简单明了。1. Docker 安装和使用在云服务器上安装 docker 环境,docker 的基本介绍参考,考菜鸟教程。菜鸟教程用于了解基本的信息,不过从头跟着它进行学习有点摸不着头脑。安装的第一个镜像是Portainer 安装及汉化教程 ,Portainer 是docke

2021-02-23 01:01:55 820

原创 预处理指令之define

预处理指令之define#define 指令是再学习C语言时接触的第二个预处理指令,他的基本用法很简单,但是进阶使用却可以实现很多复杂的功能,正是如此,也容易掉入坑里~一、 define的基本用法define的最简单用法就是宏替换,将一个宏替换为指定的替换体。#define PI 3.1415这个语句的会将文件中出现的PI(全字匹配,且不在字符串中)替换为3.1415。例如下面的语句:printf("PI is %f\n",PI);//输出结果为:PI is 3.1415第一个PI由于

2020-12-19 22:48:57 588 1

原创 C语言预处理指令之include

C语言预处理指令之include闲言碎语在最开始写这篇文章时是打算用一篇文章将预处理指令写完,但是写着写着发现整体下来的篇幅太大了。同时把所有的指令放到一块很难对每个指令做出详细的介绍,所以后面准备使用一篇文章去讲解一个点,争取把它说清楚。关于include 指令#include指令可能是我们使用最多的一个预处理指令了, 基本在所有源文件中都要使用include包含头文件。 #include <stdio.h> ...

2020-12-11 00:59:33 1516

原创 从编码到运行-程序编译过程详解

前言程序从一堆字符怎么变成一个可运行的程序呢,在这我们使用最简单的一个hello word 程序来演示程序的一个完整流程。在这过程中找到一些有用的调试方法,帮助我们在debug时快速解决问题。程序编译时的整体流程经过:编码 、 预处理 、编译、 汇编、 链接运行环境windows 10 + cygwingcc 版本 7.4.0一、 编码按照C语言语法规则,将字符组合成一段有特定含义的文本。main.c#include <stdio.h>char hello[]

2020-12-09 22:17:49 1226

原创 Ctrl OS设计随笔

Ctrl OS设计说明CPU抢占问题问题:系统任务调度核心使用协程进行处理,在处理CPU密集(大量数据运行)任务时,并不会主动出让CPU资源,会导致其他协程被饿死!解决这个问题不是协程关心的问题,更不是协程应该解决的问题。使用协程的核心是不用关心临界区并且提高任务切换效率。协程适合的是IO密集型任务,有大量任务需要等待IO数据,并且进行阻塞。在这种情况下CPU的占用率是很低的,主要时间是在IO等待上。对于上述问题的解决方法是使用线程,线程和协程并不是互斥关系,在需要进行对低优先级、高CP

2020-11-19 23:10:07 97

原创 Ctrl OS开发之libaco协程库

Ctrl OS开发之libaco协程库前言(废话)在linux环境搭建Ctrl OS的协程库是在网上找了几个协程库,现在发现两个协程库。一个是腾讯的libco,另一个是开源大佬的libaco。简单对比两个库之后,libco的功能比较完善,同时相对比较复杂,目前只需要使用协程的基本接口。无需太多的功能,故使用libaco库。libaco简介下面引自libaco的readme :下面是这个项目的简要介绍:除了一个生产级别的C协程库实现,还包含了一个详细的文档描述了如何实现一个 最快且正确

2020-10-27 22:55:26 650

原创 Ctrl OS开发之协程

协程絮絮叨叨这篇博客是Ctrl OS开发的第一篇博客,在后面的时间中将会将整个开发过程和相关知识整理成博客。协程是Ctrl OS的系统层支持,后面所有的功能都是基于协程为基础进行开发,它是基础也是核心,所以第一篇来详细介绍一下协程相关知识,并确定所需要定义的接口。什么是协程协程的定义Wiki的定义:协程是一种程序组件,是由子例程(过程、函数、例程、方法、子程序)的概念泛化而来的,子例程只有一个入口点且只返回一次,而协程允许多个入口点,可以在指定位置挂起和恢复执行。这是wiki百科关于协

2020-10-25 22:22:59 153

原创 数据结构之线性表

线性表重新系统学习数据结构知识,使用博客记录之。【系列博客】数据结构和算法 C语言实现本文概览C语言实现顺序式线性表和链式线性表可储存任意类型数据结构支持插入、删除、读取、查找、遍历等接口。1. 什么是线性表线性表是由n个有限数据元素组成的有限序列。特点:同一线性表中的元素具有相同特性相邻数据元素之间存在序偶关系。除第一个元素都有一个前驱元素除最后一个元素都有一个后继元素结构:线性表的存储结构可分为顺序式和链式两种,下面名称中出现的线性表均指顺序式的线性表,链式线

2020-08-10 19:07:51 161

原创 【系列博客】数据结构和算法 C语言实现

前言该系列博客记录数据结构知识点及其C语言实现,同时记录一些常用的算法的解决方法开发日志V1.0 线性表时间:2020-8-9连续式线性表和链式线性表的数据结构功能可储存通用数据类型,支持默认数据类型和自定义数据类型支持插入,读取,删除,遍历,查找等功能算法任意位整数的加法,链表实现...

2020-08-09 00:22:45 142

原创 【Linux】 Orangepi GPIO开发详解

Orangepi GPIO 驱动开发详解最近新入手了一个OrangePi ,准备学习一下linux下的驱动开发,不过由于刚开始入门,踩到的坑有点多。硬件环境:OrangePi PC Puls开发工具:gcc开发环境:vscode + Remote SSH ( 不得不说vscode真的香啊~)wiringPi库驱动在刷入linux镜像之后,第一个程序就是编写Blink程序!安装wiringPi库首先克隆orangepi的wiringpi库:#获取wiringpi库git clone h

2020-07-19 15:45:15 5850

原创 STM32 USB 系列之大容量设备(MSC) 基于HAL库

STM32 USB 系列之大容量设备MSC建立STM32Cube工程FLASH芯片驱动FATFS移植USB大容量设备移植附件这次的项目使用STM32的大容量设备进行文件传输,通过STM32的USB大容量设备将电脑中的文件放到外部FALSH中,然后在程序运行时通过FATFS文件系统读取数据访问文件。完整工程在文末提供CSDN下载和Github下载内容提要:USB大容量设备的移植、FATFS文件系统移植、W25Q64驱动。建立STM32Cube工程该工程使用STM32F103ZET6,在cube中选

2020-06-28 21:57:20 4256 4

原创 STM32 USB 系列之 虚拟串口(VPC)

STM32 USB系列之虚拟串口这段时间缓慢更新一下stm32 usb系列的博客,前段时间在多个地方零零散散的学习和使用USB协议,在网上查找的资料也是零零散散的,整理一下写成博客。1. 开发环境使用stm32f103c8t6,HAL库,使用CUBE自带的USB库。工程使用vscode+gcc编译,工程文件在文末链接下载,提供makefile和keil两个版本。2. 功能介绍使用stm32 USB功能完成USB转串口功能,使用引脚配置如下:使用USART1作为调试信息输出,USART2作为串

2020-05-14 00:20:22 18532 6

原创 makefile 参数记录

makefile 参数记录常用参数学习makefile, 记录一些参数的使用常用参数参数说明示例注释-jn使用多核编译,n为使用核心数量,最多为CPU内核个数make -j2使用两个内核编译-j自动使用CPU最大的核心数量编译make -j我的电脑为4核等效make -j4NAME=param使用make命令行传递参数到makefilem...

2020-05-04 19:23:26 275

原创 win10环境进行linux开发之WSL的备份与管理

上一篇博客写了WSL的安装与基本配置,这篇文章来写写如何对wsl进行备份。对wsl进行备份不仅仅是留一份存档,这个功能更像是虚拟及的快照功能,如果是当前的环境因为配置出错或者其他原因不能使用,那利用这个备份功能可以快速还原当前的环境。既然它可以像虚拟机一样可以进行“快照”,那同样的也应该也可以支持多个环境同时运行,因为有时在开发一个新项目,想要一个干净的环境,这样就可以不受其他环境的干扰了。...

2020-01-11 23:28:10 3684 1

原创 win10环境进行linux开发之WSL的安装与配置

在嵌入式开发过程中,有许多时候需要使用到linux环境,而通常的是使用虚拟机或者安装一个单独的linux系统。但是在windows的开发方式要相对更熟悉一些,在windows下使用linux编译环境的进行新的开发还有一种更好的选择———WSL。WSL安装WSL是微软推出的在Win10上使用linux的环境的一种新方式,相比与虚拟机,它直接在系统层兼容linux有更高的运行效率,且不用安装虚...

2020-01-10 23:07:25 3305

原创 常用电感封装

在PCB中常用电感主要有直插型,贴片型和空心电感几大类在电路中经常使用的是工字型电感,如下图所示:这两类分别是贴片型工字电感个直插型工字电感直插型工字电感封装为PKxxxx PK是指工字形电感,前两位数字是指其直径,后两位数字指其高度常用封装有PK0345、PK0406、PK0507、PK0608、PK0610、PK0810、PK0912、PK1012。。。。...

2019-04-08 21:25:57 13566

原创 stm32入门学习之新建工程

 1. 新建工程文件夹这里我们建立一个文件夹为 led,作为工程的根目录文件夹。然后为了方便我们存放工程需要的一些其他文件,这里我们还新建下面USER。至于这些文件夹名字,实际上是可以任取的,我们这样取名只是为了方便识别。 2.新建工程2.1 打开keil,在project选项中选择 新建工程  2.2 然后选择刚刚新建的文件夹。然后给工程命名,工程名与文件夹尽量一...

2018-12-22 15:07:37 678

原创 arduino移植笔记之内核分析

在添加新硬件到Arduino的,现在环境配置完成了,接下来移植Arduino的内核,做一些简单的笔记记录一下。  Stream.h中流类依赖于印刷类 在使用源码分析时发现无法定位到read,peek等几个函数,在对应的头文件中发现他们的声明添加了虚关键字设置成了虚函数,在调用这几个函数时实际调用的为在他们派生类定义的函数。在查看headwareSerial.h和对应...

2018-12-20 16:00:33 1361

原创 Arduino内核文件分析(以Stm32duino为例)

       这篇博客主要是分析stm32duino的底层文件结构,来分析stm32duino 的实现原理和它的基本框架。       在后面然后介绍把环境移植到keil上,在keil编译和使用arduino的库           首先下载stm32duino的源码:https://github.com/rogerclarkmelbourne/Arduino_STM32/archive/...

2018-10-11 13:11:37 3733 2

原创 STM32F407之HAL库学习--------GPIO篇

在使用Cube配置完GPIO后,使用下面函数进行操作:     //读取GPIO状态   GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//控制GPIO状态   void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GP...

2018-09-06 15:12:40 5688

原创 电容尺寸、封装及PCB库

常见电容有直插和贴片两种,而直插和贴片均又分为有极性和无极性两种。直插:无极性电容封装以RAD为标识,有RAD-0.1 RAD-0.2 RAD-0.3等,后面的娥数字代表焊盘中心孔间距,单位英寸1in=1000mil 0.1in =100mil=0.254mm常见的瓷片电容(104)其封装就是RAD-0.1,其表示为无极性电容,两引脚间距为0.254(10...

2018-08-28 16:28:51 84941 9

原创 STM32f103 USB移植之USB标准描述符

在对USB协议进行学习和移植的过程有个东西不可避免,肯定会遇到,那就是USB的设备描述符。这个东西始终在usb协议中发挥作用,从设备的枚举到设备的配置,都是由usb描述符进行修改的。今天在移植的时候这个整理了一下usb描述符有关的知识。

2018-04-24 18:06:06 4732

原创 STM32f103USB移植之USB鼠标

        这几天闲着没事开始折腾起32的USB了,USB协议内容有这么复杂,看了几天只吧大概的流程看懂了,具体的实现和数据传输就没有去深究了.stm32USB模块的资料在网上找到了许多,不过每个都只是讲了一部分,在这里把自己移植的过程和我的理解写下来,给自己做个备忘也给大家参考一下。/ **************************************不吵嗦的分割线***** **...

2018-04-19 14:18:23 14536 2

原创 C函数指针 示例

函数指针是指向函数的指针变量,其指针指向函数内存的入口地址。函数指针有两个用途:调用函数和做函数的参数。函数指针的声明方法为:返回值类型 ( *指针变量名) ([形参列表]); 例如:int fun(int x); //声明一个函数 int (*pf) (int x); // 声明一个函数指向指针 int为声...

2018-03-05 22:17:35 188

电容封装库及3D模型.zip

常见电容的封装及3D模型 博客附件:https://blog.csdn.net/mirco_mcu/article/details/82147614

2020-05-26

USB_VPC.zip

博客附件。stm32虚拟串口(VPC)工程,基于stm32F103C8,HAL库 博客地址:https://blog.csdn.net/mirco_mcu/article/details/106081950

2020-05-14

LxRunOfflin软件备份和使用

win10环境进行linux开发之WSL的备份与管理 博客的附带资源 内容为LxRunOfflin的使用文档和软件备份

2020-01-11

Luat_脚本开发指南V2.81 .pdf

luat脚本开发指南,详细说明了luat的API和使用注意事项, 可用于合宙luat网络的开发参考

2019-06-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除