码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-13 17:17:36      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:网络

第一章

     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字段。

       技术分享        

         技术分享      技术分享

       技术分享

本文出自 “Malt's Sky” 博客,请务必保留此出处http://iammalt.blog.51cto.com/12054231/1964933

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

标签:网络

原文地址:http://iammalt.blog.51cto.com/12054231/1964933

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!