翻译的是这个文档。
它介绍了整个系统架构,组件,应用程序编程接口(API)以及开发工具链,环境和过程。
问题点请在评论中留言,我看到了回去改正。

这篇主要是讲SDk5.0.4里面有什么?

11 Development Environment

11.2 Software Development Kit (SDK) Structure

11.2.1 root Directory


和实际的SDK是一致的。

11.2.2 binaries Directory

This directory holds the executable binaries of the PC applications stored in host_apps directory as
well as the binary file of the production test tool firmware.

prod_test里面都是一些hex文件,应该是下载给蓝牙芯片的。
windows里面都是些exe程序,不知道怎么用。直接点开运行啥都没看到。

11.2.3 config Directory
This directory contains the DA1458x configuration file for the SmartSnippets tool.

11.2.4 doc Directory
This directory contains the SDK license files.

每个组件的授权都写的很清楚,赞。

11.2.5 projects Directory
包含两部分:
├── host_apps
└── target_apps

11.2.5.1 host_apps Directory

这里的例程文件预期是在电脑上跑的,windows的文件是visul的工程文件。
proximity reporter这个是SPI接口。
猜测是windows通过SPI接口控制DA1458X作为PC端的host???

这个目录是
├── da1458x
│ └── proximity
└── windows
├── proximity
├── spota
└── suota

这两个定义是啥,我还没完全弄明白。
SPOTA Software Patching Over the Air
SUOTA Software Upgrade Over the Air

11.2.5.2 target_apps Directory
这部分是在soc上跑application的例程。包含keil工程文件,源代码,配置文件。

第一部分:ble_examples

├── ble_examples
│ ├── ble_app_all_in_one
│ ├── ble_app_barebone
│ ├── ble_app_ota
│ ├── ble_app_peripheral
│ ├── ble_app_profile
│ ├── ble_app_security
│ ├── ble_app_sleepmode
│ ├── prox_monitor_ext
│ ├── prox_reporter
│ ├── prox_reporter_ext
│ └── prox_reporter_ext_spi

The ble_examples 这个文件夹包含 BLE application examples for
“Integrated processor” or “External processor” 这两种模式,简介如下

● ble_app_barebone, 基于集成处理器模式的配置,展示基础的BLE流程,例如广播,连接,连接参数更新,设备信息服务的执行。

● ble_app_profile,基于集成处理器模式的配置,在ble_app_barebone基础上,再增加用户定义的自定义服务(128位UUID)的实现,只展示用户自定义数据库的创建。

● ble_app_peripheral, 基于集成处理器模式的配置,在ble_app_profile基础上,再增加自定义服务的基础交互(读/写/通知值)

● ble_app_sleepmode, 基于集成处理器模式的配置,在ble_app_profile基础上,再增加睡眠模式的API,有Extended Sleep and Deep Sleep两种模式可选。

● ble_app_security,
基于集成处理器模式的配置,在ble_app_profile基础上,再增加添加了各种安全/隐私功能。

● ble_app_ota,
基于集成处理器模式的配置,在ble_app_profile基础上,再增加OTA在线编程升级功能。

● ble_app_all_in_one, (集合汇总)
基于集成处理器模式的配置,讲前文所述的ble_app_ 这些例程集合到一个工程里面。

● prox_monitor_ext,
基于外部处理器模式的配置,展示proximity monitor服务,也包含device information client服务。

● prox_reporter, (这个应该是在线升级的接收端)
基于集成处理器模式的配置,展示proximity reporter服务,也包含device information client服务,battery server服务,SPOTAR服务。

● prox_reporter_ext,
基于外部处理器模式的配置,展示proximity reporter服务,也包含device information client服务,battery server服务,SPOTAR服务。

● prox_reporter_ext_spi,
基于外部处理器模式,通过SPI接口的配置,展示proximity reporter服务,也包含device information client服务,battery server服务,SPOTAR服务。

第二部分:peripheral_examples

例程展示some of the non-BLE functionality,
├── peripheral_examples
│ ├── adc
│ ├── blinky
│ ├── i2c
│ ├── quadrature_decoder
│ ├── shared
│ ├── spi
│ ├── systick
│ ├── timer0
│ ├── timer2
│ ├── uart
│ └── uart2_async
● adc, analog to digital conversion example.
● blinky, blinks a led.
● i2c, i2c interface example.
● quadrature_decoder, quadrature decoder example.
● shared, shared library for peripheral examples.
● spi, spi interface example.
● systick, SysTick timer control example.
● timer0, timer0 control example.
● timer2, timer2 control example.
● uart, uart communication example.

第三部分:prod_test

The prod_test directory 包含量产测试例程
├── prod_test
│ └── prod_test

第四部分:template

The template directory 包含BLE的模板例程,针对集成处理器和外置处理器模式。给用户作为project的工程模板。
└── template
├── empty_peripheral_template
└── empty_template_ext

● empty_peripheral_template, 基于集成处理器模式,展示基础的BLE功能。

● empty_template_ext, 基于外部处理器模式,展示基础的BLE功能。

第五部分:Keil工程文件结构介绍

├── Keil_5
│ ├── *.uvoptx
│ ├── *.uvprojx
│ ├── out_580
│ ├── out_581
│ ├── out_583
└── src
├── config
├── custom_profile
├── platform
├── *.c
└── *.h

Keil_5文件夹,包含keil工程文件,*.uvprojx and *.uvoptx。在keil编译后,会包含out_580, out_581, out_583这三个文件夹,对应的是DA14580/581/583这三个IC芯片的输出文件。

The src directory contains the user’s application source code and header files (e.g.
user_.c, user_.h or more) and three directories: config, custom_profile and
platform. These three directories contain files that must be included in a user project structure. The
names of these files must not be altered by the user.

src 文件夹包含用户application源代码,头文件(user_.c, user_.h or more),
config文件夹,custom_profile文件夹,platform文件夹。这三个文件夹需要包含在用户工程文件结构中,不允许用户改名字。

可以看到,这里是有对应关系的,可是为啥两边的文件夹名称不一致,尴尬,有点强迫症。
注意,当用户应用中不用Custom profile的时候,custom_profile文件夹可以忽略。

进一步详细展开这三个文件夹
├── config
│ ├── da1458x_config_advanced.h 拥有advanced configuration 设置。
│ ├── da1458x_config_basic.h 拥有basic configuration 设置。
│ ├── user_callback_config.h 处理各种事件或操作的回调函数。
│ ├── user_config.h 处理广播参数,连接参数等等。
│ ├── user_config_sw_ver.h 包含有关软件版本的用户特定信息。
│ ├── user_modules_config.h 定义用户应用中包含/不包含哪些应用模块。
│ ├── user_periph_setup.h 拥有硬件相关设置。
│ └── user_profiles_config.h 定义用于应用采用SIG的还是用户自定义的BLE profiles。
├── custom_profile
│ ├── user_custs_config.c 定义cust_prf_funcs[]数组。
│ ├── user_custs_config.h 包含 Custom profiles API函数调用。
│ ├── user_custs1_def.c 定义Custom 1 profile数据库结构的结构。
│ └── user_custs1_def.h
├── platform
│ └── user_periph_setup.c 外设配置并初始化的源代码。
├── user_.c
└── user_.h

UM-B-050, DA1458x Software Developer’s Guide, User manual, Dialog Semiconductor.
这个文档有上述配置文件的详细描述。

11.2.6 sdk Directory
文件夹目录树如下:
├── app_modules
│ ├── api
│ └── src
├── ble_stack
│ ├── controller
│ ├── hcic
│ ├── hcih
│ ├── host
│ ├── profiles
│ ├── rwble
│ └── rwble_hl
├── common_project_files
│ ├── misc
│ └── scatterfiles
└── platform
├── arch
├── core_modules
├── driver
├── include
└── patch_code

###11.2.6.1 app_modules Directory
应用的源文件和头文件。
● api, 应用头文件
● src, 包含应用工程针对BLE profiles 的特定代码,BLE操作的处理功能,例如广播,连接,安全/加密等等。

###11.2.6.2 ble_stack Directory
包含BLE栈的相关文件。

###11.2.6.3 common_project_files Directory
包含2个文件夹和三个配置头文件。
.
├── misc
├── scatterfiles Keil scatter files
├── da1458x_periph_setup.h 定义使用的硬件平台
├── da1458x_scatter_config.h 定义memory layout内存分布的布局
└── da1458x_stack_config.h 定义栈

● misc, 包含ROM符号定义文件。 该文件将用作链接器的输入,以创建最终的可执行文件。 可执行文件以及编译输出将保存在新创建的名为out_580,out_581或out_583的文件夹中,文件夹名字具体取决于所选的SoC。

这里misc下面的文件如rom_symdef.txt中定义0x00021b09 T SystemInit究竟是啥意思?
猜测是协议栈代码是固化在ROM中的,也需要告诉链接器,ROM里面某个函数的具体入口地址。

###11.2.6.4 platform Directory
这个文件夹包含ARM Cortex-M0及其外设(BLE, serial interfaces, GPIOs, etc.)的platform特性文件。
● arch, 包含系统文件和 main()应用程序。
● core_modules, 核心系统模块,例如内核 that implements the message handling, the GTL implementation, the non-volatile data storage manipulation, RF drivers, etc.
● driver, 包含支持的的ARM Cortex-M0外设驱动。
● include, 核心代码的头文件。
● patch_code, 包含针对ROM函数的补丁文件,patched functions的具体信息参见SDK的发布说明文档。

###11.2.7 utilities Directory
该目录包含补充SDK的实用程序和工具。
.
├── flash_programmer 是对DA1458X芯片进行flash 下载
├── mkimage
├── prod_test 量产测试实用程序
├── secondary_bootloader 二级bootlader的实用例程
└── uvproj2Makefile 将Keil4转Makefile的实用程序
详细参考如下:
[16] UM-B-008, DA14580_581_583 Production test tool, User manual, Dialog Semiconductor.
[20] UM-B-012, DA14580/581 Creation of a secondary boot loader, User manual, Dialog
Semiconductor.

Keil启动文件分析

启动文件为.s文件,工程里面为boot_vectors.s里面先定义了中断表,
编译器的链接器linker,的配置文件scatterfile_common.sct
通过AREA RESET进行映射。是以0x20000000作为起始地址,有0x160的长度。

From 0x20000000 to 0x200097FF there is 38 KB of RAM space (SysRAM). Some areas in this
memory space are reserved, though, and cannot be used by the user. These are:
● Vector table, placed at 0x20000000,
● Jump table, placed at 0x20000160,
● Timeout table, placed at 0x200002C0,
● NVDS storage, placed at 0x20000340 and
● ROM code data, placed at 0x20009000.



timeout_table_area和nvds_data_storage_area也是同理定义为位置。

继续,

; Vector Table Mapped to Address 0 at Reset
复位后默认是跳转到中断表地址0

            IF      :DEF:__REMAP_SYSRAMDCD     Reset_Handler+0x20000000             ; Reset HandlerELSEDCD     Reset_Handler             ; Reset HandlerENDIF

如果定义了REMAP SYSRAM,那么就是Reset_Handler+0x20000000的位置开始,否则就是Reset_Handler这个位置。

Reset_Handler开始执行,就是remap ram。
其次就是调用SystemInit,然后跳转到__main这里。其中SystemInit可以在工程中找到源代码,
然而__main不知道是哪里。后来发现就是跳转到ROM了,就是那个蓝牙协议栈的ROM。
;0x000000a1 T __main


理了个启动的大致脉络,很多细节不清楚,期待有大神指导。

后续用户程序的main函数入口,是在arch_main.c里面。
/**


  • @brief BLE main function.
  •    This function is called right after the booting process has completed.
    
  •    It contains the main function loop.
    

*/
int main_func(void) attribute((noreturn));

int main_func(void)
{
sleep_mode_t sleep_mode;

//global initialise
system_init();/************************************************************************************** Platform initialization*************************************************************************************/
while(1)
{do {// schedule all pending eventsschedule_while_ble_on();}while (app_asynch_proc() != GOTO_SLEEP);

DA14580软件开发平台参考(五)相关推荐

  1. DA14580软件开发平台参考(一)

    翻译的是这个文档. 它介绍了整个系统架构,组件,应用程序编程接口(API)以及开发工具链,环境和过程. 问题点请在评论中留言,我看到了回去改正. 3 介绍 本文档旨在通过为蓝牙低功耗标准提供实用的高级 ...

  2. DA14580软件开发平台参考(二)

    翻译的是这个文档. 它介绍了整个系统架构,组件,应用程序编程接口(API)以及开发工具链,环境和过程. 问题点请在评论中留言,我看到了回去改正. 继续上篇, 4 DA1458x Software Pl ...

  3. DA14580软件开发平台参考(三)

    翻译的是这个文档. 它介绍了整个系统架构,组件,应用程序编程接口(API)以及开发工具链,环境和过程. 问题点请在评论中留言,我看到了回去改正. 7 System Software DA1458x S ...

  4. 使用华为云软件开发平台devcloud和应用管理与运维平台servicestage实现持续集成(CI)持续部署(CD)

    本文来自于知乎专栏:https://zhuanlan.zhihu.com/p/385350636 说明: 软件开发平台devcloud是持续集成(CI)持续部署(CD)工具: 应用管理与运维平台ser ...

  5. 全Java网管软件开发平台SugarNMS

    一. SugarNMS平台介绍 智和网管软件开发平台(SugarNMS Platform)是北京智和信通技术有限公司专为期望快速搭建可靠网管软件的企业而准备,开发平台充分利用智和网管软件已有的软件功能 ...

  6. HiSDP —— 高效的C++软件开发平台

    目前阿里集团每天有近1000PB的数据是通过LogAgent采集的,为了让LogAgent做到资源占用节省和高效采集,背后是基于HiSDP去构建的. 缘由 当决定采用C++编程语言去开发一个软件时,紧 ...

  7. 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 文章汇总及学习指南...

    一.AgileEAS.NET平台简介 AgileEAS.NET平台是一套应用系统快速开发平台,用于帮助中小软件开发商快速构建自己的企业信息管理类开发团队,以达到节省开发成本.缩短开发时间,快速适应市场 ...

  8. 建立智慧的软件开发中心,第 5 部分: 智慧软件开发中心参考框架

    李纪华, 技术主管, IBM 简介: 随着应用软件复杂度的不断提高,软件架构越来越重要,好的架构可以增强系统的可用性.适应变化的能力以及健壮性.而参考架构(Reference Architecture ...

  9. 企业应用软件开发平台|软件开发平台有那些?

    企业应用软件开发平台|软件开发平台有那些? 一.关于企业应用软件 企业应用软件是指可以在系统软件之外的所有应用软件,为满足企业应用需求而提供的软件. 企业应用软件它不单单是软件,更是根据企业管理的理论 ...

最新文章

  1. 一个fork短码的扩展版本
  2. Android studio官网资料
  3. 5月第2周编辑部标题训练:寻找读者最关注的新闻点
  4. Spring-ApplicationContext解读
  5. The Hystrix timeout of XXms for the command XX-XX is set lower than the combination of the
  6. JSON指针:JSON-P 1.1概述系列
  7. 在计算机网络中可用于信息传输的介质,在计算机网络中,双绞线、同轴电缆及光纤等用于传输信息的载体被称为______介质。...
  8. 手机qq和电脑qq怎么同步消息_怎么在QQ上把自己电脑上的文件传到QQ上??
  9. 形如1/(a+bsinx)的积分公式的证明
  10. Shapefile简介
  11. VisualSVN Server SVN仓库迁移备份
  12. e.pageX、e.clientX、e.screenX、e.offsetX的区别以及元素的一些CSS属性
  13. 电影《忠犬八公》观后感
  14. Jodd-Java的瑞士军刀 demo
  15. Java基础18-String类【String类的特点对象个数常用方法】【超详细讲解】
  16. 一行行的代码解密马尔可夫链
  17. 【OS】什么是YUM?如何配置本地YUM源?
  18. AD20使用技巧和笔记
  19. latex eps图片不显示
  20. Altium 常用快捷键

热门文章

  1. [moka同学代码]PHP初级知识:上传文件源码
  2. python应用学习(六)——tkinter制作连连看小游戏
  3. 硬盘只要存入大文件就会卡住,然后就读取不出了,这是怎么回事?
  4. js实现首尾相连的文字滚动效果
  5. 2022-1-15 计算机组成原理 —— 如何提升性能
  6. 纯前端实现音视频合成
  7. ESD静电放电最常用的三种模型及其防护设计
  8. Spring源码工具类ClassUtils之isAssignable
  9. 智能传感器可以实现的10个强大物联网应用
  10. 智慧地球全自动EP交易