据Using <chrono> as a timer in bare-metal microcontroller?易于在微控制器上使用std :: chrono。
我的问题是avr-gcc(用于avr微控制器的gcc)已禁用chrono(以及许多其他c ++功能)。如何在AVR-GCC中使用chrono?
不同选项:
1.-将std :: chrono复制到gcc的另一个版本。
2.-编写我自己的std :: chrono版本。
3.-忘记std :: chrono并以C方式读取时间。
4.- ... ???
- 将std :: chrono复制到gcc的另一个版本。
这将无济于事,因为有些依赖项。在x86_64上:
echo '#include <chrono>' | g++ -fsyntax-only -xc++ - -H
将显示很多标题:
. /install/gcc-8-host/include/c++/8.0.1/chrono
.. /install/gcc-8-host/include/c++/8.0.1/ratio
... /install/gcc-8-host/include/c++/8.0.1/type_traits
.... /install/gcc-8-host/include/c++/8.0.1/x86_64-linux-gnu/bits/c++config.h
..... /install/gcc-8-host/include/c++/8.0.1/x86_64-linux-gnu/bits/os_defines.h
...... /usr/include/features.h
....... /usr/include/x86_64-linux-gnu/sys/cdefs.h
........ /usr/include/x86_64-linux-gnu/bits/wordsize.h
........ /usr/include/x86_64-linux-gnu/bits/long-double.h
....... /usr/include/x86_64-linux-gnu/gnu/stubs.h
........ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h
..... /install/gcc-8-host/include/c++/8.0.1/x86_64-linux-gnu/bits/cpu_defines.h
... /install/gcc-8-host/include/c++/8.0.1/cstdint
.... /install/gcc-8-host/lib/gcc/x86_64-linux-gnu/8.0.1/include/stdint.h
..... /usr/include/stdint.h
...... /usr/include/x86_64-linux-gnu/bits/libc-header-start.h
...... /usr/include/x86_64-linux-gnu/bits/types.h
....... /usr/include/x86_64-linux-gnu/bits/wordsize.h
....... /usr/include/x86_64-linux-gnu/bits/typesizes.h
...... /usr/include/x86_64-linux-gnu/bits/wchar.h
...... /usr/include/x86_64-linux-gnu/bits/wordsize.h
...... /usr/include/x86_64-linux-gnu/bits/stdint-intn.h
...... /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h
.. /install/gcc-8-host/include/c++/8.0.1/limits
.. /install/gcc-8-host/include/c++/8.0.1/ctime
... /usr/include/time.h
.... /install/gcc-8-host/lib/gcc/x86_64-linux-gnu/8.0.1/include/stddef.h
.... /usr/include/x86_64-linux-gnu/bits/time.h
..... /usr/include/x86_64-linux-gnu/bits/timex.h
...... /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h
.... /usr/include/x86_64-linux-gnu/bits/types/clock_t.h
.... /usr/include/x86_64-linux-gnu/bits/types/time_t.h
.... /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h
.... /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h
.... /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h
.... /usr/include/x86_64-linux-gnu/bits/types/timer_t.h
.... /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h
.... /usr/include/x86_64-linux-gnu/bits/types/locale_t.h
..... /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h
.. /install/gcc-8-host/include/c++/8.0.1/bits/parse_numbers.h
这些都不随avr-g ++一起分发,因为libstdc ++-v3已被avr禁用。
此外,根据所使用的功能,您将需要诸如libstdc++-v3/src/c++11/chrono.cc之类的模块,这些模块会进一步拖动依赖关系,尤其是从avr-g ++(裸机)所不具备的假定基础操作系统中。
- 编写我自己的std :: chrono版本。
这会有什么好处?您只需要从某台主机复制粘贴代码就可以了,应该可以正常工作吗?
- 忘记std :: chrono并以C方式读取时间。
IMO,唯一可行的方法。您想控制系统资源。