介绍下问题提出背景,我的程序中有个90多k的数组,70%以上都是连续的0,我打算用rle算法压缩,估计降低一半以上大小是可行的
初步思路是搞个上位机的命令行程序,读取这个数组c文件,压缩后生成一个bin文件,mdk支持在编译前运行命令,然后mdk装载这个bin文件生成最后的程序文件,整个过程都会自动完成
现在事情还没开始就遇上一个麻烦事,如何读取数组c文件,因为这个3维数组使用嵌套大括号表示数组层次,连续的0其实都是没标出的,编译器当然明白这些,但是如果自己来做的话就要自己解析这个数组c文件到内存里,这个也不是一会儿功夫可以搞定的啊
请问谁有这方面的经验,或者有开源的库可以干这个活呢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
今天又有新收获 找到了外部给main传递参数的函数
在rt_misc.h中找到__ARM_get_argv这个函数,这个函数就是传递参数使用的
所以定义动态加载程序时,可以在area RESET 增加一个缓冲区头和大小指示,然后之后才是Reset_Handler标号
注意这个缓冲区务必指定noinit属性,因为它是供外部程序传递参数的
重定义__ARM_get_argv,解析缓冲区,从中提取参数并返回即可,注意程序内部使用heap传递main参数,所以不要忘记定义合适的heap大小
动态加载程序时,首先读取程序头上的缓冲区并且填入合适的命令行字符串,注意不要溢出,之后就运行Reset_Handler即可
再提一点,cm3系列首地址的sp指针其实无用,可以破坏,__main在内部临时定义一个栈指针并且在返回main函数前恢复首地址上那个sp指针值
这个能否讲下,
一周热门 更多>