ESP32的BLE例程(gatt_server_service_table)是否使用了freeRTOS
sdk版本:ESP-IDF-V4.1手册上说SDK使用的是freeRTOS,但是看gatt_server_service_table例程,似乎并没有使用。本例程可否使用freeRTOS呢,还是因为没有这个必要呢?
我ESP32和freeRTOS都是边学边用,问题太低级,请多赐教。
这个要找乐鑫咨询下,我现在使用ESP32和8266仅用AT方式。 本帖最后由 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数据,然后交给另外一个服务处理数据。这种情况下,怎样使用消息队列(邮箱)呢?(先不考虑实时性,阻塞等其他情况,只实现基本的功能。)
diiiiiii 发表于 2020-10-26 16:51
再请教一个问题。
ble是使用回调函数接收数据的,例如回调函数:
消息队列就行 因为IDF的demo都是应用层代码。。。应用层函数入口app_mian()其实式系统底层创建的的一个freertos任务,所以你用到app_main()就已经在用freertos的task了 ESP蓝牙代码写的不太好,启用蓝牙功能需要占用80K ROM,多占用60K RAM,相当耗费资源,我们以前用,后来取消了 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))
{
// 数据处理
}
} abnerle 发表于 2021-3-16 11:12
ESP蓝牙代码写的不太好,启用蓝牙功能需要占用80K ROM,多占用60K RAM,相当耗费资源,我们以前用,后来取 ...
ble还是传统蓝牙?没深度学习它的代码,只拿来用。 ESP-IDF-V4.1 整个就是用的FREERTOS,你看到的应用部分,其实是一个任务中的一部分,你用vTaskList() 打印一下目前运行的任务就清楚了 KingChen 发表于 2021-3-16 15:35
以前我搞过。这个算是简单的应用。
ESP_LOGI(GATTS_TABLE_TAG, "ble receive data\r\n");
BleSendData. ...
我有点迷糊,回调是在中断函数里执行的吗?在回调函数里收发消息要不要用非阻塞的API呢?
页:
[1]