自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

思而不学则殆

探索发现

  • 博客(18)
  • 收藏
  • 关注

原创 用C实现多重继承的简单方案

继承是为了实现多态,即可以把子类当父类来用。我们一般在父类中声明接口,在子类中实现接口。所谓接口,就是一个个函数组成的集合。思路:用C实现继承很简单,子结构体内包含父结构体成员就可以了,把子类当父类来使用时只需要一次强制类型转换。那么实现多重继承呢?思路也很简单,一点就破。延用单继承的实现思路,我们还是像之前实现单继承那样子结构体内包含多个父结构体的所有成员,但我们无法像之前那样方便地利用C语言提供的强制类型转换。原因是什么?无法将所有的父都放在结构体的开头,因为一个结构体只有一个开头,哈哈。

2021-09-06 15:50:04 1273 4

原创 浅谈MCU模块化编程

浅谈MCU模块化编程软件设计,完成需求是最基本的,合格的软件还应该易维护可重用。维护意味着修改,易修改即易维护。重用意味着不改或少改,最好是不改,无需改动即使可重用。模块化编程可以有效实现易维护和可重用。国内嵌入式行业,普遍不太关注软件质量。一方面是由于,嵌入式项目体量小,业务逻辑简单。另一方面是由于过去MCU性能低,太复杂的软件对空间和时间资源的占用较多。嵌入式软件工程师很多又兼做硬件,难免无法面面俱到,代码组织能力普遍较低。写出的代码全局变量满天飞,一个函数上千行。笔者刚入职的公司就存在这样的

2021-09-03 12:44:43 773

原创 一句话设计模式实现

一句话设计模式结构型模式adapter(适配器)bridge (桥接)未完待续...结构型模式adapter(适配器)adapter继承target接口,且使用adaptee实现target接口。即adapter是target接口的特例。bridge (桥接)在抽象接口(abstraction)中包含实现接口(implementor)的指针。未完待续…...

2021-05-08 17:55:12 116

原创 设计要规避的坑(不定期更新)

设计要规避的坑一 、关于依赖和变化1.一个功能的实现如果依赖于太多的外部条件,容易导致失败2.一个功能的实现如果依赖于它将要改变的内容,特别容易导致失败3.一个功能的实现如果依赖于他将要改变的内容,而它将要改变的内容有可能会被外部改变时,一定会失败...

2021-03-19 10:46:49 76

原创 事件驱动?逻辑控制?信号槽?

事件驱动?逻辑控制?基于回调的事件驱动或者逻辑控制特点代码接口实现用法基于回调的事件驱动或者逻辑控制本文提供了一种单线程编程思路,并简单实现了该思路。受PLC编程线圈和触点概念的启发。将程序抽象理解成一条条因果逻辑,即条件和动作。当条件满足时执行动作。实现业务逻辑时只需要将条件和动作对应实现。特点1.将条件和动作关联起来管理,区别于一般的事件驱动。2.使用void指针,条件函数和动作函数都可以有参数。3.例子里使用数组实现命令表,适合MCU,也可以使用链表。代码接口/*cmd.h*

2021-03-17 00:25:41 197

原创 Px4固件upload失败问题解决

Px4固件upload失败问题解决问题描述解决方案猜测原因其他问题描述开发环境:win10下的visualbox安装的ubuntu18.04现象:使用命令 make px4_fmu-v5_default upload尝试编译下载固件。编译阶段完成。下载固件时出现飞控板无限重启且插拔USB接口无效的现象。解决方案在visualbox中配置USB筛选器时只保留名称。配置完后在 设备->USB勾选。再下载时根据提示插拔USB就可以下载了。猜测原因px4的bootload和固件uab接口信息不

2020-07-20 02:38:23 1209

原创 单核单线程下的编程要点

单核单线程下的编程要点一句话概括等待:占着茅坑不拉屎是不对的长任务:高速上不许开慢车状态机:下班了就打游戏,赢了这局就睡觉中断:老板来了提醒我凡事无绝对一句话概括多用if,少用while,用查询代替死等,尽一切可能减少大循环执行的时间。等待:占着茅坑不拉屎是不对的大部分的问题出在死等,不管你是delay(),还是等某个信号while(XX_FLAG==1),通通不行。这会造成CPU宝贵时间...

2019-10-18 17:38:13 614

原创 MDK默认链接脚本导致的问题

MDK默认链接脚本导致的问题问题背景原因解决方案问题背景我要做一个boot,我想要将APP之前的一页flash的首半字作为判断APP是否完整的条件。于是在boot中用绝对定位指令(const uint32_t IAP_FLAG attribute((at(0x8004A38))) = 0xAAAA;)对该地址进行初始化,然后在我的boot更新完APP后擦掉这一页(太粗放,未经慎重思考)。我可以...

2019-03-15 21:25:43 369

原创 用C语言实现简单的神经元

用C语言实现简单的神经元工作之余研究一下时下大热的人工神经网络,因工作原因本人对C语言使用较为顺手于是手工l新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图...

2019-01-17 11:08:54 1428

原创 SICP 习题 部分草稿

第二章#lang racket; SICP 2.17 1.18 P69(define x (list 1 2 3 4 5))(define y (list 6 7 8 9))(define (last-pair items) (if (null? (cdr items)) items (last-pair(cdr items))))(define

2018-01-31 14:05:39 163

原创 关于C的一点小感悟 持续更新

1.多用static可以少用全局变量 2.不需要被外部文件调用的函数用static隐藏 3.不便用动态分配内存的地方(单片机),可以用static在模拟的构造函数内模拟实例化对象返回指针。实际上内存已经在编译时分配(是静态的),但要注意函数的调用次数,需要调用多次时用数组(会造成内存浪费)。

2017-09-20 16:59:16 180

原创 第二次修改状态机源码

第二次修改把状态机引擎独立出来,解决函数的可重入问题,同时可以支持多个状态机。 下面贴出代码://main.c#include <stdlib.h>#include <stdio.h>#include "state_engine.h"#include "fsm1.h" #include "fsm2.h"extern struct fsm_T fsm1;extern struct fsm

2017-03-07 16:56:07 739

原创 对个geek青年的状态机,查表纯C实现的代码修改

对个geek青年的状态机,查表纯C实现的代码修改感谢杨福贵老师无私的开源精神,原文出处 http://blog.csdn.net/younggift/article/details/35848677 建议阅读原文,杨老师的讲解很精彩 下面贴出代码/*上层需要维护 1)enum state//状态类型枚举 2)enum message//消息类型枚举 3)struct transitio

2017-03-06 16:16:40 736

原创 试着用宏拼接做stm32管脚电平控制

试着用宏拼接做stm32管脚电平控制代码块//led.h#ifndef __LED_H_#define __LED_H_#include "stm32f10x.h"//#define LED_ON(n) (GPIO_ResetBits(LED_PORT_##n,LED_PIN_##n))//#define LED_OFF(n) (GPIO_SetBits(LED_PORT_##n,LED_

2016-12-07 03:10:42 954

转载 STM32的FLASH操作【转载】

**STMSTM2的FLASH操作【转载】** 说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装芯片配置、芯片ID、自举程序等等。当然, FLASH还可以用来装数据。FLASH分类根据用途,STM32片内的FLASH分成两部分:主存储块、信息块。主存储块用于存储程序,我们写的程序一般存储在这里。信息块又分成两部分:系统存储器、选项

2016-09-07 11:34:41 614

原创 C语言 宏定义相关整理

宏定义 宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译 不带参数的宏定义: 宏定义又称为宏代换、宏替换,简称“宏”。 格式: #define 标识符 字符串 其中的标识符就是所谓的符号常量,也称为“宏名”。 预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。 掌握”宏”概

2015-10-28 11:01:38 532

原创 ubuntu 用ap-hotspot创建wifi热点无法分配ip的问题解决

运行sudo ap-hotspot debug有错误提示 dnsmasq: failed to create listening socket for 127.0.0.1: 地址已在使用说明dnsmasq因端口冲突没起的来,DHCP没起来自然就无法分配ip用命令 sudo vi /etc/dnsmasq.conf  打开dnsmasq的配置文件在最后加上一行port=0同时将D

2015-06-06 23:34:50 1627

原创 cocos2d-x vs下开发部署到Android时的小问题汇总

1.症状:在vs中编译运行正常,但是运行native_build.py出现jni编译错误  解决方法:可能是由于文字编码不统一造成的。在文件高级保存选项中更改文件保存编码格式。使其统一。

2015-02-26 22:09:54 503

空空如也

空空如也

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

TA关注的人

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