请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5116|回复: 9
收起左侧

[FreeRTOS] ESP32的BLE例程(gatt_server_service_table)是否使用了freeRTOS

[复制链接]

33

主题

203

回帖

302

积分

高级会员

积分
302
发表于 2020-10-21 09:59:01 | 显示全部楼层 |阅读模式
sdk版本:ESP-IDF-V4.1

手册上说SDK使用的是freeRTOS,但是看gatt_server_service_table例程,似乎并没有使用。本例程可否使用freeRTOS呢,还是因为没有这个必要呢?

我ESP32和freeRTOS都是边学边用,问题太低级,请多赐教。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106395
QQ
发表于 2020-10-21 10:06:14 | 显示全部楼层
这个要找乐鑫咨询下,我现在使用ESP32和8266仅用AT方式。
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2020-10-26 16:51:44 | 显示全部楼层
本帖最后由 diiiiiii 于 2020-10-26 17:00 编辑
eric2013 发表于 2020-10-21 10:06
这个要找乐鑫咨询下,我现在使用ESP32和8266仅用AT方式。

再请教一个问题。
ble是使用回调函数接收数据的,例如回调函数:

static void gatts_profile_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param){
    switch (event)   
    {
        case :
        break;
。。。。。。。。。。
        case ESP_GATTS_WRITE_EVT:
        {
        //在这里,就能从参数param里获取接收到的数据指针和数据长度,并使用memcpy拷贝出来。
        }
        break;
。。。。。。。。。。。。

    }
}



回调函数gatts_profile_event_handler经其他初始化函数注册后,当ble事件发生时,就调用gatts_profile_event_handler,非常类似串口接收,但是和串口中断似乎不是一回事。


我想使用freertos接收ble数据,然后交给另外一个服务处理数据。这种情况下,怎样使用消息队列(邮箱)呢?(先不考虑实时性,阻塞等其他情况,只实现基本的功能。





回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106395
QQ
发表于 2020-10-27 11:32:49 | 显示全部楼层
diiiiiii 发表于 2020-10-26 16:51
再请教一个问题。
ble是使用回调函数接收数据的,例如回调函数:

消息队列就行
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2021-2-23 09:52:24 | 显示全部楼层
因为IDF的demo都是应用层代码。。。应用层函数入口app_mian()其实式系统底层创建的的一个freertos任务,所以你用到app_main()就已经在用freertos的task了
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2021-3-16 11:12:14 | 显示全部楼层
ESP蓝牙代码写的不太好,启用蓝牙功能需要占用80K ROM,多占用60K RAM,相当耗费资源,我们以前用,后来取消了
回复

使用道具 举报

2

主题

38

回帖

44

积分

新手上路

积分
44
发表于 2021-3-16 15:35:27 | 显示全部楼层
diiiiiii 发表于 2020-10-26 16:51
再请教一个问题。
ble是使用回调函数接收数据的,例如回调函数:

以前我搞过。这个算是简单的应用。
ESP_LOGI(GATTS_TABLE_TAG, "ble receive data\r\n");
BleSendData.len = p_data->write.len;
memcpy(&BleSendData.data[0], p_data->write.value, p_data->write.len);
xQueueSend(ble_data_queue,&BleSendData,10/portTICK_PERIOD_MS);

初始化的时候首先要创建队列,ble_data_queue = xQueueCreate(5, sizeof(_BleQueueStruct));
上面是发送队列,然后,在你的服务处理任务里等待数据队列接收。
while(1)
{
   if(xQueueReceive(ble_data_queue, &BleRevData, portMAX_DELAY))
  {
      // 数据处理
   }
}
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2021-3-24 16:47:49 | 显示全部楼层
abnerle 发表于 2021-3-16 11:12
ESP蓝牙代码写的不太好,启用蓝牙功能需要占用80K ROM,多占用60K RAM,相当耗费资源,我们以前用,后来取 ...

ble还是传统蓝牙?没深度学习它的代码,只拿来用。
回复

使用道具 举报

0

主题

16

回帖

16

积分

新手上路

积分
16
发表于 2021-7-7 08:15:47 | 显示全部楼层
ESP-IDF-V4.1 整个就是用的FREERTOS,你看到的应用部分,其实是一个任务中的一部分,你用vTaskList() 打印一下目前运行的任务就清楚了
回复

使用道具 举报

0

主题

14

回帖

14

积分

新手上路

积分
14
发表于 2021-11-10 17:06:33 | 显示全部楼层
KingChen 发表于 2021-3-16 15:35
以前我搞过。这个算是简单的应用。
ESP_LOGI(GATTS_TABLE_TAG, "ble receive data\r\n");
BleSendData. ...

我有点迷糊,回调是在中断函数里执行的吗?在回调函数里收发消息要不要用非阻塞的API呢?
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-19 00:36 , Processed in 0.183733 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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