retention 发表于 2020-3-5 09:27:25

你们用华大003的MCU,有用原厂的库函数例程吗?

本帖最后由 retention 于 2020-3-5 11:27 编辑

用的发现太他妈占FLASH空间了,举例:如果调用库函数来初始化ADC就占用了1K的空间,这根本没法使用呀,

编译环境keil,优化等级为 Level 0

9楼有源代码,看是我个人原因还是库的原因?哪位大神有空帮忙编译看看,IDE :KEIL5

bs1234 发表于 2020-3-5 09:46:55

我是没有,像这样的小单片机没有必要用库,太大了,而且官方的库都是垃圾,跟ST的标准库比起来差远了

cloudboy 发表于 2020-3-5 10:05:37

能改源码的就改源码呗,不能改的话,优化也没有用,相关函数指令基本都已经在生成库的时候确定了

小Z 发表于 2020-3-5 10:10:16

用寄存器

PPS 发表于 2020-3-5 10:20:48

看看是每种外设的库函数都要占用这么大空间,还是所有外设库函数有公用的关联部分导致增加了这部分空间?前者不可忍受,后者还能理解。

pt2go 发表于 2020-3-5 10:44:11

用库,然后逐步跟进去,复制有用的寄存器代码,进行替换

lixin91985 发表于 2020-3-5 10:54:17

本帖最后由 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

bonn_y 发表于 2020-3-5 11:15:19

有没有keil4的版本,keil5是真的大

retention 发表于 2020-3-5 11:22:36

本帖最后由 retention 于 2020-3-5 11:28 编辑

lixin91985 发表于 2020-3-5 10:54
我也用HC的MCU ,感觉还好啊 ,ADC初始化应该用不了这么多flash吧。

以下是我的程序,整个ADC文件的MAP信 ...

你的也是用原厂的库吗?怎么我编译出来 用了这么多空间的?我这个工程根本就没做什么事情?就占了7K多的空间?

有空帮忙编译一下这个工程吗?我想是不是我的原因造成FLASH占用巨大的

大傻师 发表于 2020-3-5 12:27:26

优化等级开高点

retention 发表于 2020-3-5 14:39:05

自己顶一下

jiaowoxiaolu 发表于 2020-3-5 14:43:44

为什么体积大,可以通过编译后的map文件检查的,里面什么东西占了多少空间一清二楚

nade 发表于 2020-3-5 15:20:20

没注意过,不过感觉华大库还是挺好用的,官方资料很详细

tangnyzl 发表于 2020-3-5 16:05:46

开了 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

retention 发表于 2020-3-5 16:30:26

tangnyzl 发表于 2020-3-5 16:05
开了 O1
后要小一点
Program Size: Code=5760 RO-data=416 RW-data=96 ZI-data=600


那应该不是优化的问题,是这个库本来就写得垃圾了

huangqi412 发表于 2020-3-5 17:46:15

retention 发表于 2020-3-5 11:22
你的也是用原厂的库吗?怎么我编译出来 用了这么多空间的?我这个工程根本就没做什么事情?就占了7K多的 ...

估计你是没有勾选按函数编译没用到函数都进去了

lixin91985 发表于 2020-3-5 21:18:18

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)

retention 发表于 2020-3-5 23:15:56

huangqi412 发表于 2020-3-5 17:46
估计你是没有勾选按函数编译没用到函数都进去了

这个在哪里设置的?

retention 发表于 2020-3-5 23:16:58

lixin91985 发表于 2020-3-5 21:18
我这边通过MAP文件发现
ADC.C占用 1200byte,整个工程 库的公共开销占用了896byte。



这个没办法优化了?

lixin91985 发表于 2020-3-6 10:42:27

retention 发表于 2020-3-5 23:16
这个没办法优化了?

调整优化等级应该可以变小,看你文件组成,主要是CLK部分占用的空间比较大。

M0 的芯片flash都不小,M0内核要跑起来有很多内容需要初始化,以后你再添加代码增加就不多了。

retention 发表于 2020-3-8 22:29:04

lixin91985 发表于 2020-3-6 10:42
调整优化等级应该可以变小,看你文件组成,主要是CLK部分占用的空间比较大。

M0 的芯片flash都不小,M0 ...

放弃优化库函数了,改用寄存器操作初始化完所需外设,消耗了2K左右空间,目前还算满意。

bs1234 发表于 2020-3-9 11:49:56

必须这样,国产ARM小单片机库都搞得太复杂了,可读性差,臃肿庞大。像国内的这样的小单片机,如华大,航顺,那瓦特,复旦微都搞成不伦不类的库,又没有ST的好

lixin91985 发表于 2020-3-9 17:35:26

bs1234 发表于 2020-3-9 11:49
必须这样,国产ARM小单片机库都搞得太复杂了,可读性差,臃肿庞大。像国内的这样的小单片机,如华大,航顺 ...

最近用ST的hal库,,痛苦得要命,, 很怀念STD库。。
HAL库是完全不想用户和底层硬件打交道。

但是没办法,,STD在外设处理上如果跑操作系统安全性没HAL库好。

zhugean 发表于 2020-3-10 08:33:52

最近也在看华大的库,写得还是不错的。
不过M0比较简单直接寄存器也是可以的,库因为考虑各种情况所以肯定要大一点
页: [1]
查看完整版本: 你们用华大003的MCU,有用原厂的库函数例程吗?