C语言编程
文章平均质量分 64
zwb_578209160
这个作者很懒,什么都没留下…
展开
-
RT-Thread--Nano
1、RT-Thread Nano简介RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于家电、消费电子、医疗设备、工控等领域大量使用的 32 位 ARM 入门级 MCU 的场合。下图是 RT-Thread Nano 的软件框图,包含支持的 CPU 架构与内核源码...原创 2021-07-05 09:37:15 · 763 阅读 · 0 评论 -
RT-Thread--认识
一、RT-Thread的定义RT-Thread,全称是 Real Time-Thread, 是一款主要由中国开源社区主导开发的开源实时操作系统(许可证GPLv2),包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈、图形用户界面等。相较于Linux,RT-Thread 具有体积小,成本低,功耗低、启动快速的优势。除此以外,实时性高、占用资源小等特点,使得它也非常适用于各种资源受限(如成本、功耗限制等)的场合。在物联网设备的应用中,RT-Thr...原创 2021-07-05 09:19:33 · 827 阅读 · 1 评论 -
MCU--低功耗处理流程
现在电子产品一般都有要求低功耗,不同的MCU,进入低功耗的处理流程可能不一样,但是大致的流程还是一样。现对MCU进入低功耗的处理流程大致如下:(1)关闭MCU之外的外设电源,例如:RS485、CAN收发器模块的供电;(2)对已初始化的MCU片上外设模块进行反初始化,例如:定时器、ADC等等;(3)如果在低功耗模式下要进行定时唤醒,那此时就初始化RTC功能;如果需要外部中断唤醒,此时就需要配置相应的外部中断;(4)对初始化了的IO口进行反初始化,若IO外部被上拉到高,则配置IO推挽输出高电平;原创 2021-05-17 12:00:39 · 1235 阅读 · 0 评论 -
MCU--新塘N76E003--创建工程
一、准备工作1、下载编译工具keil c512、下载N76E003提供的 板级支持包(BSP),可到 nuvoton上下载二、开发环境搭建1、安装keil c51,然后和谐。。。不能随便发链接所以软件需要自己网上找一下,很多。2、安装N76E003 keil支持包Nuvoton_8051_Keil_uVision_Driver_v2.00.6561.exe(在N76E003提供的 板级支持包(BSP)中),这样可以在keil 的device中找到N76E0033、安装nu-link驱动 N转载 2021-04-24 09:13:21 · 1815 阅读 · 0 评论 -
MCU--常用于单片机的接口适配器模式C语言实现
前言通俗的讲,适配器模式是将一个类的接口转换成客户希望的另外一个接口,在我们编写程序的时候,尤其是在我们使用到单片机做项目的时候,经常会用到。但是往往我们做项目写程序的时候,并没有想到那么多,如果在不带操作系统的情况下,想要整个框架易于移植,易于理解,那么我们真的需要好好想想这个设计模式怎么写了。下面我根据自己的项目经验,来说说适用于单片机的接口适配器模式的实现。大佬勿扰,多多指教。一般实现在我们做项目的时候,一般的实现,可能我们会这样写代码/...转载 2021-04-16 09:42:46 · 876 阅读 · 0 评论 -
C语言--状态机模块实现
1. 状态机模块实现状态机编程思想,能够使复杂的逻辑代码变得更加的简单,且逻辑思路更加清晰严谨。下面根据另一篇博文介绍的状态机思想,用C语言实现了状态机可复用的模块化代码。状态机 fsm.h 头文件代码如下:#ifndef _FSM_H_#define _FSM_H_ #include <stdint.h>#include <stddef.h> typedef struct FsmTable_s{ uint8_t event;转载 2021-04-16 08:51:17 · 1031 阅读 · 0 评论 -
C语言--实现状态机
关于状态机,基础的知识点可以自行理解,讲解的很多,这里主要是想写一个有限状态机FSM通用的写法,目的在于更好理解,移植,节省代码阅读与调试时间,体现出编程之美。传统的实现方案 if...else : 搞一大堆if else, 一个函数写很长很长...... swich...case : 也搞一大堆一个函数写很长很长...... 先来看看最近做的一个项目,无线通信协议实现的状态机是什么样子的: 有三种类型的事件:上层下达的命令事件;下层到达的标志和数...转载 2021-04-01 16:45:59 · 1494 阅读 · 0 评论 -
C语言--NTC阻值转温度算法
1、常见的NTC类型(1)3435;(2)3950;2、温度转换的常用方式(1)查表法;(2)表达式直接转换;3、NTC阻值转温度算法 因为NTC的温度与阻值并不是线性的关系,所以需要算法来计算NTC阻值所对应的温度。#include <math.h>static const float Rp = 10000.0f; //10K static const float T2 = (273.15f+25.0f);//T2 static const..原创 2021-03-30 16:03:47 · 3830 阅读 · 1 评论 -
C语言--有符号16进制转换
1、有符号的16进制数,最高位代表符号位,0表示为正数,1表示为负数; 例如:(1)1110 1100(EC)为负数; (2)0110 1100(6C)为正数;2、16进制正数转换为10进制数 例如:0110 1100(6C)= 6*16+12 = 1083、16进制负数转换为10进制数 例如:1110 1100(EC) 转换原则为:除最高位以外的所有位取反,之后后加1(就是把十六进制转成二进制用补码) ...原创 2021-03-24 09:11:53 · 12700 阅读 · 2 评论 -
MCU--时间片&分时轮询
目录1、任务调度2、"先来先服务调度"与“前后台架构”1)先来先服务调度2)先来先服务VS前后台架构3、时间片调度-(也叫RR调度)4、最后小结1、任务调度任务调度对于电子类或者自动化类专业小伙伴最早接触一般都是在接触RTOS后了,然而对于计算机相关专业的小伙伴应该在学《计算机操作系统》老师对这一块讲解的非常清楚了,包括一些性能指标的定义与计算等等,不过作者这里仅仅只针对RTOS进行讲解,大家感兴趣可以找一下操作系统的书籍更加深入学习。大家都知道我们的...转载 2021-03-23 10:01:21 · 2133 阅读 · 1 评论 -
MCU--应用程序架构
对于单片机程序来说,大家都不陌生,但是真正使用架构,考虑架构的恐怕并不多,随着程序开发的不断增多,本人觉得架构是非常必要的。发现真正使用架构的并不多,而且这类书籍基本没有。好不容易找到份资料,可以参考:《谈谈怎样架构你的单片机程序》。 本人经过摸索实验,并总结,大致应用程序的架构有三种:1. 简单的前后台顺序执行程序,这类写法是大多数人使用的方法,不需用思考程序的具体架构,直接通过执行顺序编写应用程序即可。2.时间片轮询法,此方法是介于顺序执行与操作系统之间的一种方法。3.操作系...转载 2021-03-18 11:50:57 · 1567 阅读 · 0 评论 -
BMS--SH367309实例IIC协议应用
目录什么是IICIIC的特性物理(电气)特性IIC总线通信协议开始和结束条件一位信号数据传递模式IIC数据含义解析Write(写)操作(8位数据+1位ACK)Read(读)操作(8位数据+1位ACK)写寄存器标准流程:读寄存器标准流程:TWI 协议协议实例:SH367309 SH367309电器特性SH367309 标注SH367309读协议SH367309写协议什么是IICIIC (Inter-Integr...转载 2021-03-15 17:13:21 · 4141 阅读 · 0 评论 -
C语言--用C语言实现C++继承与多态
继承继承就是当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。举个例子:人是动物,人具有动物的行为和属性,但人也有动物所不具备的行为和属性。动物 行为 属性 会动 体力 人 行为 属性 会动 体力 会学习 智力 继承的实现本实现使用了组合的方式,即把基类作为派生类的成员变量之一。但是一定要将基类放在派生类首部,...转载 2021-03-02 14:36:40 · 1015 阅读 · 0 评论 -
C语言--实现继承与多态
1、继承即派生类中拥有基类的成员变量和成员函数,所以C语言实现如下:#include <stdio.h>typedef void(*Func)(void);void funB(){ printf("B::funB()\n");} typedef struct B{ int _b; Func _fb;}B;typedef struct D{ B b; int _d;}D; void test(){ D d; d.b._fb=funB; d.原创 2021-03-02 14:25:22 · 1299 阅读 · 0 评论 -
STM32--HAL库中CAN的接收和发送函数
先来看看can外设相关的中断向量表: EXPORT CAN1_TX_IRQHandler [WEAK] EXPORT CAN1_RX0_IRQHandler [WEAK] EXPORT CAN1_...转载 2020-11-01 11:00:11 · 13810 阅读 · 0 评论 -
C语言--队列(FIFO)
1、队列的定义队列是一种先进先出(FIFO)的线性表,它只允许在表的一端进行插入,而在另一端删除元素。这和我们日常生活中排队是一样的,最早进入队列的元素最早离开。在队列中,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front)。2、队列的基本操作3、队列的分类队列包含两种形式:链队列和顺序队列。3.1、链队列用链表表示的队列简称为链队列。一个链队列包含两个分别指向队头和队尾的指针(分别成为头指针和尾指针)。3.1.1 单链队列的定义://队.原创 2020-05-31 22:21:10 · 5162 阅读 · 0 评论 -
C语言--“高内聚,低耦合”编程思想
1、定义高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低。2、概念耦合性:也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。内聚性:又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高原创 2020-05-29 18:30:17 · 4488 阅读 · 0 评论