diiiiiii 发表于 2020-10-21 09:59:01

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

sdk版本:ESP-IDF-V4.1

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

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

eric2013 发表于 2020-10-21 10:06:14

这个要找乐鑫咨询下,我现在使用ESP32和8266仅用AT方式。

diiiiiii 发表于 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数据,然后交给另外一个服务处理数据。这种情况下,怎样使用消息队列(邮箱)呢?(先不考虑实时性,阻塞等其他情况,只实现基本的功能。)





eric2013 发表于 2020-10-27 11:32:49

diiiiiii 发表于 2020-10-26 16:51
再请教一个问题。
ble是使用回调函数接收数据的,例如回调函数:



消息队列就行

yukawamanabu 发表于 2021-2-23 09:52:24

因为IDF的demo都是应用层代码。。。应用层函数入口app_mian()其实式系统底层创建的的一个freertos任务,所以你用到app_main()就已经在用freertos的task了

abnerle 发表于 2021-3-16 11:12:14

ESP蓝牙代码写的不太好,启用蓝牙功能需要占用80K ROM,多占用60K RAM,相当耗费资源,我们以前用,后来取消了

KingChen 发表于 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, 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))
{
      // 数据处理
   }
}

diiiiiii 发表于 2021-3-24 16:47:49

abnerle 发表于 2021-3-16 11:12
ESP蓝牙代码写的不太好,启用蓝牙功能需要占用80K ROM,多占用60K RAM,相当耗费资源,我们以前用,后来取 ...

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

lcfmax 发表于 2021-7-7 08:15:47

ESP-IDF-V4.1 整个就是用的FREERTOS,你看到的应用部分,其实是一个任务中的一部分,你用vTaskList() 打印一下目前运行的任务就清楚了

chzfmx 发表于 2021-11-10 17:06:33

KingChen 发表于 2021-3-16 15:35
以前我搞过。这个算是简单的应用。
ESP_LOGI(GATTS_TABLE_TAG, "ble receive data\r\n");
BleSendData. ...

我有点迷糊,回调是在中断函数里执行的吗?在回调函数里收发消息要不要用非阻塞的API呢?
页: [1]
查看完整版本: ESP32的BLE例程(gatt_server_service_table)是否使用了freeRTOS