- 博客(35)
- 收藏
- 关注
原创 嵌入式项目实战经验
嵌入式项目实战经验分享,C/C++、Linux、STM32、51单片机、FPGA、IoT、OpenCV、数字图像处理、通信、算法!
2020-06-01 09:11:35 2281
原创 水加热测试曲线及控制方法
1.在烧水时水温会线性上升,而在水快要烧开的时候,由于底部部分水汽化吸热,会降低水温上升的速率,因此我们读出这段温升斜率变小后即可知道水快开了。2.我们在正常1标准大气压下使用该水壶做了以下测试。根据测量,我们在最小水位的时候可以得到这样一张关于温度和时间的对应曲线从该曲线可以看出,在最小水位时前期温度以0.5℃/s的速度上升,而96℃以后上升的速率会突然下降。同理,下面是最大水位时温度...
2019-12-18 09:35:18 13547
原创 单线通讯协议
单线通讯协议一:双方TTL信号通过一根信号线,一根地线来进行通讯。二:通讯硬件协议:1:开始通讯前:主机为发状态,从机为收状态。主机CPU发起,给一个20ms的低脉冲信号,通知主机准备接收主机命令。2:主机按照F2F编码给从机发命令。如果要从机回应,则从机在主机发送读取命令后2ms后按照F2F编码应答。3:硬件协议格式三:F2F编码规则1:位宽固定2ms2:一个2ms宽度的 ...
2019-12-04 09:32:29 14094 1
原创 一种适用于单片机的低功耗软件设计
本算法把单片机软件功能划分成一个个子任务,每个子任务有一个标志。任务对应的标志为1,就需要运行该任务,为0,跳过该任务。只要所有的任务标志位都为0,说明没有任务可以运行,就进入低功耗睡眠状态。单片机的唤醒,需要外部事件的触发,比如按键触发,定时触发。以按键任务,定时任务两个任务为例,说明实现过程:1.判断按键任务标志是否为1,为1,则处理按键任务,处理完后,清除按键任务标志。2.判断定时任务...
2019-10-18 09:04:17 532
原创 一种快速的动态内存分配算法
算法步骤:1.对每个内存缓冲池进行划分,分为位图和内存块。例如一个2K的内存池,按照16字节一个block单位来划分,首先拿出16字节(=2*1024/16/8)当做位图来标记每个block是否被占用,每一个block对应位图中一个Bit,内容如图1所示。当一个block的标记为1,表示可用,为0,表示被占用。位图(16字节,用128bit表示)图12.内存分配,针对需要多个块的情况,例...
2019-10-17 10:13:55 515
原创 一种水沸腾算法
水沸腾算法关键点:判断升温还是降温,只有在升温的情况下,水会沸腾。在大于80度后,一度一度判断,在某一温度下维持一定时间,温度不变的情况下,认为是沸腾。...
2019-07-27 15:48:17 389
原创 基于状态机的DLT645协议解析
DLT645-2007协议格式如下:/* 根据协议格式的状态定义 /#define FRAME_STATES_DLT645_NULL 0 / no synchronisation /#define FRAME_STATES_DLT645_68 1 / have the first Flag Byte r...
2019-07-25 12:27:28 2545
原创 Linux多进程基于socket通讯的参数同步应用
问题描述:在linux开发中,如果进程A和进程B都需要对同一个参数文件进行读写,如果保证参数同步性。解决方案:进程间通讯,采用本地socket,进程A作为参数TCP服务器,进程B作为参数TCP客户端。通讯协议定义。进程B读取参数通过socket通讯从进程A获取,设置参数通过socket通讯通知进程B修改。进程B的所有参数数据来源于进程A对参数的操作。特点:原子性只有进程A能操...
2019-07-24 15:27:19 215
转载 设计模式的C语言应用-非典型模式-第十章
上一章为止,C语言里显性和隐性的设计模式都已经介绍完了。非典型模式章节开始介绍23种设计模式里在C语言退化的,不适用的。这些模式在使用中很难想到其实也是一种设计模式,代码的实现也没有什么特点。开发人员在设计时并不需要特意考虑这些模式,随遇而安即可。了解这些模式,只是加强一下开发人员的全局观,在开发中能润物无声的应用和衍生。原型模式(Prototype) 介绍某些对象的结构比较复杂,但是我们...
2019-07-23 13:37:56 190
转载 设计模式的C语言应用-访问者模式-第九章
访问者模式(Visitor)介绍把对象数据和操作分离,使操作可以独立演化。一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。访问者模式是适用于那些数据结构比较稳定的模式。这个算是在C里面退化的不是那么厉害的一种模式思想, 或者说这种方法和C实现天然结合而不成为模式。因为C里面本来就很少将数据和访问方法封装在一起,数据的组织形式是数据结构的范畴,访问函数是代码流程设计的范畴。...
2019-07-23 13:34:40 131
转载 设计模式的C语言应用-外观模式-第八章
外观模式(Facade)介绍外观模式也叫门面模式外观模式就是提供一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。如下图,是使用外观模式后将子系统的使用变得更加简单。说起来比较复杂,实际上在日常生活中经常能遇到。比如部门安排出差,需要去淘宝买出差洗漱用品,一共有4中东西要选择。洗面奶,牙膏,洗发水,润肤露。消费者可以自己一个买,也可以买套餐。把上图...
2019-07-23 13:33:24 118
转载 设计模式的C语言应用-建造者模式-第七章
模式介绍建造者模式将复杂产品的构建过程封装分解在不同的方法中,使得创建过程非常清晰。它隔离了复杂产品 对象的创建和使用,使得相同的创建过程能够创建不同的产品。若几个 产品之间存在较大的差异,则不适用建造者模式面向对象里的建造者模式,对于C语言,就无需这么复杂了。比如用C构建一个网络数据包,需要构建Dmac域,smac域,长度域,IP等各层头。如果代码写在一个函数里,那么会很长很复杂。可以把...
2019-07-23 13:30:40 168
转载 设计模式的C语言应用-适配及系列模式-第六章
模式介绍:适配系列模式在《设计模式》中提出的23种模式,其中适配器模式(Adapter),装饰者模式(Decorator),代理模式(Proxy)都属于原始功能到目标功能之间的桥梁。在面向对象里的设计里,这3种由于类的继承等面向对象特性,有比较明显的不同。在C语言里这些区别明显减弱,而且在实际的开发中,也没有这么多约束,所以统称为适配系列模式。以下引用设计模式的一些定义和说明。适配器模式A...
2019-07-23 13:28:23 117
转载 设计模式的C语言应用-命令模式-第五章
模式介绍:命令模式(command)命令模式的解释如下:向对象发送一个请求,但是并不知道该请求的具体接收者是谁,具体的处理过程是如何的,只知道在程序运行中指定具体的请求接收者即可,对于这样将请求封装成对象的我们称之为命令模式。所以命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。同时命令模式支 持可撤销的操作。 命令模式的C语言实现也是非常显性的。...
2019-07-23 13:27:29 141
转载 设计模式的C语言应用-观察者模式-第四章
模式介绍:观察者模式(Observer)观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新。在这里,发生改变的对象称之为观察目标,而被通知的对象称之为观察者。一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,所以么可以根据需要增加和删除观察者,使得系统更易于扩展。图表 1观察者模式流程图观察者模式在C语言里也是实现...
2019-07-23 13:25:22 135
转载 设计模式的C语言应用-责任链模式-第三章
模式介绍责任链将需要触发的对象组成一条链,发送者将请求发给链的第一个接收者,并且沿着这条链传递,直到有一个对象来处理它或者直到最后也没有对象处理而留在链末尾端。图表 1责任链模式流程图责任链在C语言里也是实现形式非常明显的模式。最典型的责任链有linux内核的中断处理机制的纯软件部分和内核网络netfiler的HOOK机制。这两者均强化了责任链机制,重点在引入了责任优先级方法和增加了通过/...
2019-07-23 13:22:49 253
转载 设计模式的C语言应用-状态机模式-第二章
模式介绍状态(state)模式是C语言实现相当常用的模式,也是能够在C语言***现出来的最显性的模式之一。在面向对象里,状态模式允许一个对象在内部状态改变的时候改变其行为。状态用法很多,最常见的是状态机,分为无限状态机和有限状态机。有限状态机 finite-state machine, FSM, 输入集合和输出集合都是有限的,并只有有限数目的状态。 一...
2019-07-23 13:20:29 202
转载 设计模式的C语言应用-导言-第一章
【摘要】 软件编写模式是开发过程中的重要经验总结。灵活运用设计模式,一方面利于我们编写高质量的代码,另一方面也方便我们对代码进行维护。设计模式最开始是针对面向对象语言提出的。经典的书如《设计模式:可复用面向对象软件的基础》,《java与模式》。《设计模式》的作者俗称”GOF”, gang of four,书中从面向对象的设计中精选出23个设计模式,这个也成了后来设计模式的范例。C语言设计模式的...
2019-07-23 13:18:40 288
转载 单片机的非OS的事件驱动
Part 1 前言 很多单片机项目恐怕都是没有操作系统的前后台结构,就是main函数里用while无限循环各种任务,中断处理紧急任务。这种结构最简单,上手很容易,可是当项目比较大时,这种结构就不那么适合了,编写代码前你必须非常小心的设计各个模块和全局变量,否则最终会使整个代码结构杂乱无序,不利于维护,而且往往会因为修改了某部分代码而莫名其妙的影响到其他功能,而使调试陷入困境。 改变其中局...
2019-07-19 13:02:29 1733
原创 一种的STM32的应用喂狗方法
喂狗结构体:typedef struct{ uint32 last_update; /**< Time of the last system monitor update */ uint32 longest_permitted_delay; /**< Longest permitted delay between checkins wit...
2019-07-19 09:27:02 3103
转载 linux c进程监控
【转载,原文地址:https://blog.csdn.net/MINGTING1323/article/details/81906216】我们经常需要实现进程监控,如果某一进程异常退出或是跑飞则立即重启。通常使用的有2种方法:一.supervisor来管理进程。二.自己写程序来监管。对于1而言,有些文件系统中不支持,需要移植安装。对于2而言,不少都是单独写个监管程序,通过写入文件PID定...
2019-07-18 14:54:57 1168
原创 胶囊咖啡机温控算法
需求:胶囊咖啡酿造从常温水或者冰水,经过锅炉加热,出来的咖啡满足82°~88°。本文算法无论对常温水或者冰水都有很好的适应性,可以动态的调节加热输出功率。输入参数:1.锅炉温度T1;锅炉温度采样NCT的AD值做线性化,转化为实际温度值。2.水流的速度V;水泵的抽水功率决定水流的速度,由流量计来测脉冲数。输出:1.输出的加热功率P具体算法的实现整理中,后续会发出来。。。...
2019-07-18 13:23:42 865
原创 LCD点阵液晶多级菜单设计
LCD点阵液晶数据结构体,能实现多级菜单,翻页,相关控件。 typedef struct { uint8 nCurrIndex; /* current menu Index */ uint8 noKeyIndex; /* press "cancel" key and its operate */ uint8 okKeyIndex; /* p...
2019-07-18 11:54:57 3850
转载 移植 YAFFS 文件系统到 MQX(Migrate YAFFS File System to MQX)
【提示:本文资料由飞思卡尔原厂提供,非原创】YAFFS(Yet Another Flash File System)文件系统是专门针对 NAND 闪存设计的嵌入式文件系统。在 YAFFS 中,文件是以固定大小的数据块进行存储的,块的大小可以是 512 字节、1024 字节或者 2048 字节。这种实现依赖于它能够将一个数据块头和每个数据块关联起来。每个文件(包括目录)都有一个数据块头与之相对应,...
2019-07-18 09:32:41 268
原创 MPC8309 WDB调试笔记
1.打开workbench,点击Target/New Connection2.选中Wind River VxWorks 6.x Target Sever Connection,点next在Backend下拉框中选中wdbrpc, 在Target name/IP address输入开发板的IP地址,例如192.168.0.100,必须和PC在同一个网段。点击select,出现如下界面,选中M...
2019-07-18 09:22:25 438
原创 Vx6.6仿真环境的搭建和运行
1.新建工程,选Wind River Workbench Project,如下图。2.点击后出现下图的界面,选中Wind River Vxworks 6.6。3.点击下一步,并选中System image,如下图。4.再下一步,输入工程名:simpc1,如下图。5.点击下一步,选中simpc,如下图。6.一直点击下一步,直到出现下图的界面,选择No。7.选中工程右键,点击B...
2019-07-18 09:17:47 908
原创 VxWorks6.7新建bootrom工程
1.将bsp包拷贝到Workbench:WindRiver_6.7_custom\WindRiver_6.7\vxworks-6.7\target\config目录下;2.打开workbench,点击File/New/VxWorks Boot Loader/BSP Project。3.输入工程名,点击next,在BSP下拉菜单里选择come8309_v67,在Style下拉菜单选择Uncomp...
2019-07-18 09:02:45 783
原创 VxWorks6.7新建应用工程
1.打开workbench,点击File/New/ VxWorks Downloadable Kernel Module Project2. 输入工程名,点击next,交叉编译工具链选择PPC603diab3. 选中工程,点击右键,选中Properties,加入编译选项-Xcode-absolute-far...
2019-07-18 08:59:46 878 3
原创 VxWorks6.7新建内核工程
1.将bsp包拷贝到Workbench:WindRiver_6.7_custom\WindRiver_6.7\vxworks-6.7\target\config目录下;2.打开workbench,点击File/New/VxWorks Image Project,3.输入工程名,点击next,在BSP下拉菜单里选择come8309_v67(第一次拷贝BSP后有可能需要重启软件才能识别)。...
2019-07-18 08:58:04 725
原创 MPC8309调试笔记
1 网络驱动注意点:1.1 phy物理地址。1.2 MII、RMII。MII配置UCC的RX、TX时钟RMII配置UCC的TX时钟1.3 时钟配置(CMX Registers)。1.4 MII 晶振 25M,RMII 晶振 50M2 MPC8309只有1个GTM3 烧写MPC8309-TWR板程序,BMS = 1norflash最开始地址处写入配置字,最后1M开始地址处写入程序。...
2019-07-18 08:47:29 1423
转载 Flash存储器磨损均衡原理及实现
转载,原文地址:https://blog.csdn.net/csdliqi/article/details/80361163背景现在嵌入式开发使用的存储器时逐渐都直接使用Flash,原因是Flash价格便宜,空间大,内置,直接使用不需要再加其他存储外设。但如果直接用操作EEPROM的方式来使用Flash会带来一些问题,主要分为两类:a.使用寿命,b.读写速度。EEPROM可以单字节读写,而...
2019-07-17 18:27:47 992
原创 一种用于无线水气表的同步唤醒及快速抄表算法
图1 通用的周期唤醒数据收发原理图电池供电的无线系统中,为了尽可能的降低功耗,大部分时间无线表都处于休眠状态,这时产生一个问题:如果网关需要随时唤醒无线表,那该怎么办呢?答案是,设计一种优秀的“唤醒下发算法”,即采集器和无线表约定在一些时间窗口期通信。本文采用的无线芯片是由Semtech开发的具有LoRa调制方式的SX1278。通常的做法是发送方的前导码长度要大于接收方周期唤醒的时间(如5秒...
2019-07-17 18:13:23 278
原创 STM32串口中断收发的应用接口设计
数据环形缓冲区:#define FIFO_BUF_SIZE 512 //必须是2的幂次方#define FIFO_BUF_SIZE_MASK (FIFO_BUF_SIZE - 1)typedef struct{ uint32 head; //头指针 uint32 tail; ...
2019-07-17 17:28:12 265
原创 移远M26通信模块TCP连接服务器的C语言设计
C语言AT指令数据结构体设计typedef struct{ uint16 try_cnt; /**< 最大尝试次数 */ uint16 timeout; /**<延时时间ms */ const char* patc; /**<AT发送的指令*/ const char* pecho; ...
2019-07-17 14:33:57 1260
原创 一种基于分层设计的小家电控制板通用程序框架
本文设计了一种基于分层设计的小家电控制板通用程序框架。分层设计有以下优点:(1)降低系统复杂度。由于每层都是相对独立的,每层可以单独实现。(2)隔离变化。通过分层设计,可以把变化的部分独立出来,让它们的变化不会给其他部分带来大的影响。(3)具有良好的程序可移植性。(4)具有良好的程序可维护性。本文的程序框架以市电过零中断20ms,作为程序运行的滴答时钟。在主循环里每到20ms,执行一次,...
2019-07-17 13:02:39 1120 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人