RW文档翻译学习——RW-BT-SW-COMMON-FS

翻译不全,选了我认为比较重要的翻译的,蓝色是我的废话

1 Overview

1.1 文档目的

         本文档包含嵌入式RW-BT软件的通用信息。

         提供了工程结构和文件的一般消息,以及有关os及os接口、和定制RW-BT软件的接口描述,为了适应最后的应用。

3 Operating System

        RW Kernel提供一个事件时序功能,这个功能的主要目的是提供程序的延迟功能。(就是消息发送了,系统根据优先级判断,谁先发,谁后发,这就有一个时延!

       (1)在一个中断句柄中,仅执行重要的处理;

       (2)不重要的处理在中断之后被一个事件句柄完成。

         事件使用两种数据结构:

        (1)一个允许设置和重置事件的32bit域(在系统中最多允许含有32个内核事件)

        (2)一个常量数组包括指向事件句柄的指针。

        在后台循环中,Kernel检查事件域是否为非空,并且执行通信事件位被设置的事件句柄。

3.1 消息传输

         (1)源任务分配和填充消息;

         (2)源任务将消息放入内核消息队列;(单向链表)

3.2 消息时序

         (1)在后台循环中,内核取出队列的第一个消息;

         (2) 据消息结构(id、目的任务),内核决定调用哪个消息句柄(message handler);

         (3)根据返回的消息句柄的状态,内核执行需要的操作。

3.3 定时器设置

         (1)当一个任务在未来需要一个定时器,内核从空闲池中分配一个定时器结构。内核用任务参数(如time、timer_id、task_id)填充这个新的定时器;

         (2)内核将新定时器放在有序定时器列表的正确位置;

         (3)如果新的定时器位于列表的第一个,内核编码让硬件总目标时间匹配新定时器的目标时间。

3.4定时器时序

         (1)一旦定时器到期,内核时间在后台被调用,在时间时序中,内核取出队列中的第一个定时器;

         (2)根据定时器结构,内核发送通信消息给配置这个定时器的任务;

         (3)内核释放这个到期的定时器;

         (4)内核编码硬件总时间匹配下一个定时器的时间。(应该是设置时间,为定时器的时间)

4 中断管理

         这章描述了用于管理中断的机制。

        对于ARM处理器,这个中断线IRQ产生一个中断,由ARM程序集编写的第一级中断处理程序处理,调用第二级处理程序。

        第二级中断处理由C语言编写,并且依赖使用的中断控制器。处理器调用中断源中的中断处理模块。

        RW-BT处理器处理RW-BT中断,处理器调用LD函数,通过操作系统发送信息给链路控制器或管理器。

5 主机控制器接口(HCI)

       这部分我实习期间搞过,比较简单,大概了解下

       HCI的传输协议是UART。在TX路径,当有HCI的中断到来,消息(一般是CMD、ACL、SYNC数据)将被发送给驱动。根据消息的类型,不同的驱动API会被调用。

       hci_cmd_dispatch(command);

      hci_data_sync_dispatch(sync data);

       hci_data_acl_dispatch(acl data);

6 非易失性参数存储NVDS

6.1概述

        NVDS(非易失性数据存储)驱动在nvds.c.h文件中,这些驱动的默认是RW-BT板子的flash地址。

        NVDS在flash中的限制如下:

       (1)不能擦除Flash的内存,内存在第一次下载固件的时候擦除;

       (2)在多次写入flash内存操作后,不压缩参数。

6.4 存储格式

        数据使用中没有特定的顺序或表格

        每个数据与一个状态相关联,如有效、无效、锁住。在进入或修改数据之前,数据状态被设置为无效,一旦数据被存储即设为有效(这个基本字节写入是一个原子操作)。这种机制保护不完整的数据被存储,如果一次电源缺失发生使一个数据元素的以部分被写入。当一些数据是无效的,正常写入的生产参数一旦需要检索和检查,作为生产参数的一部分。

       无论参数是否被锁都可以发送。如果参数被锁,它也是有效的,并且不能改变。

       存储的链接键的数目明显是有限的,所以老的和不用的链路键必须被删除。这个操作被上层执行,通过标准的HCI命令去读写删除存储的链接键(Link Key)。

       在初始化时,设备被Markers0xFF装满,为了能发现最近存储的值,这个值必须没有被用做一个标签。

7 设置一个应用,配置RW-BT软件

7.2调整系统层定义和删除块

        蓝牙设备能力可以通过定义于文件夹中的文件进行配置。或是通过命令进行系统层定义。

        用户可以为协议栈的每一层改变link entities的数目,下面的表格显示在不同软件模块中可以选择的连接实体。

 

7.2.1 系统修改

         对每个系统,用户可以修改,在./platform/config/scutils.py 文件中。

 

你可能感兴趣的:(嵌入式开发,低功耗蓝牙开发,RW蓝牙协议栈学习)