recan
recan
http://yyds.recan-li.cn 一个专注于嵌入式软件架构设计的新生代农名工

注册于 7 months ago

回答
356
文章
7
关注者
12

从WIFI模组软件的设计来说,当模组识别到当前WIFI热点关闭(WIFI连接掉线)后,理论上要触发一个事件,告知上层当前与WIFI热点断开了,不知道esp8266有没有类似的机制,我目前在调试博通的WIFI芯片都有类似的通知机制。
有这个机制的话,收到断开事件,只需要再发起WIFI热点链接即可。

如果真是Windows编译命令行太长的问题,倒是可以考虑把那些参数(包括.o文件列表)写入到一个文本文件中,然后编译工具链从文本文件里面读取这些参数。
我以前调试模组的编译,很多厂家给的Windows下的编译就这么玩,
印象中armcc支持从文本文件输入参数,但gcc的话,需要查证下。

从编译警告上看,是这个函数实现了,但是没人调用。
如果是FINSH-EXPORT的接口话,提现的就是这个命令识别不了。
检查下导出命令的那个宏函数是不是有问题。

用rtt驱动hp的打印机,没有问题;
问题在于这个打印机是什么接口协议?
与MCU侧是用什么物理接口通讯的?
是串口?USB?I2C?SPI?还是网络?或是其他什么总线协议?
搞清楚这些基本的需求,才好下手。

你同时把atoi的入参也打出来看下:

int atoi_test(char argc,char **argv)
{
    rt_kprintf("argv[1] (%s) : %d\n", argv[1], atoi(argv[1]));
    return RT_EOK;
}
MSH_CMD_EXPORT(atoi_test,atoi test);

怀疑入参就已经不对了。

不会是python爬虫爬到RRT这里来了吧?😂

我本人也是使用windows映射linux共享的samba文件夹的重度使用者,
印象中也遇到过一些软件使用打开功能,在我的电脑目录下只能看到本地硬盘,
而看不到映射过来的网络磁盘。
碰到这种情况,我只能放弃使用网络映射盘存储这个软件的文件,改用本地磁盘。
不过,大部分软件对网络映射盘的支持还是很友好的,
只要公司网络不,用起来还是很流畅,与本地磁盘无异;
要是真的遇上公司的渣渣网络,那只能另寻他法了。
我之前就遇到网络烂到无法接受的那种,本文文件编辑之后,按下Ctrl+S,
都等老半天才反应过来的,简直不能忍!

后面我还了一个方法,文件还是存本地磁盘,需要到远程服务器上面编译的时候,
使用rsync远程同步一下,这样虽然最后同步这样慢一点点,但是至少平时不同步的时候,
文件的读写都是在本地磁盘操作。

image.png

类似这样的"key":"value",并不会影响JSON字符串的解析,
相关有些场景是还不得不加上这个做双引号的转义,
不然JSON字符串中的双引号就会被吃掉。

像这样我之前接触的项目,payload里面就必须加转移,否则终端报上去的数据后端解析还会有问题。
image.png

ubuntu下的gcc工具链有没有问题?
可以对比下两者输出的固件:

第一步:查看两者输出的elf文件
把rtthread.elf文件都拖拉到linux文件系统,分别使用file命令查看下两个文件:
会有类似这样的输出:
image.png

第二步:对比elf文件的头部信息,终端检查entry point address
同样在linux命令行下操作,使用readelf -h,类似这样的输出:
image.png

第三步:对比下rtthread.map文件,重点分析关键数据的内存地址分布,看下差异大不大。

第四步:对比下生成的固件bin文件的大小差异大不大。

以上提供点思路,希望能够帮助到你。

找到一篇RTT官方对中断管理的介绍文档
可以参考下,看下对你理解这个函数的使用有没有帮助?

问题分析

看了rt_thread_create的源码实现,函数有3个地方返回,前面2个返回NULL,都是跟memory alloc有关;
image.png

另外,有个方法可以再确认下是否真的内存不足以创建更多的线程。
先创建2个线程,等系统能够跑起来后,查询下当前剩余的heap内存空间;
再新增一个线程,同样的返方法取得剩余的heap空间,
两者相减大致可以得出,创建一个线程的heap开销是多少;
以此作为衡量点,当你创建3/4个线程之后,如果剩余的heap不足以创建新的线程,
那么就可以得出结论了。

实战建议

如果真遇到这种情况,尝试下从代码框架设计的角度,考虑优化优化代码结构,
从设计上看看能否减少1-2个线程。
有个很简单的做法是,一些周期性的简单任务,可以用定时器代替,
这样就可以减少一个线程的消耗。

以上答案,希望对你有所启发。

楼主可以参考下这篇博文,关于这个板子的串口调试,兴许会有所启发。

这个博主还上传了其调试AB32VG1串口的工程代码,可以参考下。

看了下littlefs官方的github仓库对文件的定义,
的确没有发现对时戳的定义,
我想这主要还是为了减少littlefs的整体尺寸吧。
image.png

准确来说,模组使用的也只是ThreadX操作系统,而mqtt/coap/lwm2m/http这些也是作为第三库而存在的;
之前有接触过MTK出厂的模组芯片和ASR出厂的模组芯片,都是这么划分的。
类似的,RRT这边也是把一些常用的库已组件的形式存在,然后配合RRT的kernel一起使用,发挥更强大的应用生态效应。

针对你提到的这几个组件,大部分的开源生态都是主流包含的,比如我使用过的AliOS:
image.png

回到
顶部

发布
问题

投诉
建议