自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 史上最全的Git使用手册

git manual一、代码提交将新建文件加入到暂存区git add hello_world.c #将hello_world.c加入到暂存区将所有改变的文件加入到暂存区git add. #将hello_world.c加入到暂存区查看当前状态git status将暂存区的文件提交到本地的git仓库git commit -m "add:添加一个新文件...."将本地的git代码提交到git服务器git push #提交到git服务器仓库

2022-03-04 21:12:17 6600 1

原创 嵌入式软件架构七

前言: 在多线程实时系统中,一项工作的完成成往往可以通过多个线程协调的方式共同来完成,那么多个线程之间如何 “默契” 协作才能使这项工作无差错执行?例如一项工作中的两个线程:一个线程从传感器中接收数据并且将数据写到共享内存中,同时另一个线程周期性的从共享内存中读取数据并发送去显示,下图描述了两个线程间的数据传递:韦东山老师视频学习链接嵌入式软件架构一嵌入式软件架构二嵌入式软件架构三嵌入式软件架构四嵌入式软件架构五嵌入式软件架构六线程的同步方式有多种,分别为信号量、互斥量、事件集。信号

2022-02-22 09:53:56 1433

原创 嵌入式软件架构六

前言从裸机编码分析其处理问题的局限以及不足,引入了RTOS,本节主要说明RTOS任务是如何管理调度的。韦东山老师视频学习链接嵌入式软件架构一嵌入式软件架构二嵌入式软件架构三嵌入式软件架构四嵌入式软件架构五RT-Thread线程管理的主要功能是对线程进行管理和调度,系统中总共存在两类线程,分别是系统线程和用户线程,系统线程是由RTT内核创建的线程,用户线程是由应用程序创建的线程,这两类线程都会从内核对象容器中分配线程对象,当线程被删除时,也会从对象容器中删除,而每个线程都有重要的属性,线程控制块

2022-02-22 09:31:30 1918

原创 嵌入式软件架构五

前言前四节主要分享了单片机裸机开发的学习心得以及工作经验与一些源码,本节开始分享实时操作系统RTOS的原理。韦东山老师视频学习链接嵌入式软件架构一嵌入式软件架构二嵌入式软件架构三嵌入式软件架构四1. RTOS的内核组成部分以RT-Thread内核为主介绍RTOS内核的组成;内核是操作系统最基础最重要的部分,内核处于硬件层之上。RT-Thread内核由以下几个部分组成:线程调度时钟管理线程间同步线程间通信内存管理IO设备管理...

2022-02-21 17:27:07 738

原创 嵌入式软件架构四

前言: 本文是通过学习韦东山老师的嵌入式开发框架系列课程第四课,主要说明各个任务、各个系统直接如何分层实现,让整个系统实现双向解耦,即纵向、横向解耦,这样实现的代码后期维护起来非常方便,代码可读性也很强,扩展性非常好。韦东山老师视频学习链接嵌入式软件架构一嵌入式软件架构二嵌入式软件架构三1、本文通过学习嵌入式系统的分层思想结合自身工作中的经验分享以NB-IoT模块为例的分层思想,一般在系统设计中可将系统按照业务功能分为功能模块,也就是分为子系统或者模块,再将模块进行横向分层,可分为驱动层、中间管理

2022-02-19 16:55:37 6081

原创 嵌入式软件架构三

前言: 通过对韦老师的逻辑架构的学习,再结合工作中实际的经验以及在《嵌入式软件架构一》中提到的那位大佬的逻辑代码中任务调度的逻辑,分享自己的理解以及任务的调度管理。一、任务管理原理任务管理总共分为:任务创建、删除任务、设置任务间隔、任务调度;1、定义一个函数指针作为任务的入口函数与任务结构体typedef void (*TASK_FUN)(INT32U para);// 任务项定义typedef struct{ INT8U Used; // 使用

2022-02-19 14:03:31 498

原创 嵌入式软件架构二

说明:近期通过学习韦东山老师的裸机与RTOS再次强化了软件设计思想,因此特通过此博客进行记录。韦东山老师学习资料链接1、上一节提到使用定时器的事件驱动方式调度任务依然有缺陷,主要的缺陷有一旦某个函数执行的时间超长,就会有如下后果:影响其他函数;延误整个时间基准;上一节的链接地址改进方法是在定时器中断中只负责每个任务当前时间的减减,而任务调度放在主循环中,这种方式情况下,时间基准不会被耽误,但是A 、B 、 C的调用再次退化为轮询方式,A、B、C相互之间有影响,每个任务运行的时间不能过长,不能被

2022-02-17 17:05:03 346

原创 嵌入式软件架构一

前言:随着工作年限的延长,已经不能满足于刚毕业时单纯的学习某一个知识点就能解决问题了,在工作中需要对行业的标准以及发展沉淀并积累。嵌入式开发同样如此,不能满足于功能的实现,而是整个系统架构的设计,因此操作系统原理的掌握以及分层思想是尤为重要的,近期通过学习韦东山老师的裸机与RTOS再次强化了软件设计思想,因此特通过此博客进行记录。韦东山老师学习资料链接一、裸机编程思想1.1 回想刚参加工作的时候,看到同事编写的一个逻辑代码,当时感觉就是太牛了,而我当时只是处于while(1)的死循环中,人家不仅有模

2022-02-17 16:25:55 939

原创 物联网实战开发—环境搭建

本文经过学习郭朝斌老师在《极客时间》中的课程物联网实战开发记录而成。使用的开发板为NodeMCU的基于ESP8266芯片版本,使用的编程语言为python。第一步:首先需要在开发板上搭建Micro Python开发环境,可以在Micro Python官网上下载关于ESP8266的固件,这样省去了交叉编译等工作,官网链接为:https://micropython.org/download/esp8266/,此时我下载的版本为esp8266-20210202-v1.14.bin。此版本为最新的稳定版本。

2021-02-03 22:00:56 2626

原创 Samba配置

前言:我们在很多开发过程中都会遇到需要在linux环境中编译的情况,比如linux开发、HarmonyOS开发,其编译都需要在Linux环境下进行,但是代码开发又在Windows上进行编辑比较方便,因此需要有个工具将两者联系起来,Linux环境可以是服务器(大多数公司会使用),也可以是虚拟机上运行的Linux系统,此处我以虚拟机上运行的Ubuntu系统为例,介绍一种工具,Samba,的按照以及使用。第一步:安装Samba在linux下进去终端或者远程ssh链接,注意,此处一定要连网,也就是虚拟机与主机相

2020-12-18 14:05:15 5380 2

原创 虚拟机与电脑主机网络配置

下面主要分享记录我的虚拟机网络配置过程以及遇到网络不通问题的解决办法:1、配置:在虚拟机上将网络连接配置成NAT模式,当然桥接模式也行,我是使用NAT模式,如下图:然后再在终端中查看网络地址等信息,虚拟机中使用如下命令:ifconfig其中ens33为我们使用到的网卡,虚拟机的IP地址为192.168.229.128,当然每个人的不一样。再在电脑上按win+R,出现,输入cmd打开并输入ipconfig查看当前电脑的IP并在电脑上ping虚拟机的IP,此时表示电脑到虚拟机是通的,再在

2020-12-13 11:47:28 997 1

原创 HarmonyOS_BearPi-HM Nano学习笔记之环境搭建

前言:期待了已久的小熊派鸿蒙开发板终于出世了,12月11号准时抢到优惠券,果断下单,运费一起也就是29.9,实话说,很划算的,毕竟对自己的学习投资嘛,得舍得。下面我把代码仓库、资料、视频课程地址贴出来,以便自己今后忘记了可以查阅,同时方便大家学习;BearPi-HM Nano的主代码仓库是:https://gitee.com/bearpi/bearpi-hm_nanoBearPi-HM Nano的文档资料在:https://gitee.com/bearpi/bearpi-hm_nano/tree/

2020-12-13 11:14:43 3660 15

原创 第二章 物联网平台在手 万物皆有

一、端到端的开发流程平台侧开发——》设备测开发——》应用测开发二、产品物模型物模型又称产品模型,用于描述设备具备的能力和特性。开发者通过定义Profile,在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持的服务、属性、命令等信息,如颜色、开关等。产品分为:产品信息、服务能力、维护能力产品信息包括:厂商ID、厂商名称、设备类型、型号、协议类型;服务能力包括:服务属性、服务命令(命令字段+响应字段);维护能力包括:固件升级、软件升级、配置更新;...

2020-10-23 11:22:30 169

转载 自动驾驶之眼——V2X

1、C-V2X基础解析V2X ,即 Vehicle to Everything , 表示车与外界其他事物进行“沟通交流”的一种通信方式;“X”表示任何能与车辆进行“交流沟通”的对象,目前主要的类型有:1)V2V - 车与车通信2)V2P - 车与人通信3)V2I - 车与道路基础设施通信4)V2N - 车与云端网络通信从全球来看,V2X车联网主要包括两种无线通信技术:1)美国主推的以IEEE802.11为基础的802.11p通信技术2)我国主推的以移动蜂窝通信技术为基础的C-V2X通信技术

2020-10-21 09:50:29 564

原创 第一章了解物联网操作系统,与LiteOS相识

1、RTOS(Real-time operating system,实时操作系统),主要是管理系统硬件和软件资源的系统软件,以方便开发者使用,操作系统管理的资源包括处理器、存储器、外设、甚至包括文件系统等等。2、实时操作系统分为硬实时和软实时;HUAWEI LiteOS为软实时操作系统;3、HUAWEI LiteOS基础内核是最精简的HUAWEILiteOS操作系统代码,包括任务管理、内存管理、时间管理、通信机制、中断管理、队列管理、事件管理、定时器等操作系统基础组件,可以单独运行。4、Huawei

2020-10-21 09:35:46 457

原创 物联网全栈工程师学习笔记之MQTT实验

此处记录今天在实验过程中遇到的坑,主要为在Linux下的环境变量配置问题,具体如下:1、在编译客户端MQTTClient_publish和subscribe时需要配置gcc的编译链接环境配置共享库所在的目录,在解压的wxd@ubuntu:/home/work/IoT_Developer/mqtt/Eclipse-Paho-MQTT-C-1.3.2-Linux$ 目录下执行以下命令:export LD_LIBRARY_PATH=${PWD}/lib/,可以使用echo $LD_LIBRARY_PATH命

2020-09-05 20:17:04 481

原创 物联网全栈工程师学习笔记之HTTP学习

一、HTTP概述1.1、HTTP概述HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,用于从万维网服务器传输超文本到本地浏览器。HTTP是基于TCP/IP通信协议来传递数据,包括HTML文件,图片文件,查询的信息内容等。HTTP是一个基于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。1.2、HTTP的发展1.3、HTTP特点HTTP是无连接的:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并受到

2020-08-31 18:37:24 220

原创 物联网全栈工程师学习笔记之JSON学习二

内容接上一节《物联网全栈工程师学习笔记之JSON学习一》八、JSON的语法JSON的语法衍生于JavaScript对象标记语法:数据在名称/值对中数据由逗号分隔花括号容纳对象方括号容纳数组8.1JSON名称/值对8.1.1 JSON数据的书写格式是:key/value(健/值)对。名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值: - “name”:”Huawei_IoT” - “deviceCode”:”123456789”等价于这条JavaScript语句:

2020-08-30 15:12:46 255

原创 物联网全栈工程师学习笔记之JSON学习一

一、概念JSON是一种轻量级的数据交换格式。它采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。序列化:将数据结构或对象转换成二进制串的过程。反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。二、作用:序列化:在传递和保存对象时,保证对象的完整性和可传递性。对象转化为有序字节流,以便在网络上传输或者保存在本地文件中。反序列化:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。三、指标通用性:序

2020-08-30 14:59:26 426

转载 学习记录之面向对象&&面向过程

申明:以下内容为转载,纯属为了学习记录,若有侵权,联系本人删除。文章出处:公众号《嵌入式大杂烩》链接:https://mp.weixin.qq.com/s/Z6Ye6go9sLubgkhT-v39RA面向对象&&面向过程1、什么是面向过程编程?比较官方的解释就是:“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。C语言就是一门面向过程的语言。2、什么是面向对象编程?比较官方的

2020-07-21 15:42:58 210

原创 日常入坑之STM32CubeMX使用

相信近几年开发STM32的童鞋对STM32CubeMX不陌生吧,其实我是今年才用起来的,一试就放不下了,真香!!!夸张了,其实对于应用开发的人来说还是挺方便的,底层寄存器不再关心怎么配置,只需要将应用开发好即可,但是在使用STM32CubeMX这个工具中,不熟悉的人多多少少还是会遇到一些坑,下面我就记录一下我在使用的过程中遇到的一个比较大的坑,具体描述如下:开发环境为小熊派的STM32L431开发板,使用Cube工具只配置了LED灯与KEY对应的IO、还有串口,如图:![在这里插入图片描述](http

2020-07-12 15:06:08 1145

原创 日常入坑之STM32串口空闲中断问题

前言:在使用小熊派开发板STM32L4单片机开发蓝牙驱动时遇到的了一个非常非常奇怪的问题,当然也怪学术不精,具体问题描述如下:使用STM32L4单片机,蓝牙为串口驱动,选择单片机的串口3,为啥选择这个呢,这得问问我那脾气很臭的硬件工程师,串口配置为DMA空闲中断,使用STMcube生成的代码,代码生成后基本初始化已经自动完成,在外设比较少的情况下运行正常,但是当把外设加多的时候,比如初始化了ADC、TIM、SPI等时候,程序在刚开始运行就进入硬件故障中断,HardFault_Handler();纠结了好几

2020-07-06 09:32:28 3517 1

原创 STM32Cube生成的MDK工程,首次打开时增加新的文件出现无响应、卡死等现象解决办法

在使用STM32Cube生成的MDK工程,首次打开时增加新的文件出现无响应、卡死等现象,实在让人着急,后来通过百度看到有人提出了解决方法,现记录如下,以免时间长了又忘记:第一步:点击Manage RUN-Time environment第二步:弹出如下界面:第三步:点开 CMSIS,取掉CORE后的√;第四步:保持继续添加 OK!...

2020-06-15 16:10:09 1627

原创 STM32嵌入式裸机开发不停止式延时方式

STM32嵌入式裸机开发时,需要使用一些延时,比如STM32中默认的HAL_Delay(1000),表示延时1S,而这种延时是指令暂停等待,其他指令无法执行,效率特别低,而此时需要这种不停止式延时方式,这种延时方式也需要一个基准定时器或者系统滴答,需要延时时获取当前的基准定时器的时间作为基准,设置延时时间,每次运行到此处判断当前累计时间差是否大于等于设置的延时时间,涉及到的参数如下:需要一个tick,每次定时器时间到了后自增,需要一个函数,获取当前tick的值,需要一个计算时间差的函数DiffTime,计算

2020-06-12 16:24:37 760

原创 状态机在物联网产品嵌入式开发中的应用

状态机在编程中很常见,而用好状态机却不容易,在网上也看到很多人有很多种用法,优缺点各有吧,主要配合自己的系统编写出适合自己的状态机,下面我主要记录一下状态机在物联网产品嵌入式开发中的应用。 我指的物联网产品是带无线通信模组的,比如WIFI、BLE、NB_IoT、4G模组等,这些模组在使用过程中需求AT指令驱动,此时个人觉得使用状态机的方式编写驱动代码更好更直观,当然此时需要另外一个知识点,那就是“不停止式延时”,解释一下什么是“不停止式延时”:一般我们使用延时...

2020-06-12 15:25:24 291

原创 AD10软件导入CAD图纸尺寸

近期使用AD软件画PCB时用到尺寸图为CAD设计的dxf格式文件,用CAD打开,标出尺寸,然后可以在AD上重新画出,但是这样第一会很麻烦,作为一名技术人,怎么忍受得了这种重复性工作,而且可能会出错,装配不上,以免后续与结构设计人员扯皮,因此AD软件中提供可一个很好用的功能,名叫import,可以导入需要导入的文件,这里我们可以将dxf格式的文件导入,这个功能属于AD的一个插件Plug,下面通过我第一次使用此功能来记录使用步骤以及遇到的问题,仅此记录,方便自己后续查看以及分享给需要的人。第一步:打开AD,建

2020-06-08 17:03:56 3720

转载 STM32时钟系统

众所周知,时钟系统是 CPU 的脉搏,就像人的心跳一样。所以时钟系统的重要性就不言而喻了。 STM32 的时钟系统比较复杂,不像简单的 51 单片机一个系统时钟就可以解决一切。于是有人要问,采用一个系统时钟不是很简单吗?为什么 STM32 要有多个时钟源呢? 因为首先STM32 本身非常复杂,外设非常的多,但是并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及 RTC 只需要几十 k 的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也会越弱,所以对于较为复杂的 MCU 一般都是采取多

2020-05-10 10:55:44 502

原创 OOPC—Linked List2

上一节中球员使用数组存储,数组的大小定为20,那么问题来了,加入一个球队的球员数大于20怎么办?我们是要定义足够大吗?定义100可以吗?当然可以,但是若有一个球队队员只有5个人时,剩余的空间是不是浪费了,那么我们有什么办法解决吗?当然有了,使用链表。LList对象内含多态性链表(Linked List),能存不同类的对象,如果这些对象又具有多态性,就更能发挥巨大效益。现将上一节球队的实例里pla...

2020-04-14 15:52:09 117

原创 OOPC—Linked List1

集合对象如“菜篮子”一样,能装各种蔬菜水果。简而言之,集合对象是多态性的数据结构(Polymorphic data structure),首先使用数组表示集合对象,如下面例子,有一只球队,包含各种成员,且各有不同的角色,比如有经理、教练、球员,下面就是一般数组表述球队的组织;首先定义一个球队的类,具体如下:typedef struct{ void (*init)(void *); voi...

2020-04-14 15:28:55 112

原创 卸载VMware虚拟机时遇到的问题解决办法

在使用虚拟机的过程中,有时候需要重新装,可是上一个版本卸载不干净,导致无法安装新的虚拟机,以下脚本吧,可以卸载一些使用卸载软件无法卸载干净的残留文件,具体做法如下:1、新建.txt文档,将下面指令复制粘贴到.txt中;cls @echo off CLS color 0a echo 取消DLL文件的注册... regsvr32 /u /s "%cd%/vmappcfg.dll" re...

2020-04-12 10:12:09 1196 1

原创 虚拟机VMware有时打开黑屏,一直不进入,也不能正常关闭

虚拟机VMware有时打开黑屏,一直不进入,也不能正常关闭,也不知道是WIN10更新导致还是什么原因,反正就是之前开始用的好好的,突然成这样的。处理的一系列措施:1、任务管理器将当前运行的虚拟机停止;2、在防火墙中将虚拟机添加为新任,不管是公务还是专网,都是信任;3、禁用VMware Network Adapter VMnet8;4、删除虚拟机目录下的 .lck文件夹;5、在C:\Wi...

2020-04-11 14:29:28 1093

转载 虚拟机VMware重装时遇到问题以及解决方法

虚拟机在使用的过程中出现了打不开的现象,于是将它卸载重新装,结果提示“用户在命令行上发出了 EULAS_AGREED=1,表示不接受许可协议。”在一篇文章中找到了解决的办法,现在就此做记录,担心后面又忘记解决办法,也分享给大家;参考文章地址如下:https://blog.csdn.net/qq_37380575/article/details/105074465安装时提示如下:解决办法...

2020-04-11 11:03:02 1807

原创 OOPC—接口的应用实例

接口的最后一节,应用实例,本来昨天就学习了,程序也在VC6.0上验证通过了,在书中举的例子是现实生活中手电筒,可能现在没有这种手电筒了,我小时候家里经常使用,用两节电池装在手电桶里,不过得经常更换电池,每次老爸把旧的电池换下来我就把中间的碳棒拆下来,碳棒能干啥呢?农村成长的我们也许会知道,可以用碳棒写字,当然不是在作业本上写,是在院子里写字。那时候作业本也贵,只能想不要钱的办法、、、好了不回念过去...

2020-04-10 20:28:13 237

原创 OOPC-一个类实现多个接口(multiple interface)

一个类实现多个接口,这段程序用自己的方法实现了,但是最后主函数那块没看太明白,若有路过的大神,看到了麻烦留下您的高见,下面代码通过两个接口分别计算一个对象(矩形)的面积和周长,具体代码如下:1、计算面积的接口#ifndef __C14IB_H__#define __C14IB_H__typedef struct{ void (*init)(void*, double, double)...

2020-04-09 10:08:22 1106

原创 OOPC_Polymorphism

以接口实现多态,验证IDE:VC6.0以接口实现多态研究了两天,使用lw_oopc.h头文件中的宏搞得晕头转向的(PS:也可能是C++、C语言基础不扎实吧嘿嘿,还好意思笑!!!!),想来想去,既然后续会用在嵌入式中,那直接使用C编写了,架构思路还是面向对象,这样即学习了面向对象,又很清楚直观的理解,好了废话不多说,直接上干货!!!小模块的功能呢,就是售票机中投币识别币的一个功能,通常投币有1元...

2020-04-07 21:39:59 213

原创 OOPC

OOPC学习1最近在研究面向对象的方式进行嵌入式编程,发现了《UML+OOPC嵌入式C语言开发精讲》一书,书中提供的思路着实有用,特此作为学习记录;将C语言封装成类,在开发的过程中直接可以面向对象的思想进行开发,这样结构清晰,易于联合开发与维护,下面将学习到的代码作为简单的分享与说明。首先宏定义式的封装,如下程序Lwoopc.h:#ifndef __LOOPC_H__#define __...

2020-04-01 20:54:29 336

NB-IoT模块驱动源码

资源内容:NB模组的驱动代码 实用目标:了解NB模组如何工作以及如何驱动的,可下载直接实用; 应用场景:低功耗物联网设备上实用,比如地磁、水表、路灯等; 实用人群:物联网传感器开发嵌入式开发者;

2022-02-19

单片机裸机任务管理源码

单片机裸机任务管理源码,包括任务创建、任务删除、任务间隔设置以及任务调度,任务调度分为阻塞任务调度与非阻塞任务调度。非常实用,简单明了,源码易读易懂,下载即可实用;

2022-02-19

uPyCraft_V1.1.rar

嵌入式python开发工具uPyCraft V1.1,目前支持6种以上开发板

2021-02-23

my_delay.7z

一种STM32嵌入式裸机开发使用的“不停止式延时方式”代码分享,在嵌入式开发中,经常会使用系统自带的延时Delay,此时在程序执行到此处时,指令暂停等待,会影响其他指令运行,而此不停止式延时方式即起到了延时作用,又不影响其他模块的运行。

2020-06-12

状态机方式编写蓝牙模组驱动.7z

以蓝牙模组驱动开发为例介绍状态机在物联网模组嵌入式AT指令开发中的应用,通过状态跳变,完成每个状态的事情,配合多次指令下发以及延时,稳定可靠的驱动模组。

2020-06-12

空空如也

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

TA关注的人

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