找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

查看: 36577|回复: 22

[其他] da14580

[复制链接]
连续签到天数:1天
签到总天数:495天
签到总奖励:7030金币
发表于 2016-7-4 14:45:06 | 显示全部楼层 |阅读模式

马上注册,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册  

×
Dialog的协议栈在出厂时已经固化在ROM中,对于应用层的代码,并没有真正的主函
入口,是通过一个跳转表jump_table_base将函数指针放到某个固定的位置。
图1
上面的宏BLE_APP_PRESENT表示的是整个应用是同一个芯片中完成,不需要用到GTL(Generic Transport Layer) (通用传输层)。所以一般这个宏是需要打开的。这个表是将内核和应用用到的函数指针放到这里,当应用或者内核需要使用时,可以通过数组调用某个函数,例如当系统启动时,需要运行应用的主函数int main_func(void),这个函数也在这个表中(249行),当然这个调用是在协议中的主函数启动之后进行调用的:
PtrFunc= (my_function)(jump_table_struct[main_pos]);
上面实际上就是调用应用层的main_func()函数了。当然在应用层也可以进行这样的调用,例如图2:




楼主热帖
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
连续签到天数:1天
签到总天数:986天
签到总奖励:20845金币
发表于 2016-7-7 17:45:07 | 显示全部楼层

积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:885天
签到总奖励:15306金币
发表于 2016-7-6 15:17:41 | 显示全部楼层

积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:495天
签到总奖励:7030金币
 楼主| 发表于 2016-7-6 14:25:07 | 显示全部楼层
为啥图片不显示出来啊
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:273天
签到总奖励:5132金币
发表于 2016-7-6 13:27:15 | 显示全部楼层
受教了~~~~~~~~~~
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:495天
签到总奖励:7030金币
 楼主| 发表于 2016-7-4 16:48:43 | 显示全部楼层
没注意看这些
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:346天
签到总奖励:7929金币
发表于 2016-7-4 16:42:08 | 显示全部楼层
dialog 不是国产的吧
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:495天
签到总奖励:7030金币
 楼主| 发表于 2016-7-4 14:56:14 | 显示全部楼层
da14580之12创建自己的profile

12.1.   总任务
有两个任务需要完成:
l  服务GATT数据库创建函数和属性值应用层函数实现;
l  将上面创建数据库的函数嵌入到工程中,并在应用层进行上面函数调用。
12.2.   独立服务创建
以官方Ssample128为例,创建两个特征值,一个TX一个RX,RX特征值具有读写两个特性,TX具有读和通知的特性。
12.2.1. sample128GATT数据库的元素
对于一个服务基本的元素有:首要服务声明、特性声明以及特性值声明。对于lowspp服务具有1个首要服务声明、2个特性声明和特性值声明,以及因为有通知属性所以还需要用一个CCCD(Client Characteristic Configuration Declaration)客户端特性配置声明,所以整个数据库需要6个句柄,如下:


  
Handle
   属性声明类型 UUID Value
Start 首要服务声明 0x2800 0x0F0E-0D0C-0B0A09080706050403020100
Start+1 特性声明 0x2803 0x<RD|WR><start+2>
  
1F1E-1D1C-1B1A19181716151413121110
Start+2 特性值声明 0x1F1E-1D1C-1B1A19181716151413121110 0x00
Start+3 特性声明 0x2803 0x<RD|WR><start+4>
  
2F2E-2D2C-2B2A29282726252423222120
Start+4 特性值声明 0x2F2E-2D2C-2B2A29282726252423222120 0x00
Start+5 特性配置声明 0x2902 0x0000





上面的UUID是在simple128.c中进行定义的:
上面的标注{0,0}本来是handle的值,这里设置为0因为这个handle是创建数据库之后协议栈分配的。
对于CCCD的值开始设置为0x0000,这个值会在连接后由主机写1,也就是开启通知功能,换句话说,这个特性值具有通知的功能,但是接不接通知是又主机控制的。


积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:495天
签到总奖励:7030金币
 楼主| 发表于 2016-7-4 14:55:19 | 显示全部楼层
RobotHCS 发表于 2016-7-4 14:50
da14580之9.睡眠模式 10.睡眠模式下唤醒事件

9.     睡眠模式

da14580之11.WakeUP Timer使用

如果要使用这个模块,就必须将WKUP_ENABLED这个宏打开。
当应用接收到从wakeup timer产生一个中断时,系统将从睡眠模式唤醒并执行中断回调函数。
11.1.   WakeUP中断向量号



从上面注释可以看到这个中断号被3个中断共用:时间捕获中断、GPIO中断和正交解码中断使用。
11.2.   WakeUP中断回调函数怎么注册



也就是定义一个不带入口出口参数的函数然后进行传输。


11.3.    WakeUP中断回调函数在哪个地方注册
可以在主函数中进行初始化时注册一次,也可以在每次中断函数进来执行这个回调函数时对于自己再次注册。
11.4.   WakeUP回调函数中必须做事情

睡眠中唤醒后必须重新初始化所有的外设,所以在wakeup timer的中断回调函数中必须将设备再次初始化。也就是在回调函数中必须调用:
11.5.    WakeUP GPIO中断使能

当用某个引脚作为中断口时,需要调用系统提供的wkupct_enable_irq函数将所使用的IO口进行中断使能。函数原型:
例如:
每次中断产生后就必须重新调用一次上面的这个使能函数以便下次使用,就相当于清中断标志,只是这里通过重新注册中断重新使能中断。
11.6.   WakeUP GPIO中断关闭

函数原型:




























积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:495天
签到总奖励:7030金币
 楼主| 发表于 2016-7-4 14:54:20 | 显示全部楼层
da14580之12.6.任务消息传递表

TASK_APP任务用A表示,TASK_SAMPLE128任务用S表示。  
创建数据库
   应用层------> 文件/调用-------> 消息/源任务--->目标任务 文件/调用
app_db_init_func() app_sample128.c SAMPLE128_CREATE_DB_REQ sample128_task.c
void app_sample128_create_db_send(void) A S sample128_create_db_req_handler
创建数据库状态 Profile-------> 消息/源任务--->目标任务 文件/调用------> 消息/源任务--->目标任务 文件/调用
sample128_create_db_req_handler SAMPLE128_CREATE_DB_CFM app_sample128_task.c APP_MODULE_INIT_CMP_EVT app_task.c(作用是继续创建数据库)
S A app_sample128_create_db_cfm_handler A A app_module_init_cmp_evt_handler
使能数据库 应用层------> 文件/调用-------> 消息/源任务--->目标任务 文件/调用
app_connection_fun() app_sample128.c SAMPLE128_ENABLE_REQ sample128_task.c
void app_sample128_enable(void) A S sample128_enable_req_handler
发送数据 应用层调用------> 消息/源任务--->目标任务 文件/调用------>  
app_sample128.c SAMPLE128_UPD_CHAR2_REQ sample128_task.c  
void app_sample128_upd_char2(uint8_t val) A S sample128_upd_char2_req_handler  
数据接收 接收到协议栈消息 文件/调用-------> 消息/源任务--->目标任务 文件/调用
sample128_task.c sample128.c SAMPLE128_VAL_IND app_sample128_task.c
gattc_write_cmd_ind_handler sample128_send_val S A app_sample128_val_ind_handler
数据库关闭 协议栈-------> 文件/调用-------> 消息/源任务--->目标任务 文件/调用------->
sample128_task.c sample128.c SAMPLE128_DISABLE_IND app_sample128_task.c
gap_disconnnect_ind_handler void sample128_send_val(uint8_t val) S A app_sample128_disable_ind_handler
           



未完待续……




积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2025-7-16 14:31 , Processed in 0.072749 second(s), 23 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表