这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » wambob的小e智能硬件开发板试用帖+固件源码学习之一

共1条 1/1 1 跳转至

wambob的小e智能硬件开发板试用帖+固件源码学习之一

高工
2016-04-16 09:59:15     打赏

吐一下:论坛发帖子有点麻烦,只好采取边发边修改,这样好多了。 

软件离不开硬件,软件是硬件的灵魂。小e的功能已经体验过了,烧录的方法也掌握了,是时候该探索小e的核心-固件了,而固件是由源码编译而成。  

一:资源(已经下载好了): 

官方固件源码:M302I-ESP8266-ROMsource.zip

官方固件:M302I-ESP8266-ROM.zip 

1.先解压官方固件 

4BIN文件小e出厂的时候已经烧录好了。在体验下载的时候已经认识了,但只生成了用户代码。

2.解压官方固件源码

二:源码目录结构

在源码中一共有11个文件。

1.首先看最下面三个文件。

1README.md

使用过github一定熟悉,是个文档,打开https://github.com/espressif/ESP8266_RTOS_SDK就清楚了。从这也可以看出,小e源码的来龙去脉了。

2Makefile

linux编程里的一个重要文件。

3LICENSE

授权文件,在软件中常见到这个文件。

这三个文件都可以使用写字板打开,也可以在github上直接查看。

2. 其次,剩下的文件夹看名字,就能了解个八九不离十

 

 

.  third_party 第三方软件源文件  

1bin

 

里面有三个文件和固件的一样,固件的另一个在哪,打开upgrade文件夹时空的,其实编译完后共享文件里的upgrade会出现3个文件。

 

  至于_temp_by_dltool文件,打开后,两个文件名和固件里的bin只是后缀不一样,肯定有关系了。

  2et_app  这里面才是学习的重点。

 

  

.Outptut :使用ARM keil工具时候要设置编译、调试输出信息文件。这里的output应该也是这个用途。

不过编译前后对比了一下,貌似没有什么变化。

.driver: 外部设备驱动及相关源文件,里面的函数可以在主程序中调用,l来实现需要的功能。

 

 . Include:driver的头文件和user使用的一些头文件。

.sample_lib:readme.txt里面说明了是简单的工程模板。对我们没什么用处。

.user:用户代码,以后如果添加什么功能,就要在这里实现了。

剩下的文件,在编译工程的时候执行”./gen_misc.sh”。

 

看着这么多源码,用什么软件打开呢,用惯了Keil、IAR等集成开发环境。到这懵了,群里说使用Source Insight 3。可不熟悉啊,只好硬着头皮使用写字板打开user_main.c 。找到了程序入口。

/******************************************************************************
 * FunctionName : user_init
 * Description  : entry of user application, init user function here
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void user_init(void)
{	
	key_gpio_t key;
	struct station_config config;
	struct ip_info info;
	et_uchar result=0;
	
    os_printf("now SDK version:%s\n", system_get_sdk_version());

	if(get_fac_norm_mode(&result) != SPI_FLASH_RESULT_OK)
	{
		os_printf("get_fac_norm_mode error, NORMAL mode\n");
	}
	
	if(result == FAC_MODE)
	{
		os_printf("run in factory mode\n");
		uart_init_new_uart1(BIT_RATE_115200);
		UART_SetPrintPort(UART1);
		uart_init_new(BIT_RATE_9600, result);
		return;
	}

	os_printf("run in normal mode\n");
	// show logo
	user_show_logo();

	if (RETURN_OK != user_get_work_mode(&work_mode)) 
	{
		os_printf("get work mode fail !!!\n");
		return;
	}

	if (RETURN_OK != user_init_work_mode(work_mode, result)) 
	{
		os_printf("init work mode fail !!!\n");
		return;
	}
	// wifi led control
	xTaskCreate(user_wifi_led_control, "wifi_led_control", 256, NULL, 2, NULL);
	//wifi event handle
	wifi_set_event_handler_cb(et_wifi_event_cb);
	
	memset(&key, 0, sizeof(key_gpio_t));
	key.key_gpio_pin = AIRKISS_KEY_IO_PIN;
	key.key_num = AIRKISS_KEY_IO_NUM;

	airkiss_key_init(&key);
	wifi_set_opmode(STATION_MODE);

	wifi_reconnect_start_flag = 0;

	xTaskCreate(airkiss_key_poll_task, "smartconfig_task", 256, NULL, 2, NULL);

	memset(&config, 0, sizeof(struct station_config));
	if(wifi_station_get_config_default(&config) == true) 
	{
		os_printf("ssid=%s\n", config.ssid);
		wifi_station_set_config_current(&config);
		//for static ip set
		/*wifi_station_dhcpc_stop();
		IP4_ADDR(&info.ip, 192, 168, 1, 43);
		IP4_ADDR(&info.gw, 192, 168, 1, 1);
		IP4_ADDR(&info.netmask, 255, 255, 255, 0);
		wifi_set_ip_info(STATION_IF, &info);*/
	}
	
	os_timer_disarm(&test_timer);
   	os_timer_setfn(&test_timer, (os_timer_func_t *)user_esp_platform_check_ip, NULL);
   	os_timer_arm(&test_timer, 1000, 0);

}

 里面最开始的2条打印语句好熟悉啊,在开发板上电的时候,串口输出的信息。

 


 




关键词: 小e     源码    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]