自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 程序员福音!linux内核也可以看动画学习!

点击上方蓝字关注我们本文动画主题是围绕linux内存管理中的slab机制展开先看这个动画,如果您觉得还不错,希望您能多花十几分钟读完全文。内核patchlinux内核经过几十年的迭代发展,内核的已经越发复杂了,使得很多人学习起来很痛苦。如何减少学习内核的痛苦?一:追本溯源。所有的复杂事物,不是天生就复杂的,必然经过多次版本的迭代,慢慢变复杂的,那么找到其简单版本开始研究,就非常有必要了。二: 代码设计还原。在研究代码时,一定要边读代码边梳理数据结构与算法,等到弄清楚每个结构体的含义和功能,掌握算法

2021-08-16 22:30:31 171

原创 套接字和地址

导学问题:1、 IPv4、IPv6、本地套接字格式以及通用地址套接字有什么共性?2、为什么IPv4 和 IPv6 套接字需要绑定端口号,而本地套接字不用?socket套接字socket套接字的本质是一个特殊的文件描述符,通过这个文件描述符,我们可以进行数据的收发,如下图:里面的通信细节我们暂时不用关注,了解套接字的角色即可。socket 的发展历史加州大学伯克利分校(BSD)的研究人员,在 20 世纪 80 年代早期提出来了socket套接字,它的设计思想融合..

2020-07-15 02:23:47 565

原创 TCP/IP和Unix的发展轨迹

导学问题:1、TCP/IP 网络协议栈诞生于哪个操作系统?2、Linux 为什么又被称为 GNU/Linux?前言在当代互联网时代里,最重要的事物有两个: TCP/IP协议 Linux操作系统 TCP协议的由来最早的网络通信为阿帕网(ARPANET),它的通信协议为网络控制协议(Network Control Protocol,缩写 NCP),卡恩和瑟夫后来在对它不断完善的过程中,加入了分组、序列化、流量控制、超时和容错等核心机制,奠定了后来TCP/IP协议发

2020-07-15 01:35:45 622

原创 前任写的代码,真的垃圾啊

我的那些二手代码...工作几年下来,开阔了一些眼界,也积累了不少行业经验,自己参与开发的一些产品目前已经稳定运行在数万台设备上面。几年的心血还是没有白费滴,只不过在这个过程里面,数次接手了前任们的代码,一度在各种深坑中,难见天日,真是各种名副其实的"屎山"...... 直到业务需求逐渐趋向稳定后,我也开始逐渐考虑一些新的问题。首当其冲的就是关于好代码和坏代码的思考。在与人交流、讨论代码的质量时,听到的最多的评语就是:“代码写得很烂”或者“代码写得很好”。用“好”“烂”这样的字眼来描述,非常地...

2020-05-26 23:38:36 203

原创 从RTOS到Linux0.12进阶之路

近些年,RTOS在国内发展迅猛,尤其是国产操作系统RT_Thread更是隐隐成为国内RTOS一哥。随着RTOS生态不断完善,资料也逐渐齐全,相信不少工程师已经涉猎颇深。笔者也有过约两年的RTOS开发经验,对arm体系架构有一定研究,两年前曾经研读过RT-Thread/ucosiii内核,对RT-Tread常用组件的基本原理基本实现了源码级的剖析,如FS控制台、虚拟文件系统、LWIP协议栈、ulog日志、动态模块、posix接口、slab机制、AMP调度等等,受益颇深。当然也尽了自己绵薄之力,为RT-Th

2020-05-26 23:36:53 437

原创 其实,你可能不懂Hello World!

你还记得"Hello World"吗?每个程序员,在进入职业生涯的时候,碰到的第一个程序毫无疑问就是"Hello World"。相信大家对它都不陌生,但是不陌生不代表对它有足够深入的了解。今天我们就来聊一下这个带领无数人进入程序世界的"简单"程序。"Hello World"之所以简单,是简单在它所实现的功能简单,但是就是如此简单的功能背后,蕴含的却是计算机前辈们付出无数心血来为我们奠定了雄厚的根基。我们眼中也许只有"Hello World"这个简单的程序,但却常常忽略了它背后复杂的机制。当.

2020-05-26 23:34:01 159

原创 手把手教你,拿下观察者模式|c语言!

科普文,给大家介绍观察者模式的使用场合及其优缺点。模式动机观察者模式是比较常用的设计模式之一,尤其是系统里面涉及到多个复杂子系统时,经常会使用到。它就像系统里面某个子系统的跑腿,一当该子系统发生变化,它就要马上通知其他的子系统。一个经典的例子就是我们操作系统所使用到的GUI界面,当我们在GUI系统里面使用各种应用程序时,只需要用鼠标轻轻点击软件右上方的全屏/非全屏,软件里面全部的组...

2020-05-03 16:53:11 396

原创 c语言也能用模板方法模式?

模式动机在嵌入式的应用场景中,管理资源(例如文件、内存)是一件非常麻烦、非常容易出错的事情。因为在分配资源后,还必须释放资源。例如fopen()打开文件后,必须要使用fclose()来关闭文件,而使用malloc申请内存资源后,就必须使用free()函数来释放内存。在实际开发工作中,稍微对malloc不注意就会导致内存泄漏。而模板方法模式堪称预防这类低级错误的神器!场景案例场景:现...

2020-05-03 16:52:00 607

原创 c语言,去你的策略模式!

模式动机完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。简单来说,策略模式就是用统一的方法接口分别对不同类型的数据进行访问。场景案例场景:现在我们想用pc看...

2020-04-12 22:13:47 190

原创 设计模式--状态模式(C语言实现)

原创亚索老哥embed linux share模式动机状态模式(状态机)是嵌入式开发中最重要、最核心的设计模式之一,毫不夸张的说,是否熟练掌握状态模式,很大程度上直接决定了嵌入式工程师的代码掌控能力。在嵌入式开发里面,几乎80%以上的程序都有状态模式(状态机)的影子。在一个思路清晰而且高效的程序中,必然有状态模式(状态机)身影浮现。但是很多嵌入式开发者只是掌握一些很基础的状态机编...

2020-04-11 04:54:26 5379 11

原创 记录C语言面向对象的一些思考

C语言与C++的老大之争最近一直在尝试用C语言尝试写设计模式,但是陆续写了几个模式后。蓦然发现,很简单的逻辑代码,用C++/java结合设计模式,代码写得非常舒服、非常优雅。但是一旦用C语言来实现,立马变得无比臃肿。我不得不开始怀疑C语言是不是不适合潮流的发展了?花了几天的空间时间,不断地去思索这个问题。自己总结了一下,主要有这几方面原因: C++的类构造。C++的n...

2020-04-09 00:38:00 161

原创 C语言设计模式--建设者模式(C语言案例)

前言这里先插一点题外话,在C语言中,实现封装、继承、隐藏、多态等等特性,是完全没有问题的。但是在使用过程中,必定是不如自带这些特性的语言方便好用的,比如C++\java等。一旦要通过C语言来实现各种设计模式,必定会在严谨地维护类层次上造成非常繁琐和臃肿的代码。这是因为C++/java等自带一套面向对象的工具,而C语言要在代码设计中,不断地根据实际情况来创造面向对象的工具。更多深层次的原...

2020-04-09 00:30:18 263

原创 为什么说递归是码农的一道分水岭?

为什么这一篇要先写递归这种思想呢?初衷主要是因为最近在写设计模式中的组合模式。这个设计模式的实现呢,需要使用到树形数据结构,而树形结构又是天生的递归结构,所以这一篇主要是给大家打基础,顺便也从个人的一些开发经历来给大家安利一波递归。递归在码农界有这么一种说法,人理解迭代,神理解递归。在我看来,递归确实应该算是码农编程能力的一道分水岭。所谓分水岭,就是说能轻松理解递归而且灵活运用的程序员往往思维...

2020-03-25 23:55:21 473

原创 设计模式--单例模式(C语言案例)

模式动机单例模式是最简单的设计模式之一,顾名思义,整个系统中每个结构体只有一个实例存在,不能再多,否则就不叫单例。单例模式只应在有真正的“单一实例”的需求时才可使用。场景:timo和gg都是同一个公司的职员,今天需要去找老板签署文件。传统代码实现:#include <stdio.h>//定义boss的行为typedef struct BOSS{ void ...

2020-03-25 23:53:25 416

原创 设计模式--补充面向对象基础

这一篇给大家补充一些学习设计模式的基础知识,比如设计模式的哲学思想,c语言如何实现面向对象特性等等。是进一步学习各种设计模式招式的内功。设计模式的感悟中国数千年的历史文明,留给后人数之不尽的智慧。自从事编程工作以来,已经三年多有余,慢慢代码敲多了,竟然在代码中发现了一些先哲们伟...

2020-03-21 19:58:58 144

原创  GDB调试利器(嵌入式环境)

1. GDB简介在单片机开发中,KEIL、IAR、ADS1.2等集成开发环境下的调试工具对程序开发有很大的帮助, 尤其是出现各种疑难杂症的bug时,往往只能通过单步调试、堆栈查询、CPU寄存器查询、 甚至是反汇编来定位问题。同样的,在嵌入式Linux的开发环境下,也有能够实现类似功能的调试器,那就是GDB(GNU debugger)。 它是一个由GNU开源组织发布的,UNIX/LINUX...

2020-03-12 16:18:45 557

原创 设计模式--工厂方法模式(c语言案例)

设计模式–工厂方法模式一 模式动机在之前简单工厂模式推文中提到,简单工厂模式是通过唯一的工厂接口来负责所有产品的创建并初始化抽象接口。抽象接口的引入,使具体接口从主程序剥离了出来,实现了业务与细节的分离。但是它违反了开放-封闭原则,因为每添加一个新的产品,都需要改动这个唯一工厂接口,需要在里面加入if或switch分支。二 解决方案工厂方法模式就是用来解决这个问题。它将产品的创建和初始化过...

2020-02-27 08:15:30 290

原创  Git入门与剖析

Git是一个功能十分强大的分布式版本控制系统,主要用于有效、高速地对各种各样的项目进行版本管理。Git的诞生,起源于linux社区的一位大牛Andrew(samba之父)写了可连接BitKeeper仓库的外挂, 这引起了BitMover 公司的震怒,收回了对linux社区免费使用BitKeeper的授权。于是Linux之父, Torvalds,花了十天时间为Linux社区开发了新的版本工具–G...

2020-02-26 15:42:43 173

原创 设计模式--简单工厂模式(C语言案例)

设计模式–简单工厂模式一 模式动机先来看这样一个需求:这天,你的老大跟你说:“小李,公司的物料不够用了,你去嘉立创商城买一些 0805 电容回来,然后去捷多邦买点 0603 电容回来”。“好的”,于是你回到工位上准备开始干活。试想一下,如果这个场景用程序来实现,应该怎么写?从 C 语言传统的面向过程来看,应该这样写:#include <stdio.h>void login_w...

2020-02-26 03:14:42 395

原创 代码的设计图纸——UML(下)

​UML建模在工程开发中,不止程序员可以用于做软件程序设计,而且产品经理也常常使用它来做软件需求分析。它本身的语法复杂度不高,新手经过一段时间的系统练习,很快可以熟悉使用。当软件需求者和软件开发者共同遵循这一套标准时,无疑可以大幅降低沟通成本,提高生产效率。在UML建模的语法体系中,主要分为两大类的设计图,分别是结构性、行为性。在这两大类图之下又有进一步的细分,但是本文侧...

2020-02-23 16:21:00 957

原创 代码的设计图纸——UML(上)

​优秀项目代码是怎么构建出来?写一步算一步?凭空想象?回答这个问题之前,先让我们看这么一个场景:搭猪窝or建高楼大厦。搭猪窝搭一个猪窝,可以这样来操作: 根据猪体型大小,粗略计算出猪窝大概要占几平米。去生活市场购买相应数量的木块、铁锤、尺子、钉子等一些基本物料和工具。物料准备完毕后,使用铁锤和钉子,很快可以利用木块把猪窝的外形搭...

2020-02-23 12:16:37 711

原创 还在为垃圾代码发愁吗?学习设计模式吧

嵌入式工程师现状在我头两三年的工作时间里,接触过不少嵌入式工程师,对这个行业的现状有一定的深入了解。从传统嵌入式工程师的学习路径来看,大部分是从熟悉硬件手册、配置寄存器开始学习,接着在边做项目边加深学习C语言,根据项目不同,会接触一些基础算法,比如控制上的pid、多轴插补,图像处理上的滤波、分割等等。在这个阶段中,会逐渐熟悉一些硬件之间的特性差异、掌握c语言编程来实现不同功能,学有...

2020-02-20 22:22:32 183

空空如也

空空如也

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

TA关注的人

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