自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

嵌入式-老费,一个分享专业嵌入式知识的blog

专注于嵌入式软件系统性能优化

  • 博客(815)
  • 资源 (4)
  • 收藏
  • 关注

原创 cpu设计和实现(异常和中断)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 异常和中断几乎是cpu最重要的特性。而异常和中断,本质上其实是一回事。很多熟悉mips的朋友,应该都听过这么一个词,那就是精确异常,那什么是精确异常呢?其实意思是说,cpu在某一个阶段发生了异常之后,并不急于马上处理,而是等到了mem访存阶段来统一处理,因为说不定在运行过程中还会出现其他异常。 发生异常的阶段很多,但是wb写回阶段是肯定不会发生异常的。所以,在mem

2022-11-30 21:57:18 325

原创 cpu设计和实现(协处理器cp0)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 除了通用计算器负责控制和计算之外,cpu如果需要正常有序地运行,还需要一定地协处理器来帮助完成对应地工作。在mips下面,这样地协处理器称之为cp0。协处理器地工作一般包括这几个方面, 1)处理中断和异常; 2)处理mmu和tlb; 3)处理cache; 4)处理其他cpu的相关属性。

2022-11-30 08:44:02 339

原创 cpu设计和实现(数据访问)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在cpu设计当中,数据访问是比较重要的一个环节。一般认为,数据访问就是内存访问。其实不然。我们都知道,cpu访问一般有指令访问和数据访问两个部分。质量访问就是rom访问,这个比较纯粹。但是数据访问就比较复杂一点。因为,除了单纯的数据读取访问之外,数据访问还担负着io访问的功能。一般的外设访问都是通过ip来完成的,这些io都有自己的设备地址空间,那么cpu如何通过这些设备地址空间来控制

2022-11-29 22:58:48 285

原创 cpu设计和实现(pc跳转和延迟槽)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 cpu按部就班地去取指执行是理想情况。很多时候,cpu的pc寄存器会跳来跳去的。跳转的情况很多,一般可以分成三种。第一,绝对跳转;第二,条件跳转;第三,异常跳转。绝对跳转,很容易理解,就是不得不做的跳转,比如在主函数里面调用子函数这种就属于绝对跳转。当然,函数调用的时候还需要把返回的地址保存一下。条件跳转,这种也很常见,就是对数据进行判断后,根据结果来分析下是否需要跳转。而异常跳转,

2022-11-28 08:41:40 295

原创 cpu设计和实现(流水线暂停)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们说过,数字电路里面流水线的引入,主要是为了提高数据的处理效率。那么,鉴于此,为什么又要对流水线进行暂停处理呢?直接在某一个阶段,把所有的工作都完成不行吗?举个例子来说,如果指令在exe阶段的时候,同时需要处理乘法和加法(madd指令),那样不是也可以吗。其实,这么做,确实是可以的。但是,真的这么做的话,会大幅度降低时钟运算频率,那样会反而得不偿失了。

2022-11-27 17:33:52 610

原创 cpu设计和实现(协处理器hi和lo)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 很多同学可能不了解mips处理器,如果个人想补充一点mips cpu的知识,可以找些资料来读一下,比如《See Mips Run》。 上一期说到了,在cpu设计的过程当中,使用了数据预取的技术。它的主要思想就是,因为流水线的关系,后续数据在计算的过程当中,如果仅仅从寄存器获取数据,就有可能发生数据读取错误的情况。因为这个时候,相关寄存器的数据可能在执行、访存、写回的

2022-11-26 16:26:59 316

原创 cpu设计和实现(数据预取)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面说过了一条指令经过cpu处理的时候需要经历几个阶段。通过实验,我们发现,哪怕是再简单的ori指令也要经历取指、译码、执行、访存和写回这五个阶段。这从之前的波形图上面可以看的很明显。

2022-11-24 21:44:50 205

原创 cpu设计和实现(流水线上的第一条指令)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 读书的时候,《计算机组成原理》也看了,《计算机体系结构》也学了,老师也给我们讲了各种各样的流水线知识,但是实践的机会很少,感觉就是没有把理论转成实际的东西。工作之后,到时候有机会接触各种各样的开源代码,这里面就包括了开源cpu代码,比如openrisc(https://github.com/openrisc/or1200/tree/master/rtl/verilog)这样的。但是内

2022-11-19 14:10:30 389

原创 cpu设计和实现(取指)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 cpu设计的本质是数字电路的设计。要是没有verilog、vhdl这些语言,那么剩下来使用的方法基本只有卡诺图这一种了。在数字电路中,有两种基本的电路,一种是逻辑电路,一种是时序电路。两者的区别在于,逻辑电路随之跟着输入而变化,而时序电路只有在时钟边沿除法的时候才能变化,其他时刻都会保持这一电路。

2022-11-18 08:34:29 223

原创 cpu设计和实现(iverilog工具)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 编写verilog的工具不少。大家熟知的modelsim、quartus和vivado都可以用来编写的。前者主要是用来仿真,quartus主要用于altera芯片(现在属于intel),vivado则服务于xilinx芯片(现在属于amd)。如果不愿意破解,其实找到一款合适的工具还是蛮难的,而且简单、方便、好上手。好在开源工具有iverilog这样一款工具,windows、linux

2022-11-16 08:35:46 783 1

原创 cpu设计和实现(基础)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 差不多在20年前,也就是2002-2003年的时候,市场上关于cpu设计的书还是很少的。那个时候比较火的是各种各样的web技术,比如html、js、java web之类的。学习好web,就可以获得一份不错的工作。真正嵌入式获得重视,是开始国内有能力生产、设计芯片之后,简单的比如gd32的mcu,复杂的比如瑞芯微的rk3399等等。

2022-11-09 08:46:53 1465 2

原创 编译器一日一练(DIY系列之总结)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 和其他的编译器专栏相比较,这里的编译器只是侧重于对单一的文法进行处理。主要还是以四则运算为主。要说语法层面的话,相当于c语言里面的expression语法。虽然,这个语法的内容并不多,但是我们可以把这部分作为基础,一步一步去理解、分析、实现背后的逻辑。通过做深做透单一知识点,可以更好地去了解编译的全流程。这是这个系列和其他编译器文章最大的不同。 读书的时候,很多时候

2022-11-05 11:13:49 236

原创 编译器一日一练(DIY系列之汇编优化)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 代码地址:https://github.com/feixiaoxing/DIYCompiler/blob/master/day11/Parse1.jj 上一篇文章谈到了汇编代码的生成,但是留了一个小尾巴,那就是汇编的优化。在实际操作中,优化主要分成两个部分。一个是中间代码的优化,比如a=4*5,一般生成中间代码的时候,编译器就帮你算了;另外一种就是汇编代码的优化,

2022-11-05 06:36:29 248

原创 编译器一日一练(DIY系列之汇编输出)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 代码地址:https://github.com/feixiaoxing/DIYCompiler/blob/master/day10/Parse.jj 前面的几章,我们陆续讨论了词法分析、语法树、复杂语法树、语义分析、中间代码输出这些环节,今天终于到了汇编代码这个大结局了。很多人都认为编译器,就是把源代码编译成二进制文件。这其实是一个误会。大部分编译器的工作就是把s

2022-11-04 06:27:00 123

原创 编译器一日一练(DIY系列之中间代码生成)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 代码地址:https://github.com/feixiaoxing/DIYCompiler/blob/master/day09/Parse1.jj 说到中间代码生成,目前来说用的比较多的一个方案就是llvm。也就是说,如果把ast语法树翻译成llvm支持的中间代码,那么后端的事情就不需要自己操心了。当然,如果开发的是商用编译器,确实可以这么做。

2022-11-03 20:41:00 160

原创 编译器一日一练(DIY系列之语法树打印)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 代码地址:https://github.com/feixiaoxing/DIYCompiler/blob/master/day08/Parse1.jj 之前我们谈到了词法分析、语法分析、语义分析,但是没有讨论,如果自己写编译器的话,应该如何来调试。其实,对于编译器来说,它也是有自己的调试方法。一般来说,语法分析结束了,这个时候一个完整的语法树就

2022-11-03 05:57:25 102

原创 编译器一日一练(DIY系列之语义分析)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 代码地址:https://github.com/feixiaoxing/DIYCompiler 语义分析一般是跟在语法分析后面进行的。语义分析的内容比较广。它的输入是语法树,并且在这过程当中会生成符号表,利用符号表的意义去检测语义是否正确。记录的符号表一般有全局变量、函数名、局部变量、参数名这些。此外,除了检测符号表之外,还会检测一些关键字的合理性,比如br

2022-11-01 06:15:05 144

原创 编译器一日一练(DIY系列之复杂语法树)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 代码地址:GitHub - feixiaoxing/DIYCompiler 之前一章,我们谈到过简单语法树的构建。说是语法树,其实就是一个tree node。它的左子树是一个整数,右子树也是一个整数。所有的工作都是为了构建一个div_node。 在此基础上,大家可以思考一下,如果是一个连续的除法,这个时候应该怎么处理?一个比较容易想到的办法就是在原

2022-10-31 07:28:19 73

原创 编译器一日一练(DIY系列之简单语法树)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 代码地址:https://github.com/feixiaoxing/DIYCompiler 之前我们做四则运算的时候,用的都是数值进行计算。大家有没有思考过,其实可以用二叉树的形式,把这些语法都串起来、构建起来。举一个例子,现在有一个除法运算,如果没有语法树,那么jj格式的内容基本是这样的,​

2022-10-30 16:41:01 165

原创 编译器一日一练(DIY系列之词法分析)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 词法分析是编译原理的基础。目前来说,大部分编程语言还是以英文为主。使用英文有几个好处,这主要是因为英文的单词和单词之间是用空格分开来的,不像中文需要用词组来分割。记得读书的时候,有一个编译原理上机作业,就是编写一个词法分析器。如果是纯手工编写词法分析器,那么势必涉及到状态机的知识。然而如果使用javacc来编写,只需要描述清楚规则就可以了。 目前词法分析涉及到的分词

2022-10-29 09:08:06 732

原创 编译器一日一练(DIY系列之四则运算)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面说到了javacc,也谈到了加法运算、减法运算、加减法运算、连续加减法运算。今天正好可以说一下乘法、除法运算。大家都知道,运算里面是分优先级的。也就是说,表达式里面,如果有乘法和除法,那么先做乘除,再做其他的加减运算。 因此为了实现四则运算,我们需要先处理乘除运算,再慢慢加入加减运算。1、乘除运算 单独的乘除运算还是比较简单的,只需要把

2022-10-28 09:10:27 273

原创 编译器一日一练(DIY系列之连续加减法)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 上一篇我们说到了怎么用javacc写一个加法器的解析工具。今天继续,可以在这个基础上看一下怎么做一个连续加减法的工具。1、减法工具 剑法工具比较简单,就是在原来加法的基础之上,修改成-就可以了。我们可以看一下对应生成的Adder.jj文件,

2022-10-27 07:48:02 294

原创 编译器一日一练(DIY系列之加法器)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 过去编写编译器可以用lex和bison,其实用javacc也是不错的选择。如果使用javacc,token和语法都是放在一个文件里面的。通过javacc解析jj文件,就可以生成对应的java代码。把这些java代码编译好,就是最后我们需要的工具。

2022-10-25 14:43:44 196

原创 编译器一日一练(DIY系列之开篇)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 编译原理这门课,很多计算机专业的同学都学过。但是学的怎么样,就看每个人自己了。和操作系统、计算机组成原理、计算机网络一样,很多学校都把编译原理当成了文科、理科来学,这就大错特错了。计算机专业本来就属于工科,工科的重要特点就是理论和实际相结合。理论是原理、方法、算法,实际就是动手操作。没有实际的操作,理论是不可能领会的。 编译原理的步骤,大家都比较熟悉,就是词法分析、

2022-10-13 08:34:12 241

原创 java web开发(web 语言开发pk)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 目前web后端的开发的方式很多,就自己曾经学过的就有php、js、python、golang、c#、java这六种。另外,其实qt也是可以做web开发的,只是使用的人还比较少,使用上面也不是很方便,这里就暂时不谈了。下面按照学习的顺序说一下这几种开发方式的优缺点,供大家参考。

2022-10-09 08:42:33 306

原创 java web开发(mybatis编程)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 目前java web标准的开发模式是ssm,前面两个s就是我们熟悉的spring和spring mvc。至于m,就是今天要聊的mybatis。使用mybatis,既需要使用配置文件mybatis-config.xml,也需要把sql语句写到***Dao.xml文件中。这就是它和hibernate不一样的地方。 本文主要参考了两个链接,分别是链接1https://bl

2022-10-08 06:55:52 586 1

原创 java web开发(IDEA下的多module开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 稍微复杂一点的程序,都不会只有一个执行文件。而对于java来说,可能一个jar文件同时被web和app使用,这个时候把jar独立出来是最好的选择。所以,对于开发者而言,掌握IDEA下面的多module开发是一个重要的功能。 另外,值得注意的是,IDEA下面的project和其他IDE所说的project不是一回事。以eclipse举例,上面的workspace类似于

2022-10-07 07:37:26 469

原创 java web开发(从spring boot到spring cloud)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 spring mvc开发相比较servlet-jsp-mysql而言,是简单很多。但是它也有一个缺点,就是xml配置文件较多,比如说pom.xml、web.xml、***-servlet.xml、applicationContext.xml等等。所以在spring基础之上,为了进一步简化spring开发的流程,人们开发了spring boot。它相当于一个spring全家桶,大大简化

2022-10-06 18:32:45 1773 4

原创 java web开发(编写spring mvc下的表单处理程序)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 之前讨论过jsp是怎么把数据传递给servlet的,那么在spring mvc框架下面表单数据一般怎么处理呢?本文参考了这个范例,https://www.w3cschool.cn/wkspring/v41f1mmk.html。今天正好借着IDEA工具,实现一下这个功能。​

2022-10-06 17:01:43 347

原创 java web开发(编写第一个spring mvc)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 编写mvc并不稀奇,只要选择合适的框架就可以。那么,spring mvc是什么呢?之前,我们讨论过,spring mvc的本质还是spring,只不过在这个基础之上实现了mvc的功能。下面就看看,在IDEA环境上面开始进行spring mvc开发。部分内容参考了这个链接,https://cloud.tencent.com/developer/article/1675364,在此表示感

2022-10-06 09:19:11 388

原创 java web开发(aop编程)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 刚开始看到aop的时候,了解到它是面向切片,觉得还是挺拗口的。不知道应该怎么去理解怎么这么一个概念。后来想了一想,不如先看范例,直接从实例去理解aop或许更容易一点。 目前参考的文章来自于这个链接,https://www.yiibai.com/spring/spring-aop-examples-advice.html。从实例代码来看,aop更类似于用一种拦截器的方

2022-10-05 04:36:29 242

原创 java web开发(第一个spring程序)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 提到java web编程,好像spring就躲不开了。一般认为,spring有两个特征,分别是ioc、aop。两个英文单词的中文解释都比较拗口,一个称之为控制反转,一个是面向切面。对于刚刚学习spring的同学,其实没有必要纠结里面的技术细节,可以把学习重点放在具体的应用上面。比如,可以用spring做一到两个demo程序,验证一下spring是怎么运转的即可。 使

2022-10-04 15:48:39 317

原创 java web开发(和vue联合开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们谈到了很多次vue,也说到了vue的很多优点。比如说,vue实现了mvc中全部v的功能,也就是view的部分。这样,后端开发就变得很简单,前后端之间只要事先json数据的传递就可以了。因为在之前,我们学习了vue,也学了idea下的webapp开发,今天正好可以一起来研究下,怎么把vue和servlet开发整合在一起调试。

2022-10-03 18:20:32 521

原创 java web开发(过滤器)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 过滤器,或许换成拦截器更合适一点。看到这个词,让我想到了linux kernel里面的netfilter&iptables这个工具。一个报文从进到网卡,到软件处理完,再从网卡发送出去,这中间也同样有很多道filter。所以,报文在被处理前,ip、port、vlan这些可能都发生了改变,同样在被网卡发出去之前,ip、port、port也同样可能发生了好几次变化。java web中的过滤器

2022-10-03 13:54:24 280

原创 java web开发(mysql开发)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 选择了java作为项目开发语言,一般就不再会选择商业数据库了,比如说sql server,oracle之类的,除非是项目有特殊需求。大多数情况下,开发者都会选择mysql作为应用数据库。前面谈到了mvc中的c和v,即servlet和jsp,那么现在就应该说一说m了,也就是model。 model,美其名曰模型,大多数情况下就是数据库。而数据库本身大多数又是和业务绑定在

2022-10-03 12:55:37 486

原创 java web开发(servlet传递数据给jsp)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 实际开发中,servlet多用于controller,jsp多用于view。之前,我们谈过了怎么把数据从jsp传递给servlet,即采用form+action的方法来完成这一目标。今天可以继续讨论下,servlet如果有数据需要显示的话,改怎么传递给jsp来显示。 servlet本身显示是比较麻烦的,所以要想提高显示效率,最好还是servlet准备好数据,让jsp

2022-10-03 09:09:11 594

原创 java web开发(jsp传递数据给servlet)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 有了servlet,有了jsp,其实就已经可以做很多的事情了。比如说表单的制作等等。在实际项目中,表单、表格都是很常见的输入选项。一个常见的场景,就是客户在输入数据之后,浏览器将数据提交到后台,后台根据数据来判断是进一步跳转,还是阻止客户进一步访问。 今天,就可以利用jsp做一个简单的输入框,然后用servlet做一个消息输出页面,这样也就算了解了jsp究竟是如何把

2022-10-03 07:22:47 352

原创 java web开发(第一个jsp工程)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面两期,我们谈到了怎么进行servlet的编写。一种方法是将传统的java工程改造成servlet工程;另外一种方法就是直接利用maven创建一个webapp工程。事实上呢,如果大家观察仔细的话,可以发现系统当时其实已经帮助我们创建了一个jsp,是index.jsp。 servlet和jsp之间的关系,有点类似于controller和view的关系。servlet

2022-10-02 16:07:27 263

原创 java web开发(maven创建servlet程序)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 之前我们写了一篇文章,主要是说一般情况下怎么开发servlet。其实,用maven创建servlet工程也是非常方便的。网上有一篇文章,地址在这,https://www.cnblogs.com/happy-lin/p/14977176.html,也谈到了怎么实现idea+maven+servlet的工程开发。有部分内容借鉴了一下,大家可以一步一步尝试下。1、首先利用maven创建

2022-10-02 08:20:31 276

原创 java web开发(编写第一个servlet程序)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 之前从来没有编写过servlet程序,更没有用tomcat部署过java web程序。所以,趁着IDEA安装好、maven配置好,开始用IDEA编写第一个servlet程序。整个操作过程参考了下面这篇文档,https://blog.csdn.net/weixin_44107140/article/details/119618734。大体上,这篇文档的步骤是蛮全的,必要的地方我会加一些

2022-10-01 21:35:49 328

arm9兼容软核代码

arm9兼容软核代码

2020-12-24

png图片读取、保存代码

这是一个完整的png图片读取项目,包括了pnglib、zlib和win32工程,大家可以单步调试验证png格式的基本功能。

2012-07-08

glibc1.09的源代码内容

这里是glibc早期的版本,对大家学习libc非常有帮助,希望大家积极下载、

2011-05-21

exceptional C++

这是关于c++非常好的一本书,相信对大家十分有用!

2009-05-07

空空如也

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

TA关注的人

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