ESP8266--学习笔记(八)-由AT固件源码分析一
2017-03-22 23:41
573 查看
怎么说呢,其实学习ESP8266的资料还是挺少的,但是可以找得到一些固件源码;而我们作为初学者,这些源码真的是不可多得的资料。当我想实现一些功能的时候,其实是可以用一系列的AT指令来完成的。于是我就想,既然AT指令可以做到,那么我可以参考AT指令的机制来写一个符合自己要求的固件啊!
于是乎通过AT固件启示,我完成了这样一个程序框架。
user_main.c
my_wifi.c
my_wifi.h
整个就是通过定义这么一个枚举类型定义来完成整个框架的信息传递。
让整个系统开始跑起来的动机就是,串口数据接收导致的中断!
user_main.c
my_wifi.h
my_wifi.c
接下来就是继续发掘at-fimware的资源。
于是乎通过AT固件启示,我完成了这样一个程序框架。
user_main.c
my_wifi.c
my_wifi.h
整个就是通过定义这么一个枚举类型定义来完成整个框架的信息传递。
让整个系统开始跑起来的动机就是,串口数据接收导致的中断!
typedef enum{ my_statIdle, my_statRecving, my_statProcess, my_statIpSending, my_statIpSended, my_statIpTraning }my_stateType;
user_main.c
/* * user_main.c * * Created on: 2017脛锚3脭脗14脠脮 * Author: yuanlifu */ #include "ets_sys.h" #include "driver/uart.h" #include "user_main.h" #include "wifi.h" void user_init(){ uint8 opmode; uart_init(115200,115200); my_init(); } void user_rf_pre_init(){ }
my_wifi.h
/* * my_wifi.h * * Created on: 2017年3月22日 * Author: yuanlifu */ #ifndef APP_USER_MY_H_ #define APP_USER_MY_H_ #include "user_main.h" #include "user_interface.h" #define my_recvTaskPrio 0 #define my_recvTaskQueueLen 64 #define my_procTaskPrio 1 #define my_procTaskQueueLen 1 void my_init(void); typedef enum{ my_statIdle, my_statRecving, my_statProcess, my_statIpSending, my_statIpSended, my_statIpTraning }my_stateType; #endif /* APP_USER_MY_H_ */
my_wifi.c
/* * my_wifi.c * * Created on: 2017年3月22日 * Author: yuanlifu */ #include "my.h" #include "osapi.h" #include "user_interface.h" #include "driver/uart.h" #include "wifi.h" os_event_t my_recvTaskQueue[my_recvTaskQueueLen]; os_event_t my_procTaskQueue[my_procTaskQueueLen]; my_stateType my_state; BOOL echoFlag = TRUE; static void my_procTask(os_event_t *events); static void my_recvTask(os_event_t *events); /** * @brief Uart receive task. * @param events: contain the uart receive data * @retval None */ static void ICACHE_FLASH_ATTR my_recvTask(os_event_t *events) { static uint8_t atHead[2]; static uint8_t *pCmdLine; uint8_t temp; while(READ_PERI_REG(UART_STATUS(UART0)) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S)) { if(my_state != my_statIpTraning) { } switch(my_state) { case my_statIdle: //serch "AT" head break; case my_statRecving: //push receive data to cmd line break; case my_statProcess: //process data break; case my_statIpSending: break; case my_statIpSended: //send data break; case my_statIpTraning: break; default: break; } } if(UART_RXFIFO_FULL_INT_ST == (READ_PERI_REG(UART_INT_ST(UART0)) & UART_RXFIFO_FULL_INT_ST)) { WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR); } else if(UART_RXFIFO_TOUT_INT_ST == (READ_PERI_REG(UART_INT_ST(UART0)) & UART_RXFIFO_TOUT_INT_ST)) { WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_TOUT_INT_CLR); } ETS_UART_INTR_ENABLE(); } /** * @brief Task of process command or txdata. * @param events: no used * @retval None */ static void ICACHE_FLASH_ATTR my_procTask(os_event_t *events) { if(my_state == my_statProcess) { } else if(my_state == my_statIpSended) { } else if(my_state == my_statIpTraning) { } } void ICACHE_FLASH_ATTR my_init(void){ system_os_task(my_recvTask, my_recvTaskPrio, my_recvTaskQueue, my_recvTaskQueueLen); system_os_task(my_procTask, my_procTaskPrio, my_procTaskQueue, my_procTaskQueueLen); }
接下来就是继续发掘at-fimware的资源。
相关文章推荐
- ESP8266--学习笔记(八)串口源码分析
- ESP8266--学习笔记(八)串口源码分析
- nginx 源码学习笔记(七)——内存分配相关源码分析
- mangos0.9源码分析学习笔记(二)
- COCOS2DX 3.0 学习笔记:从源码分析Cocos2dx 3.0 Director类
- Cocos2d-x学习笔记(20)(TestCpp源码分析-4)
- C++11学习笔记:std::move和std::forward源码分析
- Cocos2d-x学习笔记(18)(TestCpp源码分析-2)
- Python源码分析--学习笔记一
- Cocos2d-x学习笔记(19)(TestCpp源码分析-3)
- tomcat源码分析学习笔记(五)
- Android源码学习笔记1-短信发送流程分析
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
- Hadoop学习笔记-WordCount源码分析
- OpenCV学习笔记(28)KAZE 算法原理与源码分析(二)非线性尺度空间构建
- Ogre源码分析与学习笔记-0
- Ogre源码分析与学习笔记-1
- springMVC学习笔记之源码分析
- Openstack学习笔记之——Neutron-server服务加载与启动源码分析(三)
- tomcat源码分析学习笔记(三)