您尚未登录。

#1 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 关于FreeRtos 中 任务的堆栈大小的问题? » 2018-09-01 10:47:26

mkseven32
回复: 3

使用FreeRtos 创建任务,其中有一个参数是任务堆栈的大小, 这个参数是word为单位。

请问 如果一个芯片 的内存RAM 是512KB 。

那么是不是如果在它上面跑 FreeRtos  , 最大可以建n 个任务, 每个任务的堆栈大小 m 的话      这些任务的堆栈总合 nxmx4 =512KB ???
(理想状态下,不考虑其他耗费)

#2 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » OS 中信号的使用疑问!!!! » 2018-07-31 08:34:49

各位 大神,不好意思!!!,是喔自己 搞错了!!!!我更新一波~~~~

#3 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » OS 中信号的使用疑问!!!! » 2018-07-30 17:30:53

mkseven32
回复: 6

这里说的 OS 是CMSIS-OS!

信号操作的三个函数:
int32_t   osSignalSet (osThreadId thread_id, int32_t signals)
int32_t   osSignalClear (osThreadId thread_id, int32_t signals)
osEvent   osSignalWait (int32_t signals, uint32_t millisec)

这里有一篇博客 关于信号的设置和等待说得比较清楚,
https://blog.csdn.net/lh2008xp/article/details/72897954


但是有一点不明白!

Amos_Lee19872017 说:

通知的发送可以从多个任务或者多个中断中发出,但是等待任务通知函数只能有一个。这个地方可能有的人会理解错误,以为只能有一个等待任务通知,其实这里说的是一个任务中只能有一个等待任务通知函数,其他任务中还可以有等待任务通知函数;

这句话怎么理解, 

作为信号的接收方 ,可以是多个任务 同时都在等待接收这个信号?
但是 对应接收信号的 任务,  它只可以有一个等待接收信号  的函数,就是只可以调一次osSignalWait()


这是我做完实验后的理解:
其实应该 就是说 一个任务里面 等待信号到来的 函数最好只有一个地方,(通俗来说就是,一个任务里面最好就调用一个osSignalWait())...

因为,信号产生后,到osSignalWait()处获取到信号后, 接着信号对应的位  系统自己就清了~~~~~
如果是调用两次, 那么等于 任务又被阻塞 。如下代码:          备注 :getSignal_thread1 这个是在一个任务里面一直循环

void getSignal_thread1(void)
{
    osEvent evt;
    evt = osSignalWait(0x1, osWaitForever);
    TRACE("AAAAAAAAAAAAAAAAAAAAAAAAAAAA");
   
    evt = osSignalWait(0x1, osWaitForever);
    TRACE("666666666666666666666666666666");
}


当信号0x01 发送后,进入第一个 osSignalWait(0x1, osWaitForever);  然后解除阻塞,打印AAAAAAAAAA。
打印完 这是信号其实已经被清零了。

而这时有进入了阻塞 osSignalWait(0x1, osWaitForever);   结果又再等信号到来,

这样可能就是 那篇博客 上说的 : 一个任务中只能有一个等待任务通知函数

但是另外一句 :其他任务中还可以有等待任务通知函数

这个就百思不得其解了,  首先发送信号的 函数里面 ,明明就指定了 任务的 id , 说明信号只发给特定的任务,
那么 其他任务中又怎么 可以能接收到该信号呢?


难道 发给任务1 的信号0x01  ,任务2 里面也可以收到?这不是很矛盾吗?


以上是我的理解







下面还有几个疑问:
1.  信号被 接收到之后, 它是不是自动清零呢? 还是需要调用osSignalClear() 手动清零呢?
因为我做了个试验 ,在一个任务里面,做了两个函数,让它们都接收同一个信号。


补充一下我的发送信号函数:
int setsig_func(void)
{
    osThreadSetPriority(getSig_thread1_tid, osPriorityRealtime);
    osSignalSet(getSig_thread1_tid, 0x1);
    return 0;
}

static void process_gesignal(void const *argument)
{
    while(1)
    {
        getSignal_thread1();
        getSignal_thread2();
    }
}

void getSignal_thread1(void)
{
    osEvent evt;
        TRACE("%s",__func__);
    evt = osSignalWait(0x1, osWaitForever);
    TRACE("get signal in thread1");
}

void getSignal_thread2(void)
{
    osEvent evt;
        TRACE("%s",__func__);
    evt = osSignalWait(0x1, osWaitForever);
    TRACE("get signal in thread2");   
}

但是每次 信号触发之后, getSignal_thread1 进来了之后 getSignal_thread2 又可以进来,

这个是不是说明信号被接收之后 它并没有被清零呢?
可是如果没有被清零, 它为什么就只进来一次呢?
那又 是谁 又是在什么时候将它清零呢?

这个错误就是因为 这个打印产生的TRACE("%s",__func__);   其实信号只进入了getSignal_thread1 , 接着打印了 getSignal_thread2 的函数名,然后我误以为进入getSignal_thread2 所以 一直搞不明白, 后来仔细观察 log ,发现不对 怎么getSignal_thread2对比 getSignal_thread1 的 怎么 少了个空格 才恍然大悟~~~~~

所以在这里,奉劝各位坑友!!!做事要仔细,log 别乱加~~~要加也要加有意义的log 不是越多越好~~~ 


2. osSignalClear() 好像没有作用?

我在 接收函数的前面加了一句清零

void getSignal_thread1(void)
{
    osEvent evt;
        TRACE("%s",__func__);
        osSignalClear (getSig_thread1_tid, 0x0f);

    evt = osSignalWait(0x1, osWaitForever);
    TRACE("get signal in thread1");
}

void getSignal_thread2(void)
{
    osEvent evt;
        TRACE("%s",__func__);
         osSignalClear (getSig_thread1_tid, 0x0f);
    evt = osSignalWait(0x1, osWaitForever);
    TRACE("get signal in thread2");   
}
可是信号触发后,还是可以进来~~~~
不但getSignal_thread1 可以, getSignal_thread2 也可以~~~~


这个问题同样和上面一样,因为打印加了个打印函数名,导致误以为进入了getSignal_thread2,

但另外要说的,就是osSignalClear (getSig_thread1_tid, 0x0f); 
其实 第一 这个清零的作用感觉 放在 接收前面不妥, 对于 getSignal_thread1 它的作用其实在信号没产生前它已经执行了,然后阻塞挂起,然后一直在evt = osSignalWait(0x1, osWaitForever); 那里等着, 程序又跑到其他地方去执行了。

所以别老是用 以前单线 直流向下的非OS 系统执行思想 来看到 这种OS 的工作流程,  这是玩OS 必须学会的多线程思想

第二信号在osSignalWait(0x1, osWaitForever); 捕获到之后,它自己本身就清了,也无效你手动调函数 去清~~~~~

于是在getSignal_thread2 中写 osSignalClear (getSig_thread1_tid, 0x0f); 等于 脱裤子放屁, 信号在getSignal_thread1 被 捕获到之后 就清了, 那么在getSignal_thread2 里面又清一次, 不是脱裤子放屁 是什么???


最后感谢 晕哥 和 老发  的热情回复!!!!

真的很高兴有这样一个论坛 可以交流,学习!!!!!

#4 Re: ESP32/ESP8266 » 阔别两个月,再度归来,请问play_baidu_speech_mp3_example.c 这个例程如何启动? » 2018-07-10 09:00:43

晕哥 说:

https://whycan.cn/t_1114.html

用我的试一试, 一楼有:

API Key: FvNYWABLHgYC3aMMgaO7j5Qh
Secret Key: uc1IRoK4yMBqvAnmizT0ZZ7nR5OgYREU


按照你提供的这两个 key ,确实可以。

make flash  固件烧录成功之后, 重启ESP32, 播放声音 下面定义的声音;

#define TTS_TEXT "欢迎使用乐鑫音频平台,想了解更多方案信息请联系我们"


大概的流程应该是, WIFI 连接成功====》通过 http 方式  使用上面两个key  将TXT 发给百度=====》 百度译解出语音文件 MP3=====》 发给ESP32=====》 ESP32 接收到MP3之后 通过 语音解码ic 播放出来 


这个过程中有2个部分比较模糊

1.  代码上看起来很模糊,封装得太密了,目前只是大概的看出 一条 管道  WIFI-->http_stream-->mp3_decoder-->i2s_stream-->[codec_chip]

2.  我在百度上 同样创建了应用,使用应用的key 但是 就是不成功~~~~ 晕哥 是不是还有其他要注意的地方 我遗漏了呢? 这方面能给个大概的介绍吗?
1_20180709-2059.png

#5 Re: ESP32/ESP8266 » 简单说一说 baidu 语音合成与识别 api 使用流程 » 2018-07-10 08:46:10

晕哥,make menuconfig 然后 填入 WIFI SSID 和密码  还有下面信息。

API Key: FvNYWABLHgYC3aMMgaO7j5Qh
Secret Key: uc1IRoK4yMBqvAnmizT0ZZ7nR5OgYREU

然后make flash monitor 。

启动ESP32 之后 会有什么效果呢?


另外你的第2步  是什么意思???

2. 第二步, 填入上面获取的令牌 和 txt 文字, 生成语音文件。
http://tsn.baidu.com/text2audio?tex=%E6 … 5-11175544


第二步  具体要做什么? 还是ESP32启动后自己完成了?

#6 ESP32/ESP8266 » 阔别两个月,再度归来,请问play_baidu_speech_mp3_example.c 这个例程如何启动? » 2018-07-09 17:55:27

mkseven32
回复: 17

如图, 按照read me 操作, 填入
WIFI SSID  密码 和BAIDU_ACCESS_KEY  ,BAIDU_SECRET_KEY 这些信息。

但是 启动后,总是出现 access token 错误。

2018-07-09_174928.png

#7 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 请问 有一个关于 mtk 2523芯片的问题,应该发在哪里好? » 2018-05-25 17:11:40

晕哥 说:

如果是开发板,可以问下供应商。
如果是自己hack产品,那有可能芯片设置了秘钥,比如NUC972就有这个东东,
要把你的程序用同一把钥匙加密,再烧入flash,才能被启动。


MTK 的东西真心的 坑,

如果你硬件只连接一个串口,而且是串口0,那么打印到这里就没有输出了。
而官方开发板中, 打印信息却可以从MK20 的USB 口打印输出,这是因为应用程序打印的log 是通过log_uart_init()来设定,而例程中 默认情况下是使用串口2.

所以需要在system_init() 函数中 将log 打印串口设置为串口0 ,那么system log 打印完 就会紧接着打印 应用层的log

#8 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 请问 有一个关于 mtk 2523芯片的问题,应该发在哪里好? » 2018-05-25 13:57:07

晕哥 说:

是在应用升级吗?把bootloader干掉了?
试着把升级前后的flash读出来,在电脑上面用比较工具试一试,
是不是写错地址了。

还没开始升级呢,~~~它提供了一个例程, 我没有做任何修改, 安装步骤编译好之后,烧录程序到芯片上。

然后芯片就起不来了~~~~


▒▒▒
F1: 5004 0000
00: 1029 0001
01: 1005 0000
U0: 0000 0001 [0000]
T0: 0000 3B6E
Boot failed, reset ...


F1: 0000 0000
V0: 0000 0000 [0001]
00: 1029 0001
01: 0000 0000
U0: 0000 0001 [0000]
T0: 0000 3B89
Leaving the BROM



后面格式化 flash ,重新烧录 其他程序(之前正常的普通程序,点亮LED灯) , 结果也是显示boot failed.....

我就奇怪 难道例程 本身就有问题 ????

但退一万步, 就算例程有问题~~~

那么难道还会 一烧录 程序  ,芯片就坏掉了????

#9 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 请问 有一个关于 mtk 2523芯片的问题,应该发在哪里好? » 2018-05-25 09:29:06

mkseven32
回复: 5

mtk 的SDK 下的例程,为了尝试FOTA 功能, 程序烧录进去后 发现 bootloader 起不来~~~然后烧录其他例程 也都是起不来~~~~

#10 Re: ESP32/ESP8266 » 请问 大家有没有 做过嵌入式项目 持续集成? » 2018-05-21 08:38:54

KingJin 说:

我们公司用gitlab ci

嵌入式系统吗?


能否指点一下~~~

#11 ESP32/ESP8266 » 请问 大家有没有 做过嵌入式项目 持续集成? » 2018-05-17 15:02:23

mkseven32
回复: 9

如题 ,谁有嵌入式项目的 持续集成  例程?

网上都是基于 web  java 项目。。。。很少看到嵌入式 有持续集成的 案例~~~·

#12 ESP32/ESP8266 » ESP-ADF 事件的添加和配置。 » 2018-05-15 17:58:12

mkseven32
回复: 3

在ESP-ADF 的框架下, 软件编程将 要实现的功能  虚拟化, 串了一串, 成为了 一条 “管道”。

“管道” 在大while 下 串流不息~~  而在这个过程中如果触发了某一件事(需要做成对应的处理,例如打印个消息),可以添加和配置event,
从而在大while 下面 对event 传上来的msg 进行解析获取具体什么事情发生了。。。


第一步: 配置event,然后 通过初始化 这个配置 ,从而获取到该event 的句柄 (这个句柄 后期用于设置监听者用)

    audio_event_iface_cfg_t evt_cfg = AUDIO_EVENT_IFACE_DEFAULT_CFG();
    audio_event_iface_handle_t evt = audio_event_iface_init(&evt_cfg);

AUDIO_EVENT_IFACE_DEFAULT_CFG(); 的具体配置信息如下:
其实event 就是一个queue ,配置的一些queue的size ,超时时间,回调函数等等

#define DEFAULT_AUDIO_EVENT_IFACE_SIZE  (5)

#define AUDIO_EVENT_IFACE_DEFAULT_CFG() {                   \
    .internal_queue_size = DEFAULT_AUDIO_EVENT_IFACE_SIZE,  \
    .external_queue_size = DEFAULT_AUDIO_EVENT_IFACE_SIZE,  \
    .queue_set_size = DEFAULT_AUDIO_EVENT_IFACE_SIZE,       \
    .on_cmd = NULL,                                         \
    .context = NULL,                                        \
    .wait_time = portMAX_DELAY,                             \
    .type = 0,                                              \
}

第二步: 设置监听者, 监听者有多种情况,

有些是已经被包含在”管道“ 中角色,
如在”管道“ pipeline 包含内容:  [Bluetooth]-->bt_stream_reader-->i2s_stream_writer-->[codec_chip] 中, 需要监听bt 状态触发的事件。
则需要使用 pipeline 的 设置监听函数

audio_pipeline_set_listener(pipeline, evt);

有些是没有包含在管道中的 ,如触摸按键 这样外设。则采用下面函数设置监听者。

audio_event_iface_set_listener(esp_periph_get_event_iface(), evt);

esp_periph_get_event_iface() 得到的是一个 也是一个event 的句柄 audio_event_iface_handle_t
这个函数简化就是 set(a, listener);
将 event a 添加到 the listener 里面, 后面 我们就可以从 listen 中监听到a event。 (这里的listen 和 listener 是不同的)

第三步:在 大while 下 开始解析 event 传回来的msg

audio_event_iface_msg_t msg;
esp_err_t ret = audio_event_iface_listen(evt, &msg, portMAX_DELAY);

先看看 msg 结构体包含哪些信息

/**
 * Event message
 */
typedef struct {
    int cmd;                /*!< Command id */
    void *data;             /*!< Data pointer */
    int data_len;           /*!< Data length */
    void *source;           /*!< Source event */
    int source_type;        /*!< Source type (To know where it came from) */
    bool need_free_data;    /*!< Need to free data pointer after the event has been processed */
} audio_event_iface_msg_t;

例子:

  if (msg.source_type == AUDIO_ELEMENT_TYPE_ELEMENT && msg.source == (void *) bt_stream_reader
                && msg.cmd == AEL_MSG_CMD_REPORT_MUSIC_INFO)

cmd ====>这个的值其实就是event id,它的内容主要根据source_type 来定,source_type 决定是element 还是 stream 还是什么,
而对应的每个element(或者stream)都是有对应的event id,
如果是AUDIO_ELEMENT_TYPE_ELEMENT 则cmd 分为以下几类,
/**
* Audio element action command, process on dispatcher
*/
typedef enum {
    AEL_MSG_CMD_NONE                = 0,
    AEL_MSG_CMD_ERROR               = 1,
    AEL_MSG_CMD_FINISH              = 2,
    AEL_MSG_CMD_STOP                = 3,
    AEL_MSG_CMD_PAUSE               = 4,
    AEL_MSG_CMD_RESUME              = 5,
    AEL_MSG_CMD_DESTROY             = 6,
    // AEL_MSG_CMD_CHANGE_STATE        = 7,
    AEL_MSG_CMD_REPORT_STATUS       = 8,
    AEL_MSG_CMD_REPORT_MUSIC_INFO   = 9,
    AEL_MSG_CMD_REPORT_CODEC_FMT    = 10,
} audio_element_msg_cmd_t;

但是根据 source_type 的不同,如果是PERIPH_ID_BLUETOOTH ,则cmd 又可以是以下的id
例如:

 if (msg.source_type == PERIPH_ID_BLUETOOTH
                && msg.source == (void *)bt_periph) {
            if (msg.cmd == PERIPH_BLUETOOTH_DISCONNECTED || msg.cmd == PERIPH_BLUETOOTH_AUDIO_SUSPENDED)

这些分类 主要是蓝牙的事件:

/**
 * brief      Bluetooth peripheral event id
 */
typedef enum {
    PERIPH_BLUETOOTH_UNKNOWN = 0,       /*!< No event */
    PERIPH_BLUETOOTH_CONNECTED,         /*!< A bluetooth device was connected */
    PERIPH_BLUETOOTH_DISCONNECTED,      /*!< Last connection was disconnected */
    PERIPH_BLUETOOTH_AUDIO_STARTED,     /*!< The audio session has been started */
    PERIPH_BLUETOOTH_AUDIO_SUSPENDED,   /*!< The audio session has been suspended */
    PERIPH_BLUETOOTH_AUDIO_STOPPED,     /*!< The audio session has been stopped */
} periph_bluetooth_event_id_t;

data====> 主要是element 的状态

/**
 * Audio element status report
 */
typedef enum {
    AEL_STATUS_NONE                     = 0,
    AEL_STATUS_ERROR_OPEN               = 1,
    AEL_STATUS_ERROR_INPUT              = 2,
    AEL_STATUS_ERROR_PROCESS            = 3,
    AEL_STATUS_ERROR_OUTPUT             = 4,
    AEL_STATUS_ERROR_CLOSE              = 5,
    AEL_STATUS_ERROR_TIMEOUT            = 6,
    AEL_STATUS_ERROR_UNKNOWN            = 7,
    AEL_STATUS_INPUT_DONE               = 8,
    AEL_STATUS_INPUT_BUFFERING          = 9,
    AEL_STATUS_OUTPUT_DONE              = 10,
    AEL_STATUS_OUTPUT_BUFFERING         = 11,
    AEL_STATUS_STATE_RUNNING            = 12,
    AEL_STATUS_STATE_PAUSED             = 13,
    AEL_STATUS_STATE_STOPPED            = 14,
    AEL_STATUS_MOUNTED                  = 15,
    AEL_STATUS_UNMOUNTED                = 16,
} audio_element_status_t;

source =====> 这一项其实就是 一开始在做”管道“ 注册时,各个组件的 句柄
如注册 时

    audio_pipeline_register(pipeline, bt_stream_reader, "bt");
    audio_pipeline_register(pipeline, i2s_stream_writer, "i2s");

那么bt_stream_reader和i2s_stream_writer 都将是source的 可选值之一。

source_type ====》就是触发事件的 element 的 id
首先分为5大类

typedef enum {
    AUDIO_ELEMENT_TYPE_UNKNOW = 0x01<<ELEMENT_SUB_TYPE_OFFSET,
    AUDIO_ELEMENT_TYPE_ELEMENT= 0x01<<(ELEMENT_SUB_TYPE_OFFSET+1),
    AUDIO_ELEMENT_TYPE_PLAYER = 0x01<<(ELEMENT_SUB_TYPE_OFFSET+2),
    AUDIO_ELEMENT_TYPE_SERVICE = 0x01<<(ELEMENT_SUB_TYPE_OFFSET+3),
    AUDIO_ELEMENT_TYPE_PERIPH = 0x01<<(ELEMENT_SUB_TYPE_OFFSET+4),
} audio_element_type_t;

在这5大类中每一类都有衍生, 例如硬件外设,就具体分了下面几种。

/**
 * @brief Peripheral Identify, this must be unique for each peripheral added to the peripherals list
 */
typedef enum {
    PERIPH_ID_BUTTON    = AUDIO_ELEMENT_TYPE_PERIPH + 1,
    PERIPH_ID_TOUCH     = AUDIO_ELEMENT_TYPE_PERIPH + 2,
    PERIPH_ID_SDCARD    = AUDIO_ELEMENT_TYPE_PERIPH + 3,
    PERIPH_ID_WIFI      = AUDIO_ELEMENT_TYPE_PERIPH + 4,
    PERIPH_ID_FLASH     = AUDIO_ELEMENT_TYPE_PERIPH + 5,
    PERIPH_ID_AUXIN     = AUDIO_ELEMENT_TYPE_PERIPH + 6,
    PERIPH_ID_ADC       = AUDIO_ELEMENT_TYPE_PERIPH + 7,
    PERIPH_ID_CONSOLE   = AUDIO_ELEMENT_TYPE_PERIPH + 8,
    PERIPH_ID_BLUETOOTH = AUDIO_ELEMENT_TYPE_PERIPH + 9,
} esp_periph_id_t;

其余两个值暂时还没有例子可循, 说到这里发现自己还是没有深入的理解,感觉更多只是在贴代码~~~

希望有高手可以帮忙斧正!

#13 Re: ESP32/ESP8266 » 请问AVRCP 中命令值的定义 在哪里? » 2018-05-10 17:09:00

晕哥 说:

https://www.silabs.com/documents/login/application-notes/AN986.pdf

Note:
Not all devices support all command code. For example, iOS devices do not support remote volume control
using 0x41, 0x42, or 0x43 commands. This is a limitation of iOS and not an iWRAP firmware problem.

注意:
并非所有设备都支持所有命令代码。例如,iOS设备不支持远程音量控制
使用0x41,0x42或0x43命令。这是iOS的限制,而不是iWRAP固件问题。

今天强制 使用0x41 和0x42  这样的命令,发现 苹果5 播放音乐确实是不支持。

但我有一个疑问,那作为CT 设备  它本事应该支持, (在他不清楚TG 是否为IOS 设备情况 它应该支持才对,不然如果是安卓的手机来连接 它呢)?

#14 ESP32/ESP8266 » 如何解决 MinGW 编译helloworld 出错的尴尬~~~ stddef.h: No such file or directory » 2018-05-10 16:21:05

mkseven32
回复: 0

这个问题 是看到 const char *esp_get_idf_version();的函数

一开始 用了一个 临时char * 指针去接
char *version_temp = esp_get_idf_version();
结果编译时报错了!

虽然知道 函数返回的是常量不可变的值, 但想想 我就做个变量去接你, 你可不可变又有什么关系呢, 但是就编译错误。
最后虽然是 按照下面的写法 编译通过了, 但是一直想不出个所以然
char *version_temp = esp_get_idf_version();


所以先编个C 简单的问题 试试, 安装了MinGW 以为应该就可以了, 而且gcc -v 都出来信息了。

但是一个简简单单的helloworld  ,编译时就是出错, 一直显示 stddef.h 找不到这样 文件,  日了狗了 ,一来我没有调这个啊头文件啊,二来搜了一下这个文件确实不在。

#include "stdio.h"
void main()
{
	printf("helloworld\n");
}

想起mingw 安装时 当时选包的时候 自己不知道勾哪些,就只选了一些,应该是没装齐!!!
那到底要安装 哪些包才能 满足c 编译器的最基本要求呢?
具体参考
http://www.mingw.org/wiki/InstallationHOWTOforMinGW

可是有些你会发现真的在mingw 安装界面找不到 ~~~~

最后重新看回 get-started  http://www.mingw.org/wiki/Getting_Started
这个好,里面推荐了 使用mingw-get install gcc  直接下载关联的包,然后安装 和linux 下的操作一样,这个我喜欢
(记得关掉mingw 安装界面)


你以为 这样就OK 了吗?  没有 日了个狗啦~~~~ 一天了,就为这事忙活了一天,但是还是没有解决
2018-05-10_161715.png

#15 Re: ESP32/ESP8266 » esp32怎么查看当前的sdk版本号? » 2018-05-10 09:38:58

参考这个
https://www.esp32.com/viewtopic.php?t=4707

如果是在控制窗口 中  可以通过git 命令

git describe

记得是在git 仓库下执行这个命令

如果是运行程序中想打印的话,具体的做法如下:

添加头文件

#include “esp_system.h”

然后添加代码:

const char *version_temp = esp_get_idf_version();

然后打印这个version_temp 就可以了

#16 ESP32/ESP8266 » ESP-ADF 添加按键外设流程 粗略理解分享 » 2018-05-09 17:54:56

mkseven32
回复: 2

经过一级级的封装,ESP-ADF 几乎已经看不出底层如何配置硬件。在这里说说一些基本外设的添加流程.

目前开发包提供的外设主要有:WIFI,SD卡,按键,触摸,控制台

总体流程 如下:

阶段一:初始化外设=======》阶段二: 配置对应需要添加外设=========》阶段三: 启动外设

以下添加按键来进行  举例说明:

阶段一 工作:

esp_periph_config_t  periph_cfg = { 0 };
esp_periph_init(&periph_cfg);

esp_periph_config_t 结构体如下,按照个人的理解这个结构体 其实就是容器,它存储着一大堆句柄, 而每一个handle都是由配置的外设,经初始化后得到。

所以初始化的动作 就是清空这个容器

/**
 * @brief Common peripherals configurations
 */
typedef struct {
    void*                     user_context; /*!< peripherals context data */
    esp_periph_event_handle_t event_handle; /*!< The Peripheral events handle */
} esp_periph_config_t;

阶段二 工作:

periph_button_cfg_t btn_cfg = {
        .gpio_mask = GPIO_SEL_36 | GPIO_SEL_39
    };

esp_periph_handle_t button_handle = periph_button_init(&btn_cfg);

开始配置按键, 其实就是对periph_button_cfg_t 的结构体进行赋值, 而这个结构体对应每一个外设 都有特定的结构体。
按键的结构体 periph_button_cfg_t 的内容如下, 赋值完成后 就调用 初始化函数从而得到一个handle, 这个handle就是后面存在容器里的东西

/**
 * @brief   The Button peripheral configuration
 */
typedef struct {
    uint64_t gpio_mask;     /*!< GPIO Mask using for this Button peripheral, it is BIT(GPIO_NUM), ex: GPIO_SEL_36 | GPIO_SEL_36 */
    int long_press_time_ms; /*!< Long press duration in milliseconds, default is 2000ms */
} periph_button_cfg_t;

阶段三 工作:

esp_periph_start(button_handle);

直接调用esp_periph_start(); 函数 把刚刚初始化外设得到的handle 存进容器,也就是开启了外设。


其他信息备注:

按键目前支持 短按,短按释放,长按,长按释放四种识别。

/**
 * @brief      Peripheral button event id
 */
typedef enum {
    PERIPH_BUTTON_UNCHANGE = 0, /*!< No event */
    PERIPH_BUTTON_PRESSED,      /*!< When button is pressed */
    PERIPH_BUTTON_RELEASE,      /*!< When button is released */
    PERIPH_BUTTON_LONG_PRESSED, /*!< When button is pressed and kept for more than `long_press_time_ms` */
    PERIPH_BUTTON_LONG_RELEASE, /*!< When button is released and event PERIPH_BUTTON_LONG_PRESSED happened */
} periph_button_event_id_t;

最后在大while里面去等待 msg 的到来!

if (msg.source_type == PERIPH_ID_BUTTON
					  && msg.cmd == PERIPH_BUTTON_PRESSED
					  && msg.source == (void *)button_handle)
{
    if((int) msg.data == LYRAT_BUTTON_REC)
}

msg.source_type  -=====》外设类别 按键
msg.cmd  =====》 识别按键 动作
msg.source ====》 按键 的handle
msg.data  =====》 按键GPIO 定义宏, 这个LYRAT_BUTTON_REC 是我自己重新定义 的 #define LYRAT_BUTTON_REC    GPIO_NUM_36 这个是最接近底层的一句了。

至于消息如何传上来,如果设置开启消息传输 这些我还没整明白,希望后面有人可以补上!!!!

#17 Re: ESP32/ESP8266 » 请问AVRCP 中命令值的定义 在哪里? » 2018-05-08 17:04:42

晕哥 说:

https://github.com/bluekitchen/btstack/blob/master/src/classic/avrcp.h

找到定义了:

    AVRCP_OPERATION_ID_PLAY = 0x44,
    AVRCP_OPERATION_ID_STOP = 0x45,
    AVRCP_OPERATION_ID_PAUSE = 0x46,
    AVRCP_OPERATION_ID_REWIND = 0x48,
    AVRCP_OPERATION_ID_FAST_FORWARD = 0x49,
    AVRCP_OPERATION_ID_FORWARD = 0x4B,
    AVRCP_OPERATION_ID_BACKWARD = 0x4C,
    AVRCP_OPERATION_ID_UNDEFINED = 0xFF

看来这些值是不能随便改的, 看你是不是没有重新编译成功, 或者烧录有问题?

是啊, 我对比了其他方案的SDK ,发现其他家的 也是这样定义, 所以这个应该是profile 规定的!

但是看了一下午profile ,没找到这些命令 没有找到具体说明~~~

#18 ESP32/ESP8266 » 请问AVRCP 中命令值的定义 在哪里? » 2018-05-08 16:25:37

mkseven32
回复: 7

今天看来 A2DP 的例程, 由于之前没有接触过 经典蓝牙, 对AVRCP 的profile不熟悉。。

看到一点 关于 控制命令的, 发现没有音量控制的。 想加个音量控制的上去,
但是看到 这些命令的值 挺特别, 应该是profile 规定的~~~ 于是 去看AVRCP 的profile  找了半天 都没找到 这些命令的 值 如何规定~~~~

/// AVRC passthrough command code
typedef enum {
    ESP_AVRC_PT_CMD_PLAY = 0x44,                 /*!< play */
    ESP_AVRC_PT_CMD_STOP = 0x45,                 /*!< stop */
    ESP_AVRC_PT_CMD_PAUSE = 0x46,                /*!< pause */
    ESP_AVRC_PT_CMD_FORWARD = 0x4B,              /*!< forward */
    ESP_AVRC_PT_CMD_BACKWARD = 0x4C,             /*!< backward */
    ESP_AVRC_PT_CMD_REWIND = 0x48,               /*!< rewind */
    ESP_AVRC_PT_CMD_FAST_FORWARD = 0x49          /*!< fast forward */
} esp_avrc_pt_cmd_t;

请各位熟悉AVRCP 的指点指点。

另外有个奇怪的问题, 我尝试将play 命令 的值 修改为0x40 ,编译后下载,发现这个命令还是有效~~~~
这就奇怪了, 如果这个值没有意义  为啥 又要定这样 特别的值呢?

#19 Re: ESP32/ESP8266 » 又get 到新技能----C99 标准中结构体初始化 » 2018-05-08 16:14:44

晕哥 说:

感谢楼主分享!

还有这个: 装个VC2017试一试, 看看对C99的变长数组(柔性数组,零长数组)支持如何?

有些开源项目(如littevgl)大量用到变长数组(即用变量作为数组初始化长度),
用VC根本就编译通不过,
只能借道mingw: 一步一步分享在Windows QtCreator/Mingw平台编译运行调试LittleVGL

感觉晕哥 无所不能啊!!!

#20 ESP32/ESP8266 » 又get 到新技能----C99 标准中结构体初始化 » 2018-05-08 09:58:03

mkseven32
回复: 5

ESP-ADF 的例程中采用了pipeline 的设计模式(就是管道)。

具体还没搞清楚它的原理,相关链接如下,据说蕴藏着一种强大的哲学思想,后面有机会慢慢学习

https://blog.csdn.net/yanghua_kobe/article/details/7561016

https://coolshell.cn/articles/1351.html

下面说说 在看源码的时候,发现一个疑惑的点 “.”   对就是结构体初始化的问题~~~~

在ESP-ADF 的例程中充满了大量 的结构体初始化赋值。 如下:

一个结构体 采用一个宏的初始化方法, 这样看起来简洁 易懂~~~但是深究下去就有点奇怪了

i2s_stream_cfg_t i2s_cfg = I2S_STREAM_CFG_DEFAULT();

结构体定义

typedef struct {
    audio_stream_type_t     type;               /*!< Type of stream */
    i2s_config_t            i2s_config;         /*!< I2S driver configurations */
    i2s_pin_config_t        i2s_pin_config;     /*!< I2S driver hardware pin configurations */
    i2s_port_t              i2s_port;           /*!< I2S driver hardware port */
} i2s_stream_cfg_t;

宏定义

#define I2S_STREAM_CFG_DEFAULT() {                                              \
    .type = AUDIO_STREAM_WRITER,                                                \
    .i2s_config = {                                                             \
        .mode = I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX,                    \
        .sample_rate = 44100,                                                   \
        .bits_per_sample = 16,                                                  \
        .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,                           \
        .communication_format = I2S_COMM_FORMAT_I2S,                            \
        .dma_buf_count = 3,                                                     \
        .dma_buf_len = 300,                                                     \
        .use_apll = 1,                                                          \
        .intr_alloc_flags = ESP_INTR_FLAG_LEVEL2,                               \
    },                                                                          \
    .i2s_pin_config = {                                                         \
        .bck_io_num = IIS_SCLK,                                                 \
        .ws_io_num = IIS_LCLK,                                                  \
        .data_out_num = IIS_DSIN,                                               \
        .data_in_num = IIS_DOUT,                                                \
    },                                                                          \
    .i2s_port = 0,                                                              \
}

自己C语言功底一般,从来没见过这种“.” 的赋值方式~~~,群里问了一下大牛们,大牛说看看C99标准吧~~~~

这种结构体的初始化是C99标准中定义的。 目前了解到的 这样初始化的作用是:
1. 可以不用按顺序对结构体的小项进行初始化
2. 可以选择性的对结构体小项进行初始化

相关连接:
http://blog.chinaaet.com/jihceng0622/p/37285

#21 Re: ESP32/ESP8266 » ESP32 如何使用固件烧录工具 下载固件? » 2018-05-05 10:20:38

晕哥 说:

感谢分享!

这个的加密如何做?

加密还没看, 英语能力一般般,看起文档来 挺吃力的~~~

#22 Re: ESP32/ESP8266 » 如何 使用eclipse 搭建esp32 开发环境? » 2018-05-05 09:55:49

晕哥 说:

Import New Project
Eclipse makes use of the Makefile support in ESP-IDF. This means you need to start by creating an ESP-IDF project. You can use the idf-template project from github, or open one of the examples in the esp-idf examples subdirectory.
Once Eclipse is running, choose File -> Import...
In the dialog that pops up, choose "C/C++" -> "Existing Code as Makefile Project" and click Next.
On the next page, enter "Existing Code Location" to be the directory of your IDF project. Don't specify the path to the ESP-IDF directory itself (that comes later). The directory you specify should contain a file named "Makefile" (the project Makefile).
On the same page, under "Toolchain for Indexer Settings" choose "Cross GCC". Then click Finish.

我估计他想表达的意思是,
别选错目录了,不能选 esp-idf 根目录,
你选一个 example下面的工程目录。
这里确实有点歧义。

嗯,但一开始我选example下面的工程目录,看里面也有Makefile ,同时也看不出有什么关联性~~~

没想到真的是选整个 源码包 才可以1!!

谢谢你!

#23 Re: ESP32/ESP8266 » ESP32 如何使用固件烧录工具 下载固件? » 2018-05-04 17:51:27

晕哥 说:

应该还有一个  partitions_singleapp.bin

http://iot-bits.com/esp32/esp32-flash-download-tool-tutorial/

哎呀太粗心了!!!原来那个就是!!!!


不过这个帖子里面 partition_table 的偏移 不对0x4000 应该 改成0x8000,  我专门试了一下 helloworld 的例子, 如果是0x4000就会出现下面的错误

2018-05-04_173805.png


另外总结几点给大家做参考后面的坛友可以参考一下


1. 如果是单应用固件的话,offset 的设置  如下:

Bootloader @ 0x1000
Partition table @ 0x8000
App at 0x10000 (or as specified in partition table)


应用固件最好是 0x10000之后, 或者是紧跟在partition table 后面。

2. 同个工程,如果只是改变应用层 软件, 那么第二次烧录可以不用再烧录 bootloader 和partition table
单独烧录 application 的固件就可以了。

3. 在toolchain 下面 可以使用 make partition_table 查看目前分区表的内容

#24 Re: ESP32/ESP8266 » ESP32 如何使用固件烧录工具 下载固件? » 2018-05-04 16:23:02

晕哥 说:

这个表示没用过,因为还没量产过.
你搞定之后可以分享一下。

2_20180504-0420.png

按照上面的配置, 配置了bootloader 的bin 和 应用层固件的bin ,但是烧录成功后,重启发现跑不起来~~~
看来不单单是配置好偏移就可以了, 可能还有其他的配置!

2018-05-04_155817.png

#25 Re: ESP32/ESP8266 » ESP32 如何使用固件烧录工具 下载固件? » 2018-05-04 15:39:47


晕哥   

1.  bootloader  可以只烧录一次 对吗? 如果后面只改应用层固件的话?
2.  应用层固件烧录时, 对应偏移出 bootloader  的位置 就可以了是吧?
3. 我生成 的bin 有两个, 这俩个bin 的偏移要如何设置? partitions_singleapp.bin   和play_bt_music.bin ??

#26 Re: ESP32/ESP8266 » ESP32低功耗蓝牙连接iPhone手机,断开后如何自动连接? » 2018-05-04 14:37:51

晕哥 说:

容不容易不知道,但是我认为蓝牙2.0(经典蓝牙)的断线重连是从机实现的,没有证明,个人认为。

esp-adf 的example 中  play_bt_muisc_sink  貌似断开后是连不到的!!


比如跑起来之后 连接到手机,开始播歌,esp32可以正常播放歌曲,  然后隔一会来一个电话或者手机把蓝牙关了一会再打开,

这是打印出来的log 显示 失去连接, 后面手机再次打开了蓝牙 不会自动连接上去~~~

#27 ESP32/ESP8266 » ESP32 如何使用固件烧录工具 下载固件? » 2018-05-04 14:31:27

mkseven32
回复: 9

一般情况下,我们要不就是在工具链msys32 中终端窗口进行 make flash ;

另外一种办法就是,使用eclipse IDE ,然后在eclipse 新建一个build target 进行build 后烧录,这其实也是使用make flash。

那么问题来了,如果是使用固件烧录工具进行量产烧录呢?

在乐鑫提供的操作文档中 有这么一段:
aa.png

而我编译之后的 只能看到 以下几个bin 文件
ff.png




其中 Bootloader.bin  可以在build/bootloader 文件夹下拿到,
但是其他三个 bin 文件呢???它们和我 build 文件夹下的 partitions_singleapp.bin 和 play_bt_music.bin 有什么关系呢?
partitions_esp_audio.bin
esp32-audio-app.bin
audio-esp.bin

另外,bootloader 没有改变情况下, 是不是可以只烧录 应用的固件,bootloader bin 可以不用每次都烧录吧?

#28 Re: ESP32/ESP8266 » 如何 使用eclipse 搭建esp32 开发环境? » 2018-05-04 14:03:10

晕哥 说:

1. 实际上只要执行 eclipse -> 从Makefile 导入工程, 配置好环境变量就可以了(ADF_PATH/IDF_PATH, PATH)
esp-adf 的 example只要配置 ADF_PATH
esp-idf 的 example只要配置 IDF_PATH

那个python脚本生成 eclipse工程没有用过。

4. 【could not be resolved】这种问题你不去理他也没关系, 因为这是源码导航/浏览用的,和编译系统没有关系。


但目前 对于第二点  建立 工程的时候  exiting code location 的问题还是不明白

参考网上其他人的成功案例 http://nevel.cnblogs.com/p/6290903.html 也是千差万别~~~


谢谢!


这就让我 更加 纠结  官方教程中
•On the next page, enter “Existing Code Location” to be the directory of your IDF project. Don’t specify the path to the ESP-IDF directory itself (that comes later). The directory you specify should contain a file named “Makefile” (the project Makefile).

到底是啥子意思~~~

#29 Re: ESP32/ESP8266 » 如何 使用eclipse 搭建esp32 开发环境? » 2018-05-04 13:46:52

晕哥 说:

Create a copy of the mingw32-make exe. Rename mingw32-make to make.

按上面办法,再不行换一台干净点的电脑再测试吧。

就差 换电脑了!!! 不过最后还是让我折腾出来了!!!

总结几点如下 :

1.  之前安装过visual studio 和 visual GDB ,想使用这样的IDE 组合来开发, 造成电脑里面其他地方也有make.exe 存在, 但是eclipse 的PATH 里面绝对没有添加这些路径进去, 晕哥说让我将其他make.exe 改名, 改了之后也不行, 我甚至将 visual studio  和visual GDB 都删 了, 但是编译依然出错...
     这就证明了 eclipse 的PATH 如果没有设置,build 时是不会去找这些其他的make.exe 的

2. 重新 一步步 新建工程, 在 第一步import -> exiting code location 的 地方 换了个方式, 选择 esp-adf (如果你开发的esp-idf ,相应的换esp-idf)的源代码路径,这个和get-started guide 中的说明 貌似是相驳的 ,如下所示,

另外其他设置还是和之前的配置一样(具体参考get-started guide  Eclipse IDE on Windows

     

Import New Project
...
•Once Eclipse is running, choose File -> Import…
•In the dialog that pops up, choose “C/C++” -> “Existing Code as Makefile Project” and click Next.
•On the next page, enter “Existing Code Location” to be the directory of your IDF project. Don’t specify the path to the ESP-IDF directory itself (that comes later). The directory you specify should contain a file named “Makefile” (the project Makefile).
...

这段描述 我一直很奇怪 ,到底是选择那个作为exiting code location呢? 这次选择最顶层 esp-adf , 居然编译的时候 就可以了~~~
之前是选择到esp-adf 具体的某个example 为exiting code location, 当时也是考虑在example 目录下是有make 文件的,按道理是可以调用起来~~但就是死活不行~~~~

3.  get-started Guide 中 还有一点关于C/C++ build 配置
   

Project Properties

•The new project will appear under Project Explorer. Right-click the project and choose Properties from the context menu.


•Click on the “C/C++ Build” properties page (top-level):
◦Uncheck “Use default build command” and enter this for the custom build command: python ${IDF_PATH}/tools/windows/eclipse_make.py.

      事实上 我按照默认的 build command 使用 make 而不是使用python ${IDF_PATH}/tools/windows/eclipse_make.py.
      也照样可以编译 通过, 这到底是什么原因呢? 感觉乐鑫做的文档还真是到处是坑~~~


4. 关于 .c 文件中 存在的部分 Symbol 'CONFIG_LOG_DEFAULT_LEVEL' could not be resolved  ,build的时候也不会报错,也是编译得过去~~这就奇怪了,如果没有resolved 又怎么能编译过呢?

#30 Re: ESP32/ESP8266 » 如何 使用eclipse 搭建esp32 开发环境? » 2018-05-04 10:15:03

晕哥 说:

虽然你没手动添加, 但是有可能存在系统的环境变量里面。

C 盘 D 盘,E 盘的都改成 make-d了。 但编译后还是出错


10:10:58 **** Build of configuration Default for project pipeline_bt_sink ****
python F://Embedded//esp-adf//esp-idf/tools/windows/eclipse_make.py flash 
make: *** No rule to make target 'flash'.  Stop.
Running make in 'F:/Embedded/esp-adf/examples/player/pipeline_bt_sink/main'

10:10:58 Build Failed. 1 errors, 0 warnings. (took 402ms)

#31 Re: ESP32/ESP8266 » 如何 使用eclipse 搭建esp32 开发环境? » 2018-05-04 09:50:40

晕哥 说:

https://stackoverflow.com/questions/24198380/error-program-make-not-found-in-path-when-i-try-to-build-c-project-in-eclipse

Create a copy of the mingw32-make exe. Rename mingw32-make to make. Include the path to the executable in PATH variable. Solved my issue.

这个问题和 make.exe 的搜素路径有关系.
你用 everything 把 电脑里面所有的 不是 mingw32 里面的make.exe 重命名试一试。


所有的 不是 ????    mingw32 ???  是指msys32 文件下的mingw32的文件夹 吗 ,可是那里面没有make.exe 啊 》?》

这是搜索出来的结果,在C盘有几个make  但是这些我都没有添加 进eclipse 的路径下。
make.png

您那边的环境 下 只有 工具链 下一个make.exe  吗?

#32 ESP32/ESP8266 » 如何 使用eclipse 搭建esp32 开发环境? » 2018-05-03 16:40:19

mkseven32
回复: 11

参考 https://whycan.cn/t_141.html  和http://esp-idf.readthedocs.io/en/latest/get-started/eclipse-setup.html

一步步 按照来做, 还是无法编译~~~~

请各位帮忙看一下配置,具体哪里设置错了??

ESP32 开发包位置====>>>

1. esp-adf located in :F:\Embedded\esp-adf
2. esp-idf located in :F:\Embedded\esp-adf\esp-idf
3. msys32 toolchain located in :F:\msys32

Eclipse 设置 ====>>>

1. import project exiting code location: F:\Embedded\esp-adf\examples\player\pipeline_bt_sink

2. Toolchain editor :Cygwin GCC
     1.png

3. C/C++ Build->Environment :
     ADF_PATH ==== F://Embedded//esp-adf
     IDF_PATH ==== F://Embedded//esp-adf//esp-idf
     PATH ==== F:\msys32\usr\bin;F:\msys32\mingw32\bin;F:\msys32\opt\xtensa-esp32-elf\bin;
     BATCH_BUILD ==== 1
     3_20180503-0434.png
     
4. C/C++ Build->Builder Settings :
     Build command: python ${IDF_PATH}/tools/windows/eclipse_make.py

5. C/C++ General -> Preprocessor Include Paths, Macros, etc. :设置参考下图
     3_20180503-0434.png

     4.png

     6.png

build project 执行 的结果 还是依然 是 显示没有对应的rule

15:33:08 **** Incremental Build of configuration Default for project pipeline_bt_sink ****
make all 
make: *** No rule to make target 'all'.  Stop.

15:33:08 Build Failed. 1 errors, 0 warnings. (took 752ms)

另外 还有一个问题,头文件和路径都添加了, 但是还是 出现 Symbol 'CONFIG_LOG_DEFAULT_LEVEL' could not be resolved,  的错误~~~
即便 添加了build\include\

#33 Re: ESP32/ESP8266 » 【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序 » 2018-05-03 15:07:44

晕哥 说:

你要把 build/include/ 添加到 【Paths & Symbols】

应该可以解决

CONFIG_LOG_DEFAULT_LEVEL

这个问题.

因为 ./build/include/sdkconfig.h :

#define CONFIG_LOG_DEFAULT_LEVEL 3


这个build/include/ 是指在【Paths & Symbols】下的GNU  C ===》 include 添加 本工程目录 吗? (即 ${ADF_PATH}/examples/player/pipeline_bt_sink/build/include/ )

还是 直接添加  build/include/  ????


不过两种 我都试了  , 都不可以!!! 如图所示
 

eor.png

#34 Re: ESP32/ESP8266 » 【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序 » 2018-05-03 14:54:02

晕哥 说:

我尝试了一下, 主要是对比 import 工程时 exiting code location  选择了 自己新建的目录  还是选择 esp-idf 源代码 下 具体某个example的目录

选择了自己新建的目录 =====》 你会发现 工程配置好之后 没有 .c 源文件 也没有make 文件~~~~
...

1) eclipse的工程其实是解析Makefile文件生成的,你的Makefile文件不存在,当然工程里面没有文件.
====>  没有 你看看 实际有两个工程, 我只是对比一下 在import 工程时 选择的路径不同时的区别,
如果选择 esp-idf源码 目录下 example 时  是有make 文件  和 .c 源码的

2) 不会污染,eclipse实际上还是调用 make/Makefile

====> 我说的污染 是指,esp-idf 源代码包 下载下来之后,按这样新建工程的逻辑, 后面编程时 就是直接修改 源代码包,稍微有点污染的 意味

3) Symbol 'CONFIG_LOG_DEFAULT_LEVEL' could not be resolved 这个问题还不清楚什么原因。

=====> 您建好的工程  没有这个问题?

#35 Re: ESP32/ESP8266 » 【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序 » 2018-05-03 14:41:00

晕哥 说:

https://whycan.cn/t_149.html

...

4. 打开elipse, 点击 File -> Import -> C/C++ -> Existing Code as Makefile Project,
找到 esp-idf 目录下面的 \examples\get-started\hello_world, 导入这个 hello_word项目,
右击项目, 在弹出的右击菜单里面选中最后一项Property.
在弹出的对话框中选择 C/C++ Build  -> Environment 添加一项:
IDF_PATH    ==>  F:\\esp-idf\\

修改PATH环境变量,添加: D:\\msys32\mingw32\\bin\\;D:\msys32\usr\bin\;D:\\msys32\\opt\\xtensa-esp32-elf\\bin\\xtensa-esp32-elf-gcc.exe
...

https://whycan.cn/files/members/3/QQ20180503143902.png
按上面试一试
根据实际情况修改上面的路径。


第一 : 为什么你的路径 有些是双 \\ 杆??  有些又不用???
第二 : PATH 中xtensa-esp32-elf 路径 要精确到 xtensa-esp32-elf-gcc.exe  吗?

第三 : 我设置的PATH是  F:\msys32\usr\bin;F:\msys32\mingw32\bin;F:\msys32\opt\xtensa-esp32-elf\bin
           IDF_PATH :  F:/Embedded/esp-adf/esp-idf
           ADF_PATH:  F:/Embedded/esp-adf
           还有一个 BATCH_BUILD : 1
           另外 Tool chain editor 选择的是:  Cygwin C

但是build 的时候 还是显示

14:43:15 **** Build of configuration Default for project pipeline_bt_sink ****
make flash 
make: *** No rule to make target 'flash'.  Stop.

14:43:16 Build Failed. 1 errors, 0 warnings. (took 755ms)

#36 Re: ESP32/ESP8266 » 【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序 » 2018-05-03 14:39:23

我尝试了一下, 主要是对比 import 工程时 exiting code location  选择了 自己新建的目录  还是选择 esp-idf 源代码 下 具体某个example的目录

选择了自己新建的目录 =====》 你会发现 工程配置好之后 没有 .c 源文件 也没有make 文件~~~~

选择esp-idf 源代码 下 具体某个example的目录 =====》 工程配置好之后,有对应的 .c源文件 有对应make 文件, 但是这种做法 非常不好, 这样不是污染了源代码?  不过 那个.c 文件 说实在 也是应用层的 东西,污染也就污染了~~~
ee.png


现在按照要求一步步下来, 依然 存在两个问题:
1.  build 的时候 显示 一切的 target  都不存在 rule  无论 是clean  flash  all,  但是在msys32 窗口下 一切又是正常的
2.  所有相关的头文件 以及路径都 设置好之后,   ESP_LOGI  这个宏 依然 显示 Symbol 'CONFIG_LOG_DEFAULT_LEVEL' could not be resolved , 即便我重新 建立索引  也不行~~~

#37 Re: ESP32/ESP8266 » 【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序 » 2018-05-03 14:16:59

晕哥 说:

方便把完整的命令贴出来吗?
上面是在 msys操作?

不是,这个是使用eclipse 右键工程 选择build project (另外 msys32 下的操作 都是正常的)

现在重新捋一捋~~~

Import New Project
...

•On the next page, enter “Existing Code Location” to be the directory of your IDF project. Don’t specify the path to the ESP-IDF directory itself (that comes later). The directory you specify should contain a file named “Makefile” (the project Makefile).

...

这里说的 Don’t specify the path to the ESP-IDF directory itself 具体是什么意思?别选择esp-idf example 的路径吗? 但后面又怎么写着 The directory you specify should contain a file named “Makefile” (the project Makefile).  有makefile的 不就esp-idf 具体example 文件路径下吗?


在这里 specify 路径  是自己新建一个工程目录?还是选择 esp-idf 源代码包下面的 example 路径?

#38 Re: ESP32/ESP8266 » 【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序 » 2018-05-03 14:00:04

晕哥 说:

eclipse 和 make/Makefile 完全脱离关系,
他只会去调用存在 PATH 路径的 make.exe 去生成 文件,
与你在命令行下面的执行是一样的。

改到目前,还是build 不到!

13:51:51 **** Clean-only build of configuration Default for project pipeline_bt_sink ****
python F:/Embedded/esp-adf/esp-idf/tools/windows/eclipse_make.py clean 
make: *** No rule to make target 'clean'.  Stop.
Running make in 'E:/installpacket/eclipse-cpp-photon-M6-win32/eclipse'

13:51:51 Build Failed. 1 errors, 0 warnings. (took 407ms)

几乎都是一步步按足 要求来设置~~~

#39 Re: ESP32/ESP8266 » 【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序 » 2018-05-03 11:16:31

晕哥 说:

那新的问题又出现了, 就是 为啥 running  make  是在ECLIPSE_HOME 变量路径下呢???

这个没看懂

https://whycan.cn/files/members/3/QQ20180503095142.png
我的是这样, ECLIPSE_HOME 是指 eclipse.exe 所在的目录。

我的这个路径 就是 eclipse.exe 的所在目录! 只是make 不是应该在工程文件下面进行吗?怎么跑到IDE 的路径下去呢?

#40 Re: ESP32/ESP8266 » 【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序 » 2018-05-03 09:41:20

◦Edit the PATH environment variable. Delete the existing value and replace it with C:\msys32\usr\bin;C:\msys32\mingw32\bin;C:\msys32\opt\xtensa-esp32-elf\bin (If you installed msys32 to a different directory then you’ll need to change these paths to match).

刚刚那个找不到python的问题, 应该是 在设置PATH 的时候,没有将原本里面存在的内容delete,
delete之后就没有报找不到python的错误

其实 你的建议 应该就是解决这个问题(没有删除PATH 原有内容直接添加toolchain的路径 到PATH)吧!



但是又有新的问题。

现在编译 又出现了  没有all  的rule~~~~ 试了clean  和 flash 都是同样 显示没有 这些rule。。。

09:19:22 **** Incremental Build of configuration Default for project pipeline_bt_sink ****
python F:/Embedded/esp-adf/esp-idf/tools/windows/eclipse_make.py all 
make: *** No rule to make target 'all'.  Stop.
Running make in 'E:/installpacket/eclipse-cpp-photon-M6-win32/eclipse'

09:19:23 Build Failed. 1 errors, 0 warnings. (took 1s.34ms)

那新的问题又出现了, 就是 为啥 running  make  是在ECLIPSE_HOME 变量路径下呢???
elc.png


PS:对了,那个插图的操作其实还好,就是目前这种做法 有一点 要找到对应图片的 路径 有点麻烦,点了一下图片 得到路径,却又回不去上传窗口,要关掉再点击“上传文件” 重新打开窗口

#41 Re: ESP32/ESP8266 » 【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序 » 2018-05-03 09:10:51

晕哥 说:

下载会用到 Python,编译不会,
先用命令行试一试make是否正常吧。

试一试make  意思 是建立一个target 为 all 的, 然后进行build target 吗?  如图 也是显示一样的log ,找不到python。。。。
all.png

另外如果是在 toolchain 里面 进行make 倒是正常的~~~


我查看了get-started  guide 里面关于eclipse 的配置,其中C/C++build 配置目前有两个 版本
buildcommod.png
版本一:

•Click on the “C/C++ Build” properties page (top-level):
          .Uncheck “Use default build command” and enter this for the custom build command: 
           python ${IDF_PATH}/tools/windows/eclipse_make.py.

版本二:

•Click on the “C/C++ Build” properties page (top-level):
          .Uncheck “Use default build command” and enter this for the custom build command: 
          bash ${IDF_PATH}/tools/windows/eclipse_make.sh.

python.png
两个版本最终都是 调用python 执行eclipse_make.py~~~~ 那其实 最终还是没有python 的问题吧~~~~
但奇怪 为什么toolchain 中make flash的时候 没见到用python~~~~

#42 Re: ESP32/ESP8266 » 【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序 » 2018-05-02 15:56:09

配置好 eclipse build 的时候 出错! 


奇怪的是 怎么会跑去 找 F:\SysGCC\esp32\bin\python.exe:


15:46:48 **** Incremental Build of configuration Default for project pipeline_bt_sink ****
bash "F:\\Embedded\\esp-adf\\esp-idf/tools/windows/eclipse_make.sh" all 
eclipse_make.sh has been replaced with eclipse_make.py. Check the Windows Eclipse docs for the new command.
This shell script will continue to work until the next major release.
      1 [main] python (5316) F:\SysGCC\esp32\bin\python.exe: *** fatal error - cygheap base mismatch detected - 0x612A2410/0x612E8408.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version.  The most recent version *should*
reside in x:\cygwin\bin, where 'x' is the drive on which you have
installed the cygwin distribution.  Rebooting is also suggested if you
are unable to find another cygwin DLL.
F:\Embedded\esp-adf\esp-idf/tools/windows/eclipse_make.sh: line 4:  5756 Segmentation fault      python ${IDF_PATH}/tools/windows/eclipse_make.py $@

15:46:51 Build Finished. 0 errors, 0 warnings. (took 2s.655ms)

#43 Re: ESP32/ESP8266 » 【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序 » 2018-05-02 15:01:47

C/C++ General  -> Path & Symbols -> Includes -> GUN C 添加Directory:
${IDF_PATH}/components/esp32/include
${IDF_PATH}/components/newlib/include
${IDF_PATH}/components/freertos/include
${IDF_PATH}/components/nvs_flash/include
${IDF_PATH}/components/driver/include
${IDF_PATH}/components/log/include
${IDF_PATH}/components/spi_flash/include

配置好头文件 之后,发现头文件 是没报错了,  但是 代码中 的一些宏 却还有 问题
例如 :  Symbol 'TOUCH_PAD_NUM9' could not be resolved
Symbol 'CONFIG_LOG_DEFAULT_LEVEL' could not be resolved

然后 在project >C/C++ index > Freshen All files  还是 没有解决 这个问题。

还专门查了一下 'TOUCH_PAD_NUM9'    在Touch_pad.h 下面,  于是 特意 加了#include "Touch_pad.h" 和对应的PATH。

但是 依然报错~~~~

#44 Re: ESP32/ESP8266 » LyraT 乐鑫官方ESP32开发板入坑记录 (百度AI dueros 演示成功!) » 2018-05-02 14:25:24

晕哥 说:

esp32 搭建 eclipse 环境:

【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序
【ESP32视频分享3】Ubuntu使用 Eclipse开发ESP32程序

但是仍然解决不了 debug 问题,
据说可以用 JLink + openocd debug, 但是我没有试过。
you tu be.com 上面有视频。


谢谢 晕哥 无私奉献!!!  可惜 没有翻墙 软件~~~~you tu be 去不了!先看看 这连个视频先

#45 Re: ESP32/ESP8266 » ESP_ADF 的 baidu api demo 没有跑起来, 请大神们帮我分析一下。 » 2018-05-02 14:23:59

晕哥 说:

看下log:

...
I (1592) wifi: connected with ASUS_2.4, channel 2
I (4562) wifi: pm start, type:0

I (5622) event: sta ip: 192.168.50.7, mask: 255.255.255.0, gw: 192.168.50.1
...

wifi连接没有问题,
确认耳机有没有问题?
感觉应该播放语音了。

发图那个问题我得想想怎样才能方便解决。

...
I (1592) wifi: connected with ASUS_2.4, channel 2
I (4562) wifi: pm start, type:0


E (10872) BAIDU_SPEECH_EXAMPLE: Error issuing access token
E (10872) HTTP_STREAM: Failed to process user callback
E (10872) AUDIO_ELEMENT: [http] AEL_STATUS_ERROR_OPEN
W (10882) AUDIO_ELEMENT: IN-[mp3] AEL_IO_ABORT
E (10882) AUDIO_ELEMENT: [http] AEL_MSG_CMD_ERROR
Encountered error reading when MP3 init
E (10892) AUDIO_ELEMENT: [mp3] AEL_STATUS_ERROR_OPEN
I (10902) MP3_DECODER: Closed
E (10902) AUDIO_ELEMENT: [mp3] AEL_MSG_CMD_ERROR
I (10922) AUDIO_ELEMENT: IN-[i2s] AEL_IO_DONE,-2
W (11152) BAIDU_SPEECH_EXAMPLE: [ * ] Stop event received
I (11152) BAIDU_SPEECH_EXAMPLE: [ 6 ] Stop audio_pipeline
I (11152) AUDIO_PIPELINE: audio_pipeline_unlinked
I (11162) wifi: state: run -> init (0)
I (11162) wifi: pm stop, total sleep time: 0/6607872

...

应该还是wifi 连 接 的问题,  我试过play_mp3 的例子 是可以播放音乐的~~~
这个例子 的readme 太简短了 都不清楚 配置好wifi SSID 和相关 秘钥之后  要做些啥~~~~ 直接说请参考百度云~~~
百度云 又是云里雾里的 ~~~

还是晕哥牛!!!!


另外这个插图的事  你也有办法解决? 网站是你建立维护的??? 太厉害了~~~

#46 Re: ESP32/ESP8266 » LyraT 乐鑫官方ESP32开发板入坑记录 (百度AI dueros 演示成功!) » 2018-05-02 14:11:30

那用 什么IDE 呢? 如果没有IDE  debug 起来 好麻烦啊?
用了eclipse, 但是没有搞不起来~~~~

13:31:54 **** Build of configuration Default for project eclipseesp32 ****
bash "F:\\msys32\\home\\11022259\\esp\\esp-idf/tools/windows/eclipse_make.sh" all 
eclipse_make.sh has been replaced with eclipse_make.py. Check the Windows Eclipse docs for the new command.
This shell script will continue to work until the next major release.
make: *** No rule to make target 'all'.  Stop.
Running make in 'F:/Embedded/eclipseesp32'

#47 Re: ESP32/ESP8266 » ESP_ADF 的 baidu api demo 没有跑起来, 请大神们帮我分析一下。 » 2018-05-02 14:07:05

@ 晕哥!!!

创建应用 如下图所示

2018-05-02_140037.png

ps:论坛贴个图片 好绕啊, 上传 然后再复制地址 加img ~~~~

#48 Re: ESP32/ESP8266 » ESP_ADF 的 baidu api demo 没有跑起来, 请大神们帮我分析一下。 » 2018-05-02 14:02:09

创建应用的界面 好像和你的不一样喔, 你第三步 有 确定的按钮, 但是现在的没有确定 按钮,直接是下一步下一步~~~还要选择平台~~~~

esp32下载完 pipeline_baidu_speech_mp3 的程序,最后运行起来 还这样~~~  我觉得应该 是wifi 设置连接不上的问题吧!!!

rst:0x1 (POWERON_RESET),boot:0x3f (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:5604
load:0x40078000,len:0
load:0x40078000,len:13756
entry 0x40078fb4
I (28) boot: ESP-IDF v3.0-rc1-257-g489e98cf 2nd stage bootloader
I (28) boot: compile time 13:43:47
I (34) boot: Enabling RNG early entropy source...
I (34) boot: SPI Speed      : 40MHz
I (38) boot: SPI Mode       : DIO
I (42) boot: SPI Flash Size : 8MB
I (46) boot: Partition Table:
I (50) boot: ## Label            Usage          Type ST Offset   Length
I (57) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (64) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (72) boot:  2 factory          factory app      00 00 00010000 00100000
I (79) boot: End of partition table
I (83) esp_image: segment 0: paddr=0x00010020 vaddr=0x3f400020 size=0x1dcec (122
092) map
I (135) esp_image: segment 1: paddr=0x0002dd14 vaddr=0x3ffb0000 size=0x022fc (
8956) load
I (139) esp_image: segment 2: paddr=0x00030018 vaddr=0x400d0018 size=0x7fe70 (52
3888) map
0x400d0018: _stext at ??:?

I (325) esp_image: segment 3: paddr=0x000afe90 vaddr=0x3ffb22fc size=0x00f64 (
3940) load
I (327) esp_image: segment 4: paddr=0x000b0dfc vaddr=0x40080000 size=0x00400 (
1024) load
0x40080000: _iram_start at F:/msys32/home/11022259/esp/esp-adf/esp-idf/component
s/freertos/xtensa_vectors.S:1685

I (332) esp_image: segment 5: paddr=0x000b1204 vaddr=0x40080400 size=0x1282c ( 7
5820) load
I (372) esp_image: segment 6: paddr=0x000c3a38 vaddr=0x400c0000 size=0x00000 (
   0) load
I (384) boot: Loaded app from partition at offset 0x10000
I (384) boot: Disabling RNG early entropy source...
I (384) cpu_start: Pro cpu up.
I (388) cpu_start: Starting app cpu, entry point is 0x40080ff8
0x40080ff8: call_start_cpu1 at F:/msys32/home/11022259/esp/esp-adf/esp-idf/compo
nents/esp32/cpu_start.c:215

I (0) cpu_start: App cpu up.
I (398) heap_init: Initializing. RAM available for dynamic allocation:
I (405) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (411) heap_init: At 3FFB95B0 len 00026A50 (154 KiB): DRAM
I (417) heap_init: At 3FFE0440 len 00003BC0 (14 KiB): D/IRAM
I (424) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (430) heap_init: At 40092C2C len 0000D3D4 (52 KiB): IRAM
I (436) cpu_start: Pro cpu start user code
I (119) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (182) BAIDU_SPEECH_EXAMPLE: [ 0 ] Start and wait for Wi-Fi network
I (182) wifi: wifi firmware version: 7ff2a2a
I (182) wifi: config NVS flash: enabled
I (182) wifi: config nano formating: disabled
I (192) system_api: Base MAC address is not set, read default base MAC address f
rom BLK0 of EFUSE
I (192) system_api: Base MAC address is not set, read default base MAC address f
rom BLK0 of EFUSE
I (232) wifi: Init dynamic tx buffer num: 32
I (232) wifi: Init data frame dynamic rx buffer num: 32
I (232) wifi: Init management frame dynamic rx buffer num: 32
I (232) wifi: wifi driver task: 3ffc0ec8, prio:23, stack:4096
I (242) wifi: Init static rx buffer num: 10
I (242) wifi: Init dynamic rx buffer num: 32
I (252) wifi: wifi power manager task: 0x3ffc5b08 prio: 21 stack: 2560
I (322) phy: phy_version: 366.0, ba9923d, Dec 29 2017, 14:25:06, 0, 0
I (322) wifi: mode : sta (30:ae:a4:45:e6:b4)
I (562) wifi: n:2 0, o:1 0, ap:255 255, sta:2 0, prof:1
I (1542) wifi: state: init -> auth (b0)
I (1552) wifi: state: auth -> assoc (0)
I (1562) wifi: state: assoc -> run (10)
I (1592) wifi: connected with ASUS_2.4, channel 2
I (4562) wifi: pm start, type:0

I (5622) event: sta ip: 192.168.50.7, mask: 255.255.255.0, gw: 192.168.50.1
I (5622) BAIDU_SPEECH_EXAMPLE: [ 1 ] Start audio codec chip
I (5632) ES8388_DRIVER: init,out:02, in:00
I (5642) gpio: GPIO[21]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulld
own: 0| Intr:0
I (5642) AUDIO_HAL: Codec mode is 2, Ctrl:1
I (5652) BAIDU_SPEECH_EXAMPLE: [2.0] Create audio pipeline for playback
I (5652) BAIDU_SPEECH_EXAMPLE: [2.1] Create http stream to read data
I (5662) BAIDU_SPEECH_EXAMPLE: [2.2] Create i2s stream to write data to codec ch
ip
I (5672) I2S: DMA Malloc info, datalen=blocksize=1200, dma_buf_count=3
I (5672) I2S: DMA Malloc info, datalen=blocksize=1200, dma_buf_count=3
I (5682) I2S: APLL: Req RATE: 44100, real rate: 43945.016, BITS: 16, CLKM: 1, BC
K: 8, MCLK: 11289966.924, SCLK: 1406240.500000, diva: 1, divb: 0
I (5692) BAIDU_SPEECH_EXAMPLE: [2.3] Create mp3 decoder to decode mp3 file
I (5702) BAIDU_SPEECH_EXAMPLE: [2.4] Register all elements to audio pipeline
I (5712) BAIDU_SPEECH_EXAMPLE: [2.5] Link it together http_stream-->mp3_decoder-
->i2s_stream-->[codec_chip]
I (5722) BAIDU_SPEECH_EXAMPLE: [2.6] Setup uri (http as http_stream, mp3 as mp3
decoder, and default output is i2s)
I (5732) BAIDU_SPEECH_EXAMPLE: [ 4 ] Setup event listener
I (5742) BAIDU_SPEECH_EXAMPLE: [4.1] Listening event from all elements of pipeli
ne
I (5742) BAIDU_SPEECH_EXAMPLE: [4.2] Listening event from peripherals
I (5752) BAIDU_SPEECH_EXAMPLE: [ 5 ] Start audio_pipeline
I (5762) AUDIO_ELEMENT: [http] Element task created
I (5762) AUDIO_ELEMENT: [mp3] Element task created
I (5772) AUDIO_ELEMENT: [i2s] Element task created
I (5772) AUDIO_PIPELINE: audio_pipeline_run,253,MEM,Total:182448

W (5782) AUDIO_ELEMENT: [http] RESUME:Element has not running,state:3,task_run:1

I (5792) AUDIO_ELEMENT: [http] AEL_MSG_CMD_RESUME,state:3
W (5802) AUDIO_ELEMENT: [mp3] RESUME:Element has not running,state:3,task_run:1
I (5802) AUDIO_ELEMENT: [mp3] AEL_MSG_CMD_RESUME,state:3
I (5812) MP3_DECODER: MP3 opened
W (5812) AUDIO_ELEMENT: [i2s] RESUME:Element has not running,state:3,task_run:1
I (5822) AUDIO_ELEMENT: [i2s] AEL_MSG_CMD_RESUME,state:3
I (5832) I2S_STREAM: AUDIO_STREAM_WRITER
I (5832) AUDIO_PIPELINE: Pipeline started
I (5872) I2S: APLL: Req RATE: 16000, real rate: 15999.022, BITS: 16, CLKM: 1, BC
K: 8, MCLK: 4096000.000, SCLK: 511968.718750, diva: 1, divb: 0
W (5872) AUDIO_ELEMENT: [i2s] RESUME:Element has not running,state:3,task_run:1
I (5882) AUDIO_ELEMENT: [i2s] AEL_MSG_CMD_RESUME,state:3
I (5882) I2S_STREAM: AUDIO_STREAM_WRITER
E (9342) BAIDU_SPEECH_EXAMPLE: Error issuing access token
E (9342) HTTP_STREAM: Failed to process user callback
E (9342) AUDIO_ELEMENT: [http] AEL_STATUS_ERROR_OPEN
W (9352) AUDIO_ELEMENT: IN-[mp3] AEL_IO_ABORT
Encountered error reading when MP3 init
E (9362) AUDIO_ELEMENT: [http] AEL_MSG_CMD_ERROR
E (9362) AUDIO_ELEMENT: [mp3] AEL_STATUS_ERROR_OPEN
I (9362) MP3_DECODER: Closed
E (9372) AUDIO_ELEMENT: [mp3] AEL_MSG_CMD_ERROR
I (9392) AUDIO_ELEMENT: IN-[i2s] AEL_IO_DONE,-2
W (9622) BAIDU_SPEECH_EXAMPLE: [ * ] Stop event received
I (9622) BAIDU_SPEECH_EXAMPLE: [ 6 ] Stop audio_pipeline
I (9622) AUDIO_PIPELINE: audio_pipeline_unlinked
I (9632) wifi: state: run -> init (0)
I (9632) wifi: pm stop, total sleep time: 0/5069325

I (9632) wifi: n:2 0, o:2 0, ap:255 255, sta:2 0, prof:1
W (9642) PERIPH_WIFI: Wi-Fi disconnected from SSID ASUS_2.4, auto-reconnect enab
led, reconnect after 1000 ms
I (9652) wifi: flush txq
I (9652) wifi: stop sw txq
I (9652) wifi: lmac stop hw txq
I (9662) wifi: Deinit lldesc rx mblock:10
E (10652) wifi: esp_wifi_connect 858 wifi is not init
I (128842) event: station ip lost 

#49 Re: ESP32/ESP8266 » 简单说一说 baidu 语音合成与识别 api 使用流程 » 2018-05-02 09:57:30

晕哥 说:

刚刚使用了一下 乐鑫 ESP-ADF 的 baidu 语音合成 demo

https://github.com/espressif/esp-adf/blob/master/examples/cloud_services/pipeline_baidu_speech_mp3/main/play_baidu_speech_mp3_example.c

然后结合网上例程,
梳理一下调用过程

1. 第一步,根据 在 baidu 申请的 API Key 和 Secret Key 获取 tocken (令牌)

API Key: FvNYWABLHgYC3aMMgaO7j5Qh
Secret Key: uc1IRoK4yMBqvAnmizT0ZZ7nR5OgYREU

合成如下面的链接:
https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=FvNYWABLHgYC3aMMgaO7j5Qh&client_secret=uc1IRoK4yMBqvAnmizT0ZZ7nR5OgYREU

上面的 token 24.1d62c2210aae7e03f3987b4d4579e8d3.2592000.1527812681.282335-11175544 有效期是 一个月(30天)

2. 第二步, 填入上面获取的令牌 和 txt 文字, 生成语音文件。
http://tsn.baidu.com/text2audio?tex=%E6 … 5-11175544


上面的测试大概1个月会失效, 失效后可以用第一步产生的 token 代入 第二步的链接的 tok 参数。


晕哥,API Key,Secret Key 都拿到了。 ESP-ADF 的例程 在make menuconfig 也将其填进去了,

你说到 合成如下下面的链接,  这个 是什么意思? 没看懂? 
如何合成, 合成之后 这个链接有什么用?
需要填到 menuconfig 里面吗?

另外token 是在哪里的?  需要将它放在哪里去吗?

第2步 生成语音文件 是在menuconfig 那里设置? 还是?? 工程中的readme 说得模模糊糊的, 具体步骤 只说到 填 key ~~~~

到了后面 你又做了一个什么php 的 链接 =====》 php 语音识别!  这个又是 什么呢? 对于ESP32 这个文件貌似 和ESP32没有关系~~~ 是服务器端的程序吗?

#50 Re: ESP32/ESP8266 » 如何解决eclipse 中 esp32 工程文件的关联问题 » 2018-05-02 09:48:17

晕哥有几点 不是很明白!

1. 你的第一个路径设置为 d 盘,    d 盘的意义是什么?  ESP-IDF 源码放置路径?  还是eclipse工程 的放置路径?

====》第一 : 我这边 ESP-IDF 源码包 是放置  在 F:\msys32\home\11022259\esp\esp-idf
                       按照get-started  说明, 第一步下载toolchain, 解压在 F:\msys32 ,
                       然后进入F:\msys32, 打开mingw32.exe  用git 克隆 了 ESP-IDF 到上面这个路径

ESP-IDF 源码路径:
FluxBB bbcode


====》第二 :  eclipse 新建工程我是放在 F:\Embedded\eclipseesp32 路径下, 那个 .cproject 的文件也是在这个下面找到的。

eclipse 工程路径:
FluxBB bbcode

FluxBB bbcode

2. 你的第二个路径设置为 F:\xboot\src\include,  这个路径的意义又是什么呢?

====》 我打开 我的.cproject 文件 同样 也找到了 listOptionValue 的项目。。 但是这个项目显示的值 其实就是eclipse 中设置的path

FluxBB bbcode



那其实我的问题是, 如果按照目前 源码的路径 ( F:\msys32\home\11022259\esp\esp-idf ) 和 eclipse 工程放置路径( F:\Embedded\eclipseesp32 ), 
如若 只是设置顶层 路径方式, 让其去关联 所有文件, 正确 的做法是?

FluxBB bbcode

#51 Re: ESP32/ESP8266 » 如何解决eclipse 中 esp32 工程文件的关联问题 » 2018-05-02 08:45:06

晕哥 说:

有一个 . 开头的文件, 可以直接编辑那个文件.
可以不用这样一步一步加了。

晕哥 ,什么是开头文件?在哪里可以找到?
FluxBB bbcode 测试
按照这个图,三个选项我都试过,还是需要一个个路径添加~~~~


开头文件 具体是 什么文件?
/

#52 Re: ESP32/ESP8266 » 如何解决eclipse 中 esp32 工程文件的关联问题 » 2018-04-28 17:26:47

哥,这个路径 不会每次加一个头文件都要 添加一个对应的路径吧!

有时头文件分得散, 找起来 麻烦 然后再一个个添加!!!!

可以直接顶层文件路径吗? 然后让它自动识别下去吗?

晕哥 说:

第一个是汇编代码搜索路径,
最后一个是C++搜索路径

#53 Re: ESP32/ESP8266 » 如何解决eclipse 中 esp32 工程文件的关联问题 » 2018-04-28 17:24:23

另外还有问题, 如果工程比较大,需要引用的文件很多,但是却都分布得很散~~~

有没有可以直接include 顶层的文件,然后eclipse 自动关联下层文件~~~~

不然的话,光添加这个path 都添加死人了!


晕哥 说:

#54 Re: ESP32/ESP8266 » 如何解决eclipse 中 esp32 工程文件的关联问题 » 2018-04-28 17:15:19

谢谢晕哥 !!!

原来这些路径是 添加 在 GNU C 下 的include , 我加到assembly 那里 去了!

这几个的区别是什么呢?


晕哥 说:

#55 ESP32/ESP8266 » 如何解决eclipse 中 esp32 工程文件的关联问题 » 2018-04-28 16:54:05

mkseven32
回复: 11

eclipse 按照说明,配置好之后, 想编译一下,发现关联文件的路径 不对, 于是有添加了一对 include 路径 ,但是还是不行,请问大家如何解决文件引用的问题2018-04-28_162747.png3.png2.png

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn