你们用华大003的MCU,有用原厂的库函数例程吗?
本帖最后由 retention 于 2020-3-5 11:27 编辑用的发现太他妈占FLASH空间了,举例:如果调用库函数来初始化ADC就占用了1K的空间,这根本没法使用呀,
编译环境keil,优化等级为 Level 0
9楼有源代码,看是我个人原因还是库的原因?哪位大神有空帮忙编译看看,IDE :KEIL5 我是没有,像这样的小单片机没有必要用库,太大了,而且官方的库都是垃圾,跟ST的标准库比起来差远了
能改源码的就改源码呗,不能改的话,优化也没有用,相关函数指令基本都已经在生成库的时候确定了 用寄存器 看看是每种外设的库函数都要占用这么大空间,还是所有外设库函数有公用的关联部分导致增加了这部分空间?前者不可忍受,后者还能理解。 用库,然后逐步跟进去,复制有用的寄存器代码,进行替换 本帖最后由 lixin91985 于 2020-3-5 10:55 编辑
我也用HC的MCU ,感觉还好啊 ,ADC初始化应该用不了这么多flash吧。
以下是我的程序,整个ADC文件的MAP信息。
Code (inc. data) RO Data RW Data ZI Data Debug Object Name
228 24 0 0 0 19450 adc.o 有没有keil4的版本,keil5是真的大 本帖最后由 retention 于 2020-3-5 11:28 编辑
lixin91985 发表于 2020-3-5 10:54
我也用HC的MCU ,感觉还好啊 ,ADC初始化应该用不了这么多flash吧。
以下是我的程序,整个ADC文件的MAP信 ...
你的也是用原厂的库吗?怎么我编译出来 用了这么多空间的?我这个工程根本就没做什么事情?就占了7K多的空间?
有空帮忙编译一下这个工程吗?我想是不是我的原因造成FLASH占用巨大的
优化等级开高点 自己顶一下 为什么体积大,可以通过编译后的map文件检查的,里面什么东西占了多少空间一清二楚 没注意过,不过感觉华大库还是挺好用的,官方资料很详细 开了 O1
后要小一点
Program Size: Code=5760 RO-data=416 RW-data=96 ZI-data=600
FromELF: creating hex file...
".\OBJ\Template.axf" - 0 Error(s), 1 Warning(s).
Build Time Elapsed:00:00:05 tangnyzl 发表于 2020-3-5 16:05
开了 O1
后要小一点
Program Size: Code=5760 RO-data=416 RW-data=96 ZI-data=600
那应该不是优化的问题,是这个库本来就写得垃圾了 retention 发表于 2020-3-5 11:22
你的也是用原厂的库吗?怎么我编译出来 用了这么多空间的?我这个工程根本就没做什么事情?就占了7K多的 ...
估计你是没有勾选按函数编译没用到函数都进去了 retention 发表于 2020-3-5 11:22
你的也是用原厂的库吗?怎么我编译出来 用了这么多空间的?我这个工程根本就没做什么事情?就占了7K多的 ...
我这边通过MAP文件发现
ADC.C占用 1200byte,整个工程 库的公共开销占用了896byte。
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x00000540 0x00000540 0x000000e0 Code RO 1865 i.AdcInit driver.o
其他关联调用的情况如下
i.ADC_IRQHandler 0x00000494 Section 0interrupts_hc32f003.o(i.ADC_IRQHandler)
i.AdcDisableNvic 0x00000498 Section 0adc.o(i.AdcDisableNvic)
AdcDisableNvic 0x00000499 Thumb Code 72 adc.o(i.AdcDisableNvic)
i.AdcEnableNvic 0x000004e4 Section 0adc.o(i.AdcEnableNvic)
AdcEnableNvic 0x000004e5 Thumb Code 48 adc.o(i.AdcEnableNvic)
i.AdcHhtIrqCallback 0x00000518 Section 0driver.o(i.AdcHhtIrqCallback)
i.AdcInit 0x00000540 Section 0driver.o(i.AdcInit)
i.Adc_ClrContIrqState 0x00000620 Section 0adc.o(i.Adc_ClrContIrqState)
i.Adc_ClrHhtIrqState 0x00000630 Section 0adc.o(i.Adc_ClrHhtIrqState)
i.Adc_ClrIrqLltState 0x00000640 Section 0adc.o(i.Adc_ClrIrqLltState)
i.Adc_ClrRegIrqState 0x00000650 Section 0adc.o(i.Adc_ClrRegIrqState)
i.Adc_CmpCfg 0x00000660 Section 0adc.o(i.Adc_CmpCfg)
i.Adc_ConfigIrq 0x000006e4 Section 0adc.o(i.Adc_ConfigIrq)
i.Adc_ConfigNormMode 0x00000734 Section 0adc.o(i.Adc_ConfigNormMode)
i.Adc_DisableIrq 0x0000078c Section 0adc.o(i.Adc_DisableIrq)
i.Adc_Enable 0x000007c0 Section 0adc.o(i.Adc_Enable)
i.Adc_EnableIrq 0x000007d4 Section 0adc.o(i.Adc_EnableIrq)
i.Adc_Init 0x000007ec Section 0adc.o(i.Adc_Init)
i.Adc_Start 0x000008e4 Section 0adc.o(i.Adc_Start)
i.Adt_IRQHandler 0x00000918 Section 0adt.o(i.Adt_IRQHandler)
huangqi412 发表于 2020-3-5 17:46
估计你是没有勾选按函数编译没用到函数都进去了
这个在哪里设置的? lixin91985 发表于 2020-3-5 21:18
我这边通过MAP文件发现
ADC.C占用 1200byte,整个工程 库的公共开销占用了896byte。
这个没办法优化了? retention 发表于 2020-3-5 23:16
这个没办法优化了?
调整优化等级应该可以变小,看你文件组成,主要是CLK部分占用的空间比较大。
M0 的芯片flash都不小,M0内核要跑起来有很多内容需要初始化,以后你再添加代码增加就不多了。 lixin91985 发表于 2020-3-6 10:42
调整优化等级应该可以变小,看你文件组成,主要是CLK部分占用的空间比较大。
M0 的芯片flash都不小,M0 ...
放弃优化库函数了,改用寄存器操作初始化完所需外设,消耗了2K左右空间,目前还算满意。 必须这样,国产ARM小单片机库都搞得太复杂了,可读性差,臃肿庞大。像国内的这样的小单片机,如华大,航顺,那瓦特,复旦微都搞成不伦不类的库,又没有ST的好 bs1234 发表于 2020-3-9 11:49
必须这样,国产ARM小单片机库都搞得太复杂了,可读性差,臃肿庞大。像国内的这样的小单片机,如华大,航顺 ...
最近用ST的hal库,,痛苦得要命,, 很怀念STD库。。
HAL库是完全不想用户和底层硬件打交道。
但是没办法,,STD在外设处理上如果跑操作系统安全性没HAL库好。 最近也在看华大的库,写得还是不错的。
不过M0比较简单直接寄存器也是可以的,库因为考虑各种情况所以肯定要大一点
页:
[1]