项目相关问题

遇到难题一、: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之间可以进行双模方式进行上传。

猜你喜欢

转载自www.cnblogs.com/tearain/p/9357314.html
今日推荐