![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式开发
文章平均质量分 83
龙赤子
15年开发猿,linuxer,分享经验,获得快乐. LCCZ_QRS
展开
-
再探再报 除 0 这件事有不同
你在实际开发中有没有遇到怀疑机器的问题?其实静下心来仔细考虑一番,一定有不同的收获原创 2024-03-10 12:24:26 · 498 阅读 · 0 评论 -
技术回锅:从起点到起点
从技术的方向来看,其实其他领域也是类似的,很多人进入好大学,找到好工作,沉淀很多年,最终 可能 或 甚至才有机会 在某些大型系统中充当拧螺丝的角色。技术人员突破一个个瓶颈的过程,不得不让人感叹,科技世界没有灵丹妙药,有的只是有心人的坚持,怕的也是有心人的坚持。最近也有机会看了很多国外的一些产品研发介绍,再加上小时候了解的那些科学家的故事,更加坚定了上面的看法。这是疫情后的第一个高考和第一个毕业季。每当一个个新成果点燃内心的火热激情后,我们需要更加清醒的认识到:坚持初心,脚踏实地,才能走的更稳,走的更远。原创 2023-06-10 22:31:00 · 85 阅读 · 0 评论 -
Android实例仿真之三
继续看看Android实际是如何做框架的原创 2023-02-19 21:54:32 · 851 阅读 · 0 评论 -
Android实例仿真之二
从零思考如何构建一个如同Android的框架原创 2023-02-19 21:22:51 · 694 阅读 · 0 评论 -
Android实例仿真之一
从另一个角度来看Android系统原创 2023-02-19 21:06:23 · 501 阅读 · 0 评论 -
17 参考书目
整个博文系列的参数书目。原创 2022-12-04 17:48:30 · 306 阅读 · 0 评论 -
7.7 网络(二)
不同角度介绍操作系统中的计算机网络原创 2022-12-04 12:46:10 · 608 阅读 · 0 评论 -
7.7 网络(一)
从不同的角度介绍网络相关的基础知识原创 2022-12-03 23:07:08 · 751 阅读 · 0 评论 -
7.9 用户接口
简要介绍用户接口(系统调用)的概念及实现原创 2022-11-24 20:54:58 · 852 阅读 · 0 评论 -
7.10 操作系统的启动
操作系统启动,指令搬移,应用加载原创 2022-11-06 21:34:13 · 417 阅读 · 0 评论 -
7.8 显示管理
关于GUI显示系统的简单介绍原创 2022-11-06 10:03:54 · 455 阅读 · 0 评论 -
7.6 驱动框架
简要介绍驱动是什么以及LINUX里的驱动框架实现原创 2022-11-05 15:00:13 · 1043 阅读 · 0 评论 -
7.5 文件系统
简要介绍文件系统的基础概念。原创 2022-10-07 21:53:16 · 682 阅读 · 0 评论 -
7.3 进程管理之暂停、归档和策略
整理进程管理内容原创 2022-09-25 21:43:44 · 971 阅读 · 0 评论 -
软件架构及几种典型框架
什么是软件架构?什么是软件框架?很多时候,我们常常会混用架构和框架这两个词。实际上,广义上的架构和框架在概念上有很大的不同,架构给人的感觉,包容上更大,所以实际上架构是包含了框架的概念的。广义的架构应为一个系统的架构,不仅仅涉及软件中的技巧,更有系统的观念与视角在其中;不仅要考虑代码的因素,更要布局非代码的因素;不仅仅有技术的内容,更有管理的内容在其中。而为了便于讨论,这里的架构很多时候是指狭义上的纯技术上的架构,我们根据表达需要,将其与框架混用。就单纯的框架而言,其核心是抽象。抽象就是统......原创 2021-08-11 21:44:51 · 17638 阅读 · 9 评论 -
软件-进阶-产品-突破自我
一 一些感受对于大型软件系统,如何能够更好的掌握其运行过程?这个问题的答案,更多的时候是只能意会,而无法言表的。就像许多伟大的设计,有时候就是灵感的迸发,并没有那么多为什么。如果非要表达出来一些什么,那我想应该是,脑海中对软件的构建运行有一个联系实际的硬件和部署的立体的结构,简单说就是有一份素描。它能够帮助程序员更好的理解当前程序的运行,从而更快的得到问题的解决方案。我们知道写文字需要热身。比如,经常会有这种感觉,一口气阅读某一方面很多的内容,就感觉对该方面不仅知其然还知其所以然。...原创 2021-03-07 22:16:16 · 232 阅读 · 0 评论 -
谈谈如何阅读源码
本文以开源代码阅读为例,谈谈如何阅读代码,尤其是大型系统,包括如何快速入手,如何高效处理。可展开为代码阅读方法;软件调试方法与技术技巧;软件优化方法与技术技巧。相关内容后续补充。首先,达成三点认知:1 人脑可处理的信息量是有限的,而程序包含的信息很容易超出人脑的处理限度。迪杰斯特拉名言,关于10的9次方说法。2 人需要对事物从抽象、层次、结构不同角度认知,这是大脑的特点。3 人的时间和精力都是有限的,现代大型系统很容易就触及百万行级别,所以需要掌握方式方法,而不...原创 2021-01-16 22:51:35 · 379 阅读 · 1 评论 -
开源之我见
现在很多产品,包括很多有名的商业产品中,都可以看到开源软件的影子。自己的工作也常离不开使用开源软件,包括直接使用成品亦或者集成源码到自己的产品中。但是一段时间下来,发现开源并不如想象中那么的花枝招展,要想将其握在手心成为摇钱树,是需要代价的。这其中的关键,我认为是人的能力。开源软件已经非常普及。说到软件开源,可能很多人的大脑中都会浮现出一些常见的开源软件。大到操作系统和平台,比如Ubuntu、Android、各种前端后端的框架;小到各种各样的小工具,那就更不胜枚举了。软件领域的各个行业领域,各个...原创 2021-01-10 13:58:06 · 141 阅读 · 1 评论 -
7.4 Step by step之虚拟内存五
六,缺页中断机制经过前面大量篇幅的介绍,相信读者对虚拟内存的许多原理已经有所了解。不过,之前介绍的很多内容都偏向静态状态,或者是基于某一个时刻的快照。这里,我们引入一个动态问题,那就是程序运行过程中,如果某个虚拟地址没有找到对应的物理块,该怎么办?也就是映射还没建立,该如何做。这时,就需要按需加载机制登场了。在这一部分,我们对按需加载的工作机制简单介绍一下。前面已经反复强调过,基于虚拟内存机制,程序可以做到部分加载,即可执行。因为程序没有全部加载到内存中,所以必然会出现这种情况:某......原创 2022-05-08 22:21:19 · 443 阅读 · 0 评论 -
7.4 Step by step之虚拟内存四
五,空间与地址转换有了前面的地址空间概念后,在这一部分,我们来具体看看,如何去做一个优雅的映射,将不同的地址空间关联起来。在前面部分,我们了解到,一个程序编译、连接后形成的地址空间是一个虚拟地址空间。但是,程序最终还是要运行在物理内存中,因此,应用程序所给出的任何虚地址最终必须被转化为物理地址,即虚拟地址空间必须被映射到物理内存空间中。虚拟地址到物理地址的转化方法是与体系结构相关的。一般来说,需要借助硬件体系结构所规定的数据结构来建立联系,常用的有分段、分页两种方式。以X...原创 2022-05-04 21:20:19 · 511 阅读 · 0 评论 -
7.4 Step by step之虚拟内存三
四 地址空间到目前为止,我们了解了虚拟内存的原理和分页原理,知道通过一种映射方式,可以实现分页内存以及进一步的虚拟内存的管理。但是,映射具体是怎么实现的,怎么工作的,目前还没有介绍。不过,不着急,在探索答案之前,我们需要先理清一些概念,也就是为解决映射问题,需要先了解的地址空间概念。这些概念,我们在前面提到映射关系时,部分已有提及。这里,我们再进一步理顺:何为地址空间,有哪些地址空间,这些空间都代表了什么?地址空间是站在不同角度看内存得出的。若站在物理内存连线这个最底层角度,那么只有一个...原创 2022-05-04 09:45:44 · 186 阅读 · 0 评论 -
7.4 Step by step之虚拟内存二
前面讲了虚拟内存的概念。这一部分接着讲分页机制。三 分页机制通过上面所述,我们了解了片段的换入换出,但是并没有提到内存交换的单位,也就是片段的大小。到底一次交换进来或者交换出去多大内存片段比较合适,是一K一M还是几M?是要固定还是可以变化的等等。在实际中,为了管理方便,这个大小首先是固定的。可以感觉到,如果大小不固定,实现的复杂度将成倍增加,因为系统得仔细记住每一个片段的大小。这样一来,为表述不同片段大小所使用的字段也变得大小不定,这对硬件实现来说,非常的不利,几乎很难实现,而如果通过软...原创 2022-04-23 20:35:40 · 306 阅读 · 0 评论 -
7.4 Step by step之虚拟内存一
前言:可以说,与计算机行为相关的任何分析,都离不开内存。因为程序就是在内存中运行的,所以内存相关的分析、讨论可能在任何一部分都涉及到,很难完全独立出来。这里只是相对集中的讨论内存管理,在其他模块相关部分也还可能涉及到,需要读者注意。一,综述前话:内存是个神奇的模块。很多难以想象出的软件功能,只要跟内存关联起来,你就可以大概猜出其中的原理,即使不能了解原理,你也不会再为单纯的不可思议而感到惊奇了。就拿显示来讲,只要将其跟显存关联起来,就容易理解多了。内存管理是操作系统设计中非常重...原创 2022-03-27 21:00:34 · 317 阅读 · 0 评论 -
从俄罗斯套娃看程序的扩展
为什么要讲大程序的构成与扩展?主要是实践的需要。因为但凡是有一定用处的软件,在工程实践中,大多都非一个模块所支撑。有几个到几十个动态库、静态库,都是很正常的,也是在所难免的。关于静态库与动态库的编译和连接,以及它们的优劣,在前面介绍了很多,这里就不再重复。库的方式,不单单在节省系统存储和内存上有很大优势,而且,在模块化协助方面,也是有很多用处的。比如,将一些功能相对独立的模块,编译为动态库,然后配合头文件,既可以提供给企业内部,作为隔离;也可以提供给外部,进行集成。这样可以避免核心代码外泄,便于商业应用。而原创 2022-03-20 19:47:55 · 275 阅读 · 0 评论 -
程序的构成之三
(接上文) 第四种补充情况,所有段都加载吗?继续回到可执行文件中,除了上述实实在在需要参与运行的辅助段外,可执行文件中还存在一些non-Allocable的段,它们只是被链接器、调试器或者其他类似工具所使用,而并非参与进程的实际运行。比如字符串表.strtab,符号表 .symtab等等。当运行最后的可执行程序时,加载器会加载那些Allocable的部分,而non-Allocable的部分则会被继续留在可执行文件内。所以,实际上,这些 non-Allocable 的段都可以被我们用s...原创 2021-08-28 20:14:14 · 112 阅读 · 0 评论 -
程序的构成之二
(接上文)下面再考虑扩展情况下,所需要补充的段节,即第三种补充情况。实际代码的工程实践中,有很重要的一点,那就是成果共享。我们所编写的每一个程序,每一个软件,可以说,都不是一个人或者一个团队完成了所有的接口和模块的功能。这就像造车,造车厂并不是说小到每一个螺丝,都是自己设计,自己生产。一方面,这并不是最好的选择;另外,现在各种系统越来越庞大,导致分工也越来越细,一个企业已无法做到大包大揽。让专业的人做专业的事,这是业界共识。软件产品也是类似。除了操作系统提供的系统服务接口外,一款软件产品,还...原创 2021-08-28 20:10:31 · 266 阅读 · 0 评论 -
程序的构成之一
一 可执行文件要包含哪些东西从基本原理出发,我们看程序要包含哪些东西。就是说,不管是什么系统,程序都要包含的一些基本内容。为了分析方便,我们引入两个概念,就是程序的静态形式和动态形式。这里所谓一个程序的静态形式,主要指的是程序以可执行文件的形式存在。从根本上来讲,是否以某种可执行程序文件格式存在,并不是必须的。因为从机器运行角度来讲,只要是机器码,只要存在一个放到内存的通道,那就可以放到内存里,由CPU来执行。所谓的格式,也是人为设定,由指令来解释的。所以,从最本质的根子上讲,程序主要还...原创 2021-08-28 19:51:17 · 433 阅读 · 0 评论 -
程序的运行视图
在上一部分,介绍了可执行文件的形成,以及可执行文件中都有什么东西。从CPU角度来讲,我们是用内存中的编译和链接程序,对磁盘上的工程文件进行处理,这种处理本身是在内存中完成的。处理完成后生成一个可执行文件,将其存放到磁盘上。对于大工程,最终可能会生成多个文件,比如还有各种库和资源文件。通过如此的编译加链接过程,代码最终完成了华丽转身。在这一部分,我们就来看看,转身后的代码,是如何布局到内存中并动态变化的,即程序完整的加载和运行的过程,包括加载器如何将磁盘上的可执行相关文件加载入内存,以及程序在内存运转过...原创 2021-08-24 19:29:38 · 2683 阅读 · 0 评论 -
架构思考之痛
架构这个问题,在还没有整体接触系统前,未曾考虑;在知识面还不够广时,未曾考虑;在没有见过或者听过更多产品形态时,未曾考虑;在理论重于实际前,未曾考虑;在具体大于抽象前,未曾考虑;在细节重于模块前,未曾考虑;在知其然未知其所以然之前,未曾考虑;在重部分而轻整体前,未曾考虑;未毕业之前,重在学习,因为知识面还不够。此时,很多东西还是模棱两可,不足以探讨架构问题。在此阶段,不断的学习理论知识,很多新鲜的术语不断灌入耳中,也导致很多东西一知半解,或者知其然而不知其所以然。也有很多时候,突然觉得对某...原创 2021-08-13 22:18:45 · 178 阅读 · 0 评论 -
7.2 中断
中断技术使得CPU具有了分身之术。中断是计算机的一个重要模块。CPU被设计按照顺序来执行指令,所以,CPU总是自动读取下一条指令来执行。这样就产生一个问题,当CPU在执行内存的一个长时间运算程序时,我想放入一张光盘,获取资料,该怎么办?或者想打印一份文档呢?是不是需要等待运算程序执行完成才可以?又如果想要运行另一个程序呢?是不是也需要先等待?然而现实情况并非这样。当我们想读取光盘内容时,随时都可以打开光驱,放入光盘,然后就可以查看光盘里的内容了。当我们想打印文件时,也只需要将打印纸...原创 2021-08-06 13:26:11 · 168 阅读 · 0 评论 -
基于多进程架构的嵌入式软件框架研究与实现
摘要:本文针对中高端嵌入式软件产品的开发,提出了一种多进程的开发框架。使用该框架,可以实现多人并行开发,加快产品开发周期,提供产品稳定性,是一种有益的尝试。关键字:框架 多进程 嵌入式软件0 引言伴随着计算机软件技术的发展,嵌入式软件开发也在不断的变化更新。软件的发展离不开硬件的进阶。从早期的51单片机到高性能的dsp芯片再到当今基于ARM的高性能soc芯片遍地开花,嵌入式硬件的发展经历了快速化高性能化低功耗化,普适化,多核化发展,甚至当今部分soc芯片的性能已远远高于早..原创 2021-08-05 22:04:22 · 1091 阅读 · 2 评论 -
7.1-操作系统也是程序
这个标题看着是不是有点奇怪?操作系统当然是程序了,这还用得着再强调?操作系统是程序这个命题的确再正确不过,但是仔细考虑考虑,你就会觉得这其中还是有那么一点不顺畅的地方。有没有想过这样一个问题,第一个操作系统是怎么编译出来的?第一个编译器呢?我们知道,有了编译器后,可以编写程序,由编译器将其转成机器码,供加载运行。那往前推,编译器本身也是一个程序,也需要编译后才能运行,之后才能编译其他程序。这样一来,编译器又是由谁来编译的?是不是有点诡异了?可以肯定的一点,编译器不是用机器码写的,也是需要编译的。这有点...原创 2021-03-10 19:05:21 · 424 阅读 · 0 评论 -
7-操作系统基础
从这部分开始,我们将主要以Linux为基础,为读者介绍操作系统的部分基础设计逻辑。通过这部分内容,读者将看到一个不同的操作系统,一个更加形象,更加生动的操作系统。在前面几部分,我们尝试从软件需要的逻辑角度,模型化了计算机的各个硬件模块,并最终进行了整合。那些模型图及其传递的抽象思想将在这部分以及后续部分频繁的出现。可以说,之前是学,到这部分则是用了。不论从任何角度来看,操作系统都是一个庞大的软件,它完成了对硬件的封装,简化了对资源的使用,提高了设备效率,丰富了产品应用。可以说,没有操作系统,...原创 2021-03-08 21:59:10 · 153 阅读 · 0 评论 -
0-嵌入式开发总结之--序言
如同盘古开天辟地创世一样,一群聪明的大胡子们,创造了计算机,从此,创建了一个新的世界----基于计算机网络的虚拟世界。这个虚拟世界的发展,就如同现实世界一样,慢慢的将触角深入我们生活的方方面面。可以说,现在人们的生活已经离不开计算机的虚拟世界了。突然想到,春节档《刺杀小说家》可以出个姊妹篇,叫《刺杀程序员》好了。计算机可以说是近代以来最伟大的发明。从工业革命开始,我们的社会就进入了快速发展的阶段。但是随着计算机革命的兴起,我们的社会则进入了飞速发展的信息化阶段。现在的社会可以说是一个信息社会...原创 2021-02-17 17:58:10 · 190 阅读 · 0 评论 -
6-嵌入式开发总结之--整合模型
在前面几部分里,我们对计算机的CPU、内存、磁盘、显示及外设几个模块进行了介绍,并进行了建模。不过,所有这几个模块都是独立介绍的,它们之间的关联虽有提到,但都是零星的一两点,难以对整个系统的整体协作有清晰完整的认识。所以,在这部分,专门讲述如何将这几个模块进行整合。要进行整合,第一个不得不提的就是,计算机里上面介绍的这些模块的联络方式。说白了,就是信息怎么在这几个模块间传输流动。如果不能解决这个问题,也就谈不上整合了。我们在前面部分提到过,CPU通过地址访问内存数据,通过地址访问外设,这其实...原创 2021-02-17 16:08:42 · 432 阅读 · 0 评论 -
5-嵌入式开发总结之--外设模型
这一部分对外设模块进行建模。在计算机大家庭里,外部设备可谓丰富多样。从键盘鼠标这些最基础的设备,到有线网络、无线网络、USB、蓝牙、打印机等等。不同的外设,它们的功能,外观差别都很大。而且,随着技术的发展,一些外设被淘汰,新的满足需求的设备又不断的加进来。所以,要想在这里对它们来个完全介绍,困难有点大。不过,我们还是可以对外设建立一个统一的模型。站在操作系统的角度,外设对其而言,最直接,最直观的表现,就是驱动。通过驱动封装操作外设的接口,提供给上层应用。不同的设备,需要不同的驱动适...原创 2021-02-17 11:30:05 · 438 阅读 · 0 评论 -
3-嵌入式开发总结之--磁盘模型
磁盘模型(外存模型)是相对于内存模型而言。不同于内存,外存的种类比较多,有磁盘、FLASH、光盘等,而且工作方式差异也比较大,每一个细致介绍不合适,况且外设有许多相似特性,所以这里就典型的以磁盘为例来介绍。那么首先,磁盘是什么东西?磁盘也是存储信息的地方,不过,不同于内存,磁盘断电后数据不丢失。但是读写磁盘速度,要远远低于内存,所以CPU直接跟内存打交道,必要时才从磁盘读写数据。即使读写磁盘,数据也是先转存到内存,然后由内存转存到CPU(读)或磁盘(写)。这里的内存即为我们常说的...原创 2021-02-16 22:14:38 · 484 阅读 · 0 评论 -
2-嵌入式开发总结之--内存模型
内存可以说是整个计算机系统的记忆中枢,是计算机系统的核心部件,是存储0101这些二进制信息的地方。没有内存,程序就无法运行。因为CPU要从内存获取指令和数据,执行结果也要保存到内存中,就是说程序的指令和数据都加载到内存中,才可以运行。如果说CPU是大脑,那么内存就像是一块黑板,需要时可以放各种临时数据、结果,而且可以根据需要随时擦除,换上新的数据。如果要用模型来简化内存,可以用下图来表示: ...原创 2021-02-15 20:47:38 · 263 阅读 · 0 评论 -
4-嵌入式开发总结之--显示模型
俗话说,百闻不如一见。听百遍不如看一遍,可见,直观的看到,对我们人类是多么重要。对于计算机系统来讲,显示设备充当了我们直观感受计算机运行的窗口,也是我们使用计算机离不开的部件。通过它,我们才能正常操作系统,观察到系统的运行、软件的执行,才能看电影写文档等等。也正是显示,让我们直观体验到计算机技术给我们的生活带来的五彩变化,并在一定程度上加速了计算机技术的发展。生活中,显示设备的种类有很多,比如早期的显像管显示器,现在有的超市里结账设备用的仍然是这类显示器,只不过尺寸比较小。液晶显示器,现在电...原创 2021-02-15 09:15:02 · 302 阅读 · 0 评论 -
1-嵌入式开发总结之--CPU模型
CPU这三个字母,大家都很熟悉,也都知道它是计算机的核心。CPU是中央处理器的简称,在大部分人的脑海里,它就是一小块芯片,但却异常的复杂,计算机少了它,什么都干不了。买电脑的时候,都想着内存可以加,磁盘可以扩,显示器可以换新的,唯独CPU,想着一步到位,要最新性能的,最快速度的。这从一个侧面,在一定程度上反映了CPU的重要性。CPU很复杂,这是不争的事实,那么我们该如何为其建模呢?这需要从它工作的原理出发。CPU的复杂,很多的来自于它与硬件相关的细节,如果从软件的角度,配合工作的原理出发,就可以抛掉硬...原创 2021-02-13 09:49:31 · 2266 阅读 · 2 评论