Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gcc arm时间二进制大小_Gcc_Arm_Stm32_Newlib - Fatal编程技术网

Gcc arm时间二进制大小

Gcc arm时间二进制大小,gcc,arm,stm32,newlib,Gcc,Arm,Stm32,Newlib,我需要从time.h对struct tm执行简单的算术运算。我需要增加或减少秒或分钟,并能够正常化结构。通常,我会使用mktime(3),作为副作用执行此规范化: struct tm t={.tm_hour=0.tm_min=59.tm_sec=40}; t、 tm_sec+=30; mktime&t; //t.tm_小时现在是1小时 //t.tm_min现在为0 //t.tm_秒现在是10 我在一个有32KB闪存的STM32上做这个,二进制文件变得非常大mktime(3)而它所拉入的其他东西

我需要从
time.h
struct tm
执行简单的算术运算。我需要增加或减少秒或分钟,并能够正常化结构。通常,我会使用
mktime(3)
,作为副作用执行此规范化:

struct tm t={.tm_hour=0.tm_min=59.tm_sec=40};
t、 tm_sec+=30;
mktime&t;
//t.tm_小时现在是1小时
//t.tm_min现在为0
//t.tm_秒现在是10
我在一个有32KB闪存的STM32上做这个,二进制文件变得非常大
mktime(3)
而它所拉入的其他东西占用了16KB的闪存空间——是可用空间的一半


newlib中是否有专门负责
struct tm
规范化的函数?我意识到,链接到这样的私有函数会使代码的可移植性降低。

newlib/libc/time/mktime.c
中有一个
validate_structure()
函数,它完成部分工作,将月、月、小时、分钟、秒标准化,但将周和年中的某一天单独保留

它被声明为
静态
,因此您不能简单地调用它,但可以从源代码复制函数。(不过可能存在许可问题)。或者你可以重新实现它,这很简单

tm_-wday
tm_-yday
稍后将在
mktime()
中计算,因此您需要包括时区内容在内的整个混乱,以便对这两个进行规范化

该16kB代码的大部分与调用
siscanf()
有关,它是
sscanf()的一个变体,不支持浮点,我相信它用于解析环境变量中的时区和DST信息


通过链接时使用
--specs=nano.specs
可以剪切大量不必要的代码,这将切换到简化的
printf
/
代码,在您的案例中节省大约10kB的代码。

这是一个嵌入式系统,可以在UTC中计算所有内容,而且碰巧不关心
tm_wday
tm_yday
,所以
validate_结构
非常适合我的需要。但是你的另一个建议,
-specs=nano.specs
,甚至更具吸引力,至少在我用完flash之前是这样。它在
.elf
中甚至节省了8000字节,至少现在我有足够的空间。非常感谢。