如何读取数组的c文件,在内存中映射成真正的数组

2020-01-01 17:48发布

介绍下问题提出背景,我的程序中有个90多k的数组,70%以上都是连续的0,我打算用rle算法压缩,估计降低一半以上大小是可行的

初步思路是搞个上位机的命令行程序,读取这个数组c文件,压缩后生成一个bin文件,mdk支持在编译前运行命令,然后mdk装载这个bin文件生成最后的程序文件,整个过程都会自动完成

现在事情还没开始就遇上一个麻烦事,如何读取数组c文件,因为这个3维数组使用嵌套大括号表示数组层次,连续的0其实都是没标出的,编译器当然明白这些,但是如果自己来做的话就要自己解析这个数组c文件到内存里,这个也不是一会儿功夫可以搞定的啊

请问谁有这方面的经验,或者有开源的库可以干这个活呢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
35条回答
myxiaonia
1楼-- · 2020-01-05 17:13
基本可以确实,无法给动态加载程序添加argv,argc参数了,我跟踪到main函数调用处,那个函数不允许重定义
niechao15
2楼-- · 2020-01-05 21:49
不明觉厉,帮顶
myxiaonia
3楼-- · 2020-01-05 23:34
本帖最后由 myxiaonia 于 2016-8-4 16:06 编辑
myxiaonia 发表于 2016-8-2 16:34
基本可以确实,无法给动态加载程序添加argv,argc参数了,我跟踪到main函数调用处,那个函数不允许重定义 ...


今天又有新收获 找到了外部给main传递参数的函数

在rt_misc.h中找到__ARM_get_argv这个函数,这个函数就是传递参数使用的

所以定义动态加载程序时,可以在area RESET 增加一个缓冲区头和大小指示,然后之后才是Reset_Handler标号

注意这个缓冲区务必指定noinit属性,因为它是供外部程序传递参数的

重定义__ARM_get_argv,解析缓冲区,从中提取参数并返回即可,注意程序内部使用heap传递main参数,所以不要忘记定义合适的heap大小

动态加载程序时,首先读取程序头上的缓冲区并且填入合适的命令行字符串,注意不要溢出,之后就运行Reset_Handler即可
huangqi412
4楼-- · 2020-01-06 00:31
myxiaonia 发表于 2016-8-1 01:23
ropi,即位置独立程序在mdk中生成的方法已经找到

勾选c,asm选项卡中ropi选型,link选项卡不使用mdk自动生 ...

再提一点,cm3系列首地址的sp指针其实无用,可以破坏,__main在内部临时定义一个栈指针并且在返回main函数前恢复首地址上那个sp指针值

这个能否讲下,
myxiaonia
5楼-- · 2020-01-06 01:47
 精彩回答 2  元偷偷看……

一周热门 更多>