二:进一步的学习
根据学习目标,选了一个功能相近的demo(sdk_app_http_client_socket)。这个demo,能连上wifi路由器。这样子应该能通过路由器,使用socket的方式连上服务器把。先把demo跑起来。按照手册输入连接路由器的指令,wifi_sta_connect lf_test_005 12345678。结果没有得到预想的效果。咨询厂家技术,可能是命令未注册。故而,学习命令行注册。
查看手册有关命令行的demo,先注册一个test指令,看看参数以及函数的定位。按照例子,修改main.c代码。启动MSYS2进行编译。再烧录。打开串口助手。按reset出现提示信息。输入test,点击发送。回送hello world。命令行代码注册成功。再次输入指令连接路由器,依然没有成功。
尝试,在test的响应函数里加入指令wifi_sta_connect("Xiaomi_AD3F", "20181103");,重新编译,烧录,启动。reset。还是不行。提示信息说明已经进入到命令行响应函数了。但是wifi_sta_connec指令不能正确执行。
最终,厂家给出解释,代码不完善。。。
三:再进行尝试
这次选择的是另外一个demo(lf686_demo_wifi),首先,改定时的提示。方便自己知道板子在运行什么demo。以下对代码的解释,均来源与个人猜测。
- //以下是单片机所有程序的主入口
- void lpf_main()
- {
- static StackType_t aos_loop_proc_stack[1024];
- static StaticTask_t aos_loop_proc_task;
- static StackType_t proc_hellow_stack[512];
- static StaticTask_t proc_hellow_task;
- time_main = lf_timer_now_us();
- /*Init UART In the first place*/
- lf_uart_init(0, 16, 7, 255, 255, 2 * 1000 * 1000);
- puts("Starting lf686 now....rn");
- _dump_boot_info();
- vPortDefineHeapRegions(xHeapRegions);
- printf("Heap %u@%p, %u@%prn",
- (unsigned int)&_heap_size, &_heap_start,
- (unsigned int)&_heap_wifi_size, &_heap_wifi_start
- );
- printf("Boot2 consumed %lumsrn", time_main / 1000);
- system_init();
- system_thread_init();
- puts("[OS] Starting proc_hellow_entry task...rn");
- xTaskCreateStatic(proc_hellow_entry, (char*)"hellow", 512, NULL, 15, proc_hellow_stack, &proc_hellow_task);
- puts("[OS] Starting aos_loop_proc task...rn");
- xTaskCreateStatic(aos_loop_proc, (char*)"event_loop", 1024, NULL, 15, aos_loop_proc_stack, &aos_loop_proc_task);
- puts("[OS] Starting TCP/IP Stack...rn");
- tcpip_init(NULL, NULL);
- puts("[OS] Starting OS Scheduler...rn");
- vTaskStartScheduler();
- }
其中xTaskCreateStatic是创建一个线程。
- //以下是定时器的线程代码。
- static void proc_hellow_entry(void *pvParameters)
- {
- vTaskDelay(500);
- while (1) {
- printf("%s: RISC-V rv32imafc.gj_lf686_demo_wifirn", __func__);
- vTaskDelay(10000);
- }
- vTaskDelete(NULL);
- }
printf是从串口输出字符。
在windows的菜单栏中打开MSYS2 MSYS
可看出是一个命令行的界面,类似与Linux的终端界面。通过一系列的cd以及ls后,定位的项目的目录里。
- john@ThinkPad-E540 MSYS ~
- $ cd..
- bash: cd..: command not found
- john@ThinkPad-E540 MSYS ~
- $ cd ..
- john@ThinkPad-E540 MSYS /home
- $ ls
- john lf_iot_sdk
- john@ThinkPad-E540 MSYS /home
- $ cd home
- bash: cd: home: No such file or directory
- john@ThinkPad-E540 MSYS /home
- $ cd /home
- john@ThinkPad-E540 MSYS /home
- $ ls
- john lf_iot_sdk
- john@ThinkPad-E540 MSYS /home
- $ cd lf_iot_sdk
- john@ThinkPad-E540 MSYS /home/lf_iot_sdk
- $ ls
- LICENSE clean docs tools
- LICENSE-2.0.txt components make_scripts_riscv version.txt
- README.md customer_app toolchain
- john@ThinkPad-E540 MSYS /home/lf_iot_sdk
- $ cd customer_app
- john@ThinkPad-E540 MSYS /home/lf_iot_sdk/customer_app
- $ ls
- benchmark_security_aes lf686_gate_demo sdk_app_helloworld
- gj_app_http_client_socket lf686_kerle_app sdk_app_http_client_socket
- gj_lf686_demo_wifi sdk_app_645wave sdk_app_http_client_tcp
- lf686_boot2 sdk_app_adc sdk_app_i2c
- lf686_boot2_mini sdk_app_audio_udp sdk_app_ir
- lf686_demo_airkiss sdk_app_ble_central sdk_app_lvgl
- lf686_demo_ap_server sdk_app_ble_peripheral sdk_app_mdns
- lf686_demo_at sdk_app_ble_sync sdk_app_pwm
- lf686_demo_ble_ota sdk_app_blog sdk_app_romfs
- lf686_demo_event sdk_app_cli sdk_app_romfs_filecsv
- lf686_demo_joylink sdk_app_cronalarm sdk_app_spi_slave
- lf686_demo_joylink_ble sdk_app_dac sdk_app_spi_wave
- lf686_demo_livingsdk sdk_app_easyflash sdk_app_timer
- lf686_demo_nano sdk_app_event sdk_app_uart_ctl
- lf686_demo_noconnectivity sdk_app_fdt sdk_app_uart_echo
- lf686_demo_tuya_light sdk_app_gpio sdk_at_module
- lf686_demo_ty sdk_app_hbnram sdk_mpy_repl
- lf686_demo_wifi sdk_app_heap sdk_wristwatch_mqtt_gateway
- john@ThinkPad-E540 MSYS /home/lf_iot_sdk/customer_app
- $ cd gj_lf686_demo_wifi
- john@ThinkPad-E540 MSYS /home/lf_iot_sdk/customer_app/gj_lf686_demo_wifi
- $ ls
- BLE_Use_Manual.pdf README.md lf686_demo_wifi proj_config.mk
- Iperf_User_Manual.rst build_out logo.png tests
- Makefile genromap picture
- john@ThinkPad-E540 MSYS /home/lf_iot_sdk/customer_app/gj_lf686_demo_wifi
- $ ^C
- john@ThinkPad-E540 MSYS /home/lf_iot_sdk/customer_app/gj_lf686_demo_wifi
- $
如果熟悉目录结构的话,也可以直接定位
- john@ThinkPad-E540 MSYS ~
- $ cd /home/lf_iot_sdk/customer_app/gj_lf686_demo_wifi
- john@ThinkPad-E540 MSYS /home/lf_iot_sdk/customer_app/gj_lf686_demo_wifi
使用命令(./genromap),在命令的前面要加点(./),对项目进行编译。
编译成功后,在项目的子目录build_out里,可以看见生成了新的lf686_demo_wifi.bin文件。这个文件将会写入到板子里。
关闭串口。拔掉数据线。改变跳线。重新插入数据线。打开烧录器。重新烧录。
拔掉数据线。改变跳线。重新插入数据线。可以看见灯开始闪烁。打开串口。可以看见串口中的提示信息已经改变。从这个改变中可以知道开发板已经成功烧录了新的程序,并且这个程序的项目是lf686_demo_wifi。