<嵌入式网络那些事> 笔记一

第一章

1.1 云计算的核心思想是:通过云技术将大量网络中互联的计算资源统一管理和调度,构成一个计算资源池向用户提供按需服务。

两本经典书籍:《用TCP/IP进行网际互连》《TCP/IP 详解》

1.2 OSI模型--开放式通信系统互联参考模型

ISO,提出OSI的组织;

OSI,定义了网络通信协议的层次结构、层次之间的相聚关系一集各层可能包括的任务。分为7层,由上而下分为 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

由于TCP/IP协议开发较OSI出现的早,所以并未分为7层而是分为了4层,由上而下为应用层、传输层、网络层、接口层。

网络接口层--负责网络上数据帧的发送和接收;

网络层---负责在主机之间的通信中选择数据包的传输路径,即路由;

传输层--负责提供应用程序之间的通信服务;

应用层--利用传输层提供的数据传输功能发送自己的数据到对方;

1.3 几种TCP-IP协议

uIP      :为8位16位控制器设计的非常小的TCP/IP协议栈。容量小巧;

uC/IP  :基于uC/OS操作系统一套开放源码的TCP/IP协议栈,协议栈代码容量在30-60KB;对网络应用支持不足,不能提供多种上层应用;

uC/TCP-IP:用于32和64位处理器的需uC/OS-II或其它实时操作系统支持,,收费;

LwIP     :可以有操作系统、也可以没有,开源;

------------------------------------------------------------------------------------------

第二章

2.1.1 存储器系统

ARM7用冯*诺依曼,ARM9,ARM10,ARM11用哈佛结构。

嵌入式微处理器的存储器组织结构主要分为 冯*诺依 曼和哈佛结构。

冯*诺依曼是一种将程序指令存储器和数据存储器统一组织的存储结构。将程序代码存储地址和数据存储地址共用相同存储空间,程序指令和数据放在统一存储器的不同物理位置。(指令和数据不能同时读取)

哈佛结构是一种将程序指令存储器和数据存储器分开存储的组织结构。将程序和数据存储在不同的存储空间。 (指令和数据用不同总线能同时读取)

         

2.1.2 指令系统

分为复杂指令集系统(CISC)和精简指令集(RISC)。

2.1.3 数据结构

分为大端模式(高字节放在低地址)和小端模式(高字节放在高地址)。

如:0x12345678

     

网络中的字节序采用的是大端模式,即先发送x12。

ARM工作模式分为7中模式:用户模式、快速中断模式、普通中断模式、管理模式、中止模式、未定义指令模式、系统模式。

------------------------------------------------------------------------------------------

第三章

3.1.1 编译器中特殊的关键字--—— _asm、_inline、_irq、#pragma、register、volatile 、_weak

#pragma----用来控制编译器的编译特性。格式:  #pragma  [no_] feature-name        ([no_]  关闭)

_asm      :告诉编译器下面的代码由汇编写成;

_inline    :告诉编译器在合适场合下,可以将该关键字声明的函数在其它调用地方展开,以达到代码执行效率最优化;

_irq       :声明一个可以被用作irq或fiq的异常中断处理程序的函数;

register  :最好将该数据保存在寄存器中,经常使用;

volatile  :该数据可能在程序其它地方被修改,使用前重新对变量进行读取;

_weak   :限定一个对象,若连接时对象不存在,也不会报错;

3.1.2 映像文件结构

一个目标文件由RO段、RW段、ZI段组成。

RO段-只读段,代码和只读的数据;

RW段-可读可写的数据,在程序运行前已经被初始化为非0值;

ZI段-可读可写的数据,在程序运行前未被初始化或已经被初始化为0;

3.1.3启动代码完成的工作

两方面:一、初始化执行环境如中断向量表、堆栈、I/O等;

二、初始化C库和用户应用程序。

第一阶段完成

               

------------------------------------------------------------------------------------------

第四章  uC/OS-II

                    4.1.1  与系统移植相关的是OS_CPU.H、OS_CPU_A.C、OS_CPU_A.ASM三个文件;

OS_CPU.H     :完成操作系统使用的数据类型的定义;

OS_CPU_A.C  :与处理器平台相关的C源码;

OS_CPU_A.ASM   :包含与处理器相关的汇编源码,主要用于任务切换和系统开关中断你的实现。

4.1.2   与操作系统配置和使用相关的是 OS_CFG.H   、INCLUDES.H;

INCLUDES.H :操作系统的主要头文件;

OS_CFG.H     :操作系统的配置头文件;一、系统各个模块的开关,用于剪裁,二、定义一些常数;

uCOS-II.H    :包含所有资源和全局变量,结构的定义。

4.1.3   uC/OS-II 最多可管理64个任务,64个优先级;

任务控制块的数据结构:

4.1.4 任务堆栈

用户创建任务时,需要提前为任务分配堆栈空间。

为了定义数据栈的需要,需要定义一个OS_STK的数据类型,该类型描述了堆栈中每个数据的长度。

如用:    typedef     unsigned int      OS_STK;

移植时需在文件OS_CPU.H中定义宏OS_STK_GROWTH,表示堆栈的增长方向,1-向下,0-向上。

OSTaskStkint --初始化堆栈的函数;

4.2.1 移植uC/OS-II

移植者需要编写三个文件,如下:

由于操作系统要求的两个开关中断函数 OS_ENTER_RITICAL()[进入临界区时关中断]和 OS_EXIT_RITICAL()[退出临界区时开中断] ,以及三个任务切换相关的函数OSCtxSw(),OSIntCtxSw() 和OSTickISR()都涉及对处理器内部程序状态寄存器CPSR的访问和更改,所以操作前必须处于特权模式,普通用户模式下无法访问;另外一种方法,是将系统和用户代码都运行于用户模式下,然后上面五个函数使用软中断方式实现,在发生中断后进入特权模式。

4.2.2  编写OS_CPU.H

该函数主要完成操作系统使用的内部数据类型、常数、宏定义,与处理区平台密切相关。

       

1~7行定义系统内部数据类型;

8~9行定义两个浮点数据类型;

10行定义堆栈数据类型OS_STK;

11行定义保存程序状态寄存的数据类型OS_CPU_SR,只有定义了18行为3时才会被系统使用;;

12-17行声明6个外部文件os_cpu_a.s中定义的函数;

18行定义系统进入临界代码前后,开关中断的方式;3个值对应三种方式。

4.2.2  编写OS_CPU_C.C

该文件包含完成任务堆栈初始化函数OSTaskStkinit()及其它9个用户Hook函数的编写,

如下为任务堆栈设计的一个结构,任务的创建、运行、切换都必须按这个结构。

R0-R12为任务运行时的临时寄存器;  LR为连接寄存器 ;

PC为任务执行时的代码地址; CPSR为任务运行时的程序状态寄存器;

4.2.2  编写OS_CPU_A.s

移植者需要实现如下6个函数:

然后是6个函数的代码实现:

(1)用OSStartHighRdy()以运行具有最高优先权的任务,通过调用OSStart函数,在系统中只调用一次,

(2)OSCtxSW()

若当前任务调用系统使得更高优先权的任务进入了就绪状态,或当前任务调用系统函数自动放弃CPU的使用权,系统会调用OSSched()函数进行一次任务切换操作,核心代码如下,可以看出调用了OSCtxSW()来实现,,主要保持PC字段。

      

时间: 2024-11-06 03:08:30

<嵌入式网络那些事> 笔记一的相关文章

&lt;&lt;梦断代码&gt;&gt;阅读笔记一

没有想象中的枯燥,甚至有些有趣.这就是我对<梦断代码>这一本书的第一印象.而且,作为一本面向程序员的书籍,作者很有意义地从第0章开始,那我也从第0章开始说.这第一次读书笔记是针对0~2 章的. 首先,作者一开始就向我们介绍了程序员的真实生活:代码.日期.紧张.焦虑.这是我从书中体会出来代表程序员的词 语.我第一次感到编程可能是一件辛苦的事,回想自己编程的时候,只是歇一歇简单的短的程序,没有压力,没有焦虑,但是在真正的公司.项目中,程序员要面对的是茫茫代码以及对未来的未知,因为没有人能确定自己从

读书笔记:《梦断代码Dreaming in Code》

读书笔记:<梦断代码Dreaming in Code> 拿到<梦断代码>书后,一口气翻了一遍,然后又用了3天时间仔细读了一遍,也不禁掩卷长叹一声,做软件难.虽难,仍要继续走下去,可以把软件的范围限制得小一些,用敏捷方法等过程会使软件失败的风险小一些,毕竟我们还没有写书上所说的那样的大型软件. 第0章 软件时间 一开始看到第0章并没有感觉多么奇怪,可能程序员的思维方式已经固化在大脑中了,但读到作者关于第0章无意搞笑时,也不禁哑然失笑,为什么程序员要 从0开始计数?因为计算机从0开始计

梦断代码阅读笔记有感之二

08梦断代码阅读笔记有感之二 在梦断代码的一开始我们就学会了如何去写代码,如何成功的去做一个软件工程师. 在现在人的严重,也许软件工程师写出的代码只是让人在玩游戏,在用一些简单的用代码写出的软件.只是认为工程师在不断地重复着一个动作:写代码.但我只能说你们大错特错,就像在文章中说的那样,其实软件工程师是在:“改变世界”,他们利用他们的手用键盘在电脑上打出一行一行的代码,程序产生了,一个新的软件也就产生了.而且,众所周知的,工程师做一个软件,总是在无限制的更新他的内容,让我们的软件更加的先进化,就

梦断代码阅读笔记有感之三

09梦断代码阅读笔记之三 这是最后一篇的阅读笔记,我发现时间真的过的好快好快. 想想以前,我们总是在应付一切的差事,但是真正的到最后,我们才发现,到最后吃亏的还是我们自己. 从前的我们,我们总是对自己大脑中的东西一片一片的特别的混乱.其实我们就像作者所说的,我们就像放任胡乱的cd随地的乱放,到最后不知道哪是哪.我们应该学会分类去放置,例如:我们可以根据歌唱者的名字,音乐的类型等等,其实这些东西对于我们写代码也同样的试用,刚开始的上大一时候,我们第一次的学习C++,我们只是随时随地的在写代码,并不

《梦断代码》第0章阅读笔记

通过对<梦断代码>的初步阅读,感觉以前订的阅读计划似乎并不能满足笔记的需要,因为就第0章便让我感到书中有很多话值得我去记下来,无论是将来工作或者生活或许都有点用处吧. 就像作者说的书是讲一事,也是讲百千事:是写一软件,也是写百千软件:是写一群人,也是写百千万人.读完第0章书给我的感觉没有了课本上的枯燥,有了我喜欢的故事情节,让我了解了一个程序员的真实生活与成长.第0章作为编过程的我们或许已经想到为啥不从第一章开始了吧,因为我们要记住从0开始计数. 兴趣很重要!Sumer或许就是让主角爱上编程的

《梦断代码》读书笔记 第2篇

<梦断代码>读书笔记 第2篇 第7章:细节视图 第8章:白板上的即时贴 第9章:方法 第10章:工程师和艺术家 第11章:通往狗食版之路 “读书时我喜欢上数学课——这类东西之所以能吸引我,是因为我知道自己做对了.”在书里面我找到了自己刚接触计算机时不喜欢编程可能的原因:我不知道自己是否做对了,也没有很顺利就做对的时候,慢慢地导致排斥编程,特别是一点思路也没有,或者知道这个程序将会花费我很多时间时情绪很糟糕,所以它不能吸引我.到现在,每次找到程序中不对的地方再修改正确,即使消耗很多时间,也会有一

《梦断代码》读书笔记 第0篇

<梦断代码>读书笔记 第0篇 第0章:软件时间 第1章:死定了 第2章:Agenda之魂 从老师布置这个作业之后,我便按照自己的计划开始阅读识字以来的第一本关于软件工程的小说——<梦断代码>,周一至周五每天睡前读几页. 首先,第一遍从第0章至第1章看完,我愣是不知道书上到底在说些什么,感觉这小说跟教科书一样好催眠,说实话,每次还没看多少行就困得不行了.所以,我看了第二遍(而且还寻思着再看不懂也不看第三遍了),果然,我还是没有与作者产生共鸣.不过,在再次阅读的过程中我勾画了一些给自己

梦断代码阅读笔记01

大致浏览了一下<梦断代码>这本书,觉得还是挺感兴趣的.第一章软件时间,作者以一名程序员的身份自述,故事性很强,读起来不会感觉枯燥.在第一章中作者认为程序员与其他人的不同之处在于他们从一开始,而我们从零开始,想来也正是如此,他谈了软件的发展历程以及过程中好多伟大的研究者为其发展而做的贡献,这个行业也是很多前辈付出了诸多努力才推出来的,所以需要我们付出更多的努力去发展他. 第二章中作者讲到我们做任务需要蓝图,也就是需要有计划,提前计划好,按计划来做任务,这样对于碰到一些问题才不至于举手无措,另外在

《梦断代码》阅读笔记三

这本书终于读完啦~说实话,其实里面很多东西理解的还不是很透彻,以后找机会一定会再去看.第一遍读了<梦断代码>之后,我真的觉得软件开发过程是抽象艰巨的一个事情,我们自以为很有把握,但实际上真的是很难掌控. 就比如说自己吧,之前在做程序的过程中被大大小小无数的问题折磨,碰到这本书的时候,就觉得找到知音了,原来很多问题同样也折磨着这些技术牛人们.比起软件工程的教科书,这本书更加结合实际,书里内容不是放之四海皆准的真理,也不是药到病除的良方,最多只是事实和总结. 另外这个团队的问题吧真的是一个很重要的

梦断代码阅读笔记之一

最近阅读了罗森伯格的<梦断代码>,算是近距离观察了十几年前软件开发的状态.这本书是作者对OSAF主持的Chandler项目进行田野调查  而写的一本书.本书是在讲一事,也是在讲百千事:是写一软件,也是在写千百软件.在描述Chandler项目的过程当中亦提出了很多观点,带给我们很多思考.让我们这些软件工程专业的学生对软件开发有了一个更深层次的认知. 在本书第一章,作者为我们介绍了一个布鲁克斯法则:"往已延误的项目里补充人力,只会使其继续延误". 布鲁克斯曾是IBM的资深程序经