标签:size local 断线 区别 image 调试 指令 上下 限制
遇到难题一、:RAM内存不足错误:
一 、将UC/OS III移植到STM32F103C8T6的遇到内存不足的报错。
分析,c8t6系类RAM内存只有20KB。
如上图。在代码中将heap_size设置成了27u*1024u及27k,堆空间比RAM还要大。
改成10k,并且根据情况缩小任务申请的堆栈空间。
二、访问ESP8266所建立的WEB服务器时发生重启并报堆空间不足
分析: 与C程序项目,C可以从flash执行,而lua函数必须加载到堆中才能运行。ESP8266物理上有64KB的IRAM,96KB的dRAM,IRAM用来存放指令,DRAM用来存放数据。IRAM的32KB是cache。可用ram为20kb
解决:
1. 固件方面:采用整形的固件,不支持float型。减少对无用库的加载。
2. 变量:尽量去使用local申明变量,减少全局变量的使用。并缩短变量的生存周期,尽快释放。并且利用文件系统去传递上下文变量。
3. 编译:调试完成后,进行预编译,生成等效的.lc文件,出去了所有调试行和变量信息。
4. 函数:函数具有固有的开销,将程序分组到更大的函数中。并且使用内联函数
问题:
1.为什么ESP8266要用LUA语言
LUA是一个极轻量级的脚本语言,用C语言编写,编译后解释器仅100K+,适合堆内存有很大限制的嵌入式系统。移植性高,运行高效,并且可以和C进行无缝对接。
2.LUA和C的关系与区别
LUA是面向对象的一门解释型语言,C是面向过程的一门编译型语言,LUA的编译器是用C语言写的。
语法上,LUA没有main函数
三、功能逻辑问题。
上传功能相互干扰,正常情况下GPRS,WIFI,10秒钟上传一次。传感器采集则在这10秒钟之内进行采集更新。
但是,在GPRS网络不佳的情况下,会导致GPRS的断线重连,重连过程可能会耗时10~20秒过程,在此时间段内。WIFI上传,传感器都无法继续采集及工作,效率低下。
解决:移植UCOS实时操作系统,GPRS,wifi,传感器采集采用独立的任务进行处理。并且优化使得GPRS和WIFI之间可以进行双模方式进行上传。
服务器与设备用Json格式进行数据交换。
JSON 是轻量级的文本数据交换格式
标签:size local 断线 区别 image 调试 指令 上下 限制
原文地址:https://www.cnblogs.com/tearain/p/9357314.html