完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
大家好。我是新手。我已经安装了 esp open sdk [https://github.com/esp8266/esp8266-wiki/wiki/Toolchain]
我写了一个简单的代码来使 LED 闪烁。 #include "ets_sys.h" #include "osapi.h" #include "gpio.h" #include "os_type.h" #include "user_config.h" #define user_procTaskPrio 0 #define user_procTaskQueueLen 1 os_event_t user_procTaskQueue[user_procTaskQueueLen]; 本地 os_timer_t blink_timer; 本地 uint8_t led_state=0; LOCAL void ICACHE_FLASH_ATTR blink_cb(void *arg) { led_state = !led_state; GPIO_OUTPUT_SET(2, led_state); } 静态无效 ICACHE_FLASH_ATTR loop(os_event_t *events) { os_printf("你好\n\r"); os_delay_us(10000); system_os_post(user_procTaskPrio, 0, 0 ); } void ICACHE_FLASH_ATTR user_init() { PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); os_timer_disarm(&blink_timer); os_timer_setfn(&blink_timer, (os_timer_func_t *)blink_cb, (void *)0); os_timer_arm(&blink_timer, 1000, 1); GPIO_OUTPUT_SET(2, led_state); //启动os任务 system_os_task(loop, user_procTaskPrio,user_procTaskQueue, user_procTaskQueueLen); system_os_post(user_procTaskPrio, 0, 0 ); 我 已经成功生成了二进制文件并刷新了它。 raja@raja-Inspiron-N5110:/opt/Espressif/source-code-examples/blinkMe$ make ESPPORT=/dev/ttyUSB0 flash CC user/user_main.c AR build/app_app.a LD build/app.out FW 固件/ esptool.py v2.1-beta1 为 ESP8266 创建图像... esptool.py --port /dev/ttyUSB0 write_flash 0x00000 firmware/0x00000.bin 0x40000 firmware/0x40000.bin esptool.py v2.1-beta1 Connecting... . 正在检测芯片类型... ESP8266 芯片是 ESP8266 上传存根... 运行存根... 运行存根... 配置闪存大小... 自动检测闪存大小:4MB 闪存参数设置为 0x0040 压缩 29584 字节为 20449。 .. 在 1.8 秒内(有效 130.4 kbit/s)在 0x00000000 处写入 29584 字节(20449 压缩)... 已验证数据哈希。 Compressed 136028 bytes to 102576... Write 136028 bytes (102576 compressed) at 0x00040000 in 9.1 seconds (effective 119.7 kbit/s)... 数据哈希验证。 离开... 硬重置... 但是我没有得到想要的输出。LED 未按预期闪烁。 然后我尝试闪现连接到 wifi 的例子。它没有连接。 当我使用 arduino 时,我能够使 LED 闪烁并成功连接到 wifi 并启动网络服务器。 [nmap -sn IP_address/24 仅在我刷新 arduino IDE 而不是 gcc 编译的二进制文件时显示输出。] 我想尝试使用 ESP-GDBStub 进行调试。我稍后会更新它。 谁能解释我哪里出错了? |
|
相关推荐
1个回答
|
|
|
user_procTask(os_event_t *events)
{ // 任务处理函数 } LOCAL void ICACHE_FLASH_ATTR blink_cb(void *arg) { // LED 闪烁回调函数 } void user_init(void) { // 初始化函数 } 以上是您提供的代码片段,但是其中有一些问题: 1. 您在定义闪烁定时器时使用了“本地”关键字,这是不正确的。应该使用“LOCAL”关键字来定义本地变量。 2. 您在定义 LED 状态时使用了“uint8_t”类型,但是您没有包含 stdint.h 头文件。应该添加 #include 3. 在 user_init 函数中,您需要完成一些初始化工作,例如初始化 GPIO 和定时器,并设置闪烁回调函数。下面是一个简单的实现: void user_init(void) { // 初始化 GPIO gpio_init(); // 设置 GPIO2 为输出模式 PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); gpio_output_set(0, BIT2, BIT2, 0); // 初始化闪烁定时器 os_timer_disarm(&blink_timer); os_timer_setfn(&blink_timer, blink_cb, NULL); // 开始闪烁 os_timer_arm(&blink_timer, 1000, true); } 4. 在 blink_cb 回调函数中,您需要切换 LED 的状态,并将其写入 GPIO2: LOCAL void ICACHE_FLASH_ATTR blink_cb(void *arg) { // 切换 LED 的状态 led_state = !led_state; // 将 LED 状态写入 GPIO2 gpio_output_set(led_state << 2, BIT2, BIT2, 0); } 5. 最后,在 user_procTask 中,您需要处理队列中的事件,以及其他的任务。根据您的代码,这一部分并没有完成。以下是一个简单的实现: LOCAL void user_procTask(os_event_t *events) { // 处理队列中的事件 switch (events->sig) { case 1: // 处理事件 1 break; case 2: // 处理事件 2 break; // 其他事件 } // 处理其他任务 // ... } 希望对您有帮助! |
|
|
|
|
只有小组成员才能发言,加入小组>>
945 浏览 0 评论
1672 浏览 0 评论
请问一下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗
1330 浏览 1 评论
1233 浏览 1 评论
5021 浏览 2 评论
为blufi_device设置自定义名称,但是无法修改,为什么?
1253浏览 4评论
请问ESP32-S2-WROOM怎么获得ESP32-S2外接FLASH的唯一序列号?
927浏览 3评论
2338浏览 3评论
ESP-IDF的VScode插件的build按钮点击会报错的原因?
2526浏览 3评论
ESP-Jumpstart例程中第5个工程:5_cloud连接报错是哪里的问题?
1052浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 05:34 , Processed in 0.649548 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
509
