Liste des Groupes | Revenir à ca embedded |
Il 11/03/2025 17:32, David Brown ha scritto:I believe it applies to all of Microchip's toolchains - and that now includes those for the Atmel devices it acquired.On 11/03/2025 16:22, pozz wrote:Maybe you are thinking about Microchip IDE named MPLAB X or something similar. I read something about disabled optimizations in the free version of the toolchain.I have an embedded project that is compiled in Atmel Studio 7.0. The target is and ARM MCU, so the toolchain is arm-gnu-toolchain. The installed toolchain version is 6.3.1.508. newlib version is 2.5.0.>
>
I /seriously/ dislike Microchip's way of handling toolchains. They work with old, outdated versions, rename and rebrand them and their documentation to make it look like they wrote them themselves, then add license checks and software locks so that optimisation is disabled unless you pay them vast amounts of money for the software other people wrote and gave away freely. To my knowledge, they do not break the letter of the license for GCC and other tools and libraries, but they most certainly break the spirit of the licenses in every way imaginable.
However I'm using *Atmel Studio* IDE, that is an old IDE distributed by Atmel, before the Microchip purchase. The documentation speaks about some Atmel customization of ARM gcc toolchain, but it clearly specified the toolchain is an arm gcc.OK.
It is not the products that I am talking about. I've always like the AVR architecture (though it could have been massively better with a few small changes). Though I haven't used their ARM devices myself, I have heard nice things about them. I am talking about the toolchains.Prior to being bought by Microchip, Atmel was bad - but not as bad.Why do you think Atmel was bad? I think they had good products.
Day of week calculations are peanuts - divide the seconds count by the number of seconds in a day, add a constant value for whatever day 01.01.1970 was, and reduce modulo 7.So if for some reason I have no choice but to use a device from Atmel / Microchip, I do so using tools from elsewhere.Yes, you're right, but now it's too late to change the toolchain.
>
As a general rule, the gcc-based toolchains from ARM are the industry standard, and are used as the base by most ARM microcontroller suppliers. Some include additional library options, others provide the package as-is. For anything other than a quick demo, my preferred setup is using makefiles for the build along with an ARM gcc toolchain. That way I can always build my software, from any system, and archive the toolchain. (One day, I will also try using clang with these packages, but I haven't done so yet.)
Any reasonably modern ARM gcc toolchain will have 64-bit time_t. I never like changing toolchains on an existing project, but you might make an exception here.I will check.
However, writing functions to support time conversions is not difficult. The trick is not to start at 01.01.1970, but start at a convenient date as early as you will need to handle - 01.01.2025 would seem a logical point. Use <https://www.unixtimestamp.com/> to get the time_t constant for the start of your epoch.If I had to rewrite my own functions, I could define time64_t as uint64_t, keeping the Unix epoch as my epoch.
>
To turn the current time_t value into a human-readable time and date, first take the current time_t and subtract the epoch start. Divide by 365 * 24 * 60 * 60 to get the additional years. Divide the leftovers by 24 * 60 * 60 to get the additional days. Use a table of days in the months to figure out the month. Leap year handling is left as an exercise for the reader (hint - 2100, 2200 and 2300 are not leap years, while 2400 is). Use the website I linked to check your results.
Regarding implementation, I don't know if it so simple. mktime() fix the members of struct tm passed as an argument (and this is useful to calculate the day of the week). Moreover I don't only need the conversion from time64_t to struct tm, but viceversa too.
So find a simpler standard C library implementation. Try the avrlibc, for example.>It's a very complex code. time functions are written for whatever timezone is set at runtime (TZ env variable), so their complexity are higher.
Or you can get the sources for a modern version of newlib, and pull the routines from there.
Les messages affichés proviennent d'usenet.