Sysop: | Amessyroom |
---|---|
Location: | Fayetteville, NC |
Users: | 28 |
Nodes: | 6 (0 / 6) |
Uptime: | 43:08:03 |
Calls: | 422 |
Calls today: | 1 |
Files: | 1,024 |
Messages: | 90,180 |
I'm looking to move my design onto said platform.
Any first-hand experiences to share?
Bugs in silicon, toolchain, support, etc.?
On 23/11/2024 09:15, Don Y wrote:
I'm looking to move my design onto said platform.
Any first-hand experiences to share?
Bugs in silicon, toolchain, support, etc.?
I've no experience with that device at all, but from experience with
other toolchains provided by TI over the years, watch out for zero initialisation of variables in the bss.
On 2024-11-23, David Brown <david.brown@hesbynett.no> wrote:
On 23/11/2024 09:15, Don Y wrote:
I'm looking to move my design onto said platform.
Any first-hand experiences to share?
Bugs in silicon, toolchain, support, etc.?
I've no experience with that device at all, but from experience with
other toolchains provided by TI over the years, watch out for zero
initialisation of variables in the bss.
For the cortex M4, I'd avoid using TI's toolchain if at all possible. Download a copy of GCC from ARM.
The general rule I've found to be true for the past 40 years is that software/tools supplied by silicon vendors is crap.
On 11/23/2024 12:57 PM, Grant Edwards wrote:
On 2024-11-23, David Brown <david.brown@hesbynett.no> wrote:
On 23/11/2024 09:15, Don Y wrote:
I'm looking to move my design onto said platform.
Any first-hand experiences to share?
Bugs in silicon, toolchain, support, etc.?
I've no experience with that device at all, but from experience with
other toolchains provided by TI over the years, watch out for zero
initialisation of variables in the bss.
[Hmmm... I don't see your post, David. <frown> Something must be
hosed in my server. (actually, I don't see MANY posts, here! Quiet?)]
BSS is a good warning. I've been using other tools with the ARM that
I've "abandoned" ("moved past" might be a kinder way of reference).
I tend to rely on vendors tools *if* there is likely to be some
bug that the tools can workaround -- that a third-party vendor
may not be aware of (or address).
For the cortex M4, I'd avoid using TI's toolchain if at all possible.
Download a copy of GCC from ARM.
This is an A53 (ARMv8) -- at least the "main cores" are. There's
also an M4(F) -- and, as typical of ARM, a couple of other
"specialty processors".
The general rule I've found to be true for the past 40 years is that
software/tools supplied by silicon vendors is crap.
That's a direct analog of the issues with "sample applications" for
hardware devices!
What about "support"? Are there anything other than trained monkeys available? Or, is everything "forum based" (what a great scam!
outsource your support to your CUSTOMERS!!)
On 2024-11-23, David Brown <david.brown@hesbynett.no> wrote:
On 23/11/2024 09:15, Don Y wrote:
I'm looking to move my design onto said platform.
Any first-hand experiences to share?
Bugs in silicon, toolchain, support, etc.?
I've no experience with that device at all, but from experience with
other toolchains provided by TI over the years, watch out for zero
initialisation of variables in the bss.
For the cortex M4, I'd avoid using TI's toolchain if at all possible. Download a copy of GCC from ARM.
The general rule I've found to be true for the past 40 years is that software/tools supplied by silicon vendors is crap.
Some vendor-supplied toolchains are not bad, but some are definitely
subpar - and often many years behind the versions you get from
manufacturer independent suppliers (like ARM's build of a gcc toolchain,
or commercial gcc toolchains). The biggest problem with microcontroller manufacturer's tools is usually the SDK's that are frequently horrible
in all sorts of ways.
But I agree with your advice - where possible, use ARM's gcc toolchain
build for ARM development. And make sure your project build is
independent of any IDE, whether it is from the vendor or independent.
IDE's are great for coding, and vendor-supplied IDE's can give good
debugging tools, but you want the project build itself to be independent.
On 2024-11-24, David Brown <david.brown@hesbynett.no> wrote:
Some vendor-supplied toolchains are not bad, but some are definitely
subpar - and often many years behind the versions you get from
manufacturer independent suppliers (like ARM's build of a gcc toolchain,
or commercial gcc toolchains). The biggest problem with microcontroller
manufacturer's tools is usually the SDK's that are frequently horrible
in all sorts of ways.
But I agree with your advice - where possible, use ARM's gcc toolchain
build for ARM development. And make sure your project build is
independent of any IDE, whether it is from the vendor or independent.
IDE's are great for coding, and vendor-supplied IDE's can give good
debugging tools, but you want the project build itself to be independent.
What he said, defintely: Avoid vendor-specific IDEs and SDKs like the
plague.
Demo apps and libraries from Silicon vendors are usually awful -- even
worse than the toolchains. I'm pretty sure they're written by interns
who think that to be "professional" it has to incorporate layers and
layers of macros and objects and abstrcation and polymorphism and
whatnot.
As a result I rememeber failing to get a vendor's "hello world" demo
to run on a Cortex-M0+ because it was too large for both the flash and
RAM available on the lower end of the family. And it wsan't even
using "printf" just a "low level" serial port driver that should have
been a few hundred bytes of code but was actually something like
10KB..
On 2024-11-24, David Brown <david.brown@hesbynett.no> wrote:
Some vendor-supplied toolchains are not bad, but some are definitely
subpar - and often many years behind the versions you get from
manufacturer independent suppliers (like ARM's build of a gcc toolchain,
or commercial gcc toolchains). The biggest problem with microcontroller
manufacturer's tools is usually the SDK's that are frequently horrible
in all sorts of ways.
But I agree with your advice - where possible, use ARM's gcc toolchain
build for ARM development. And make sure your project build is
independent of any IDE, whether it is from the vendor or independent.
IDE's are great for coding, and vendor-supplied IDE's can give good
debugging tools, but you want the project build itself to be independent.
What he said, defintely: Avoid vendor-specific IDEs and SDKs like the
plague.
Demo apps and libraries from Silicon vendors are usually awful -- even
worse than the toolchains. I'm pretty sure they're written by interns
who think that to be "professional" it has to incorporate layers and
layers of macros and objects and abstrcation and polymorphism and
whatnot.
As a result I rememeber failing to get a vendor's "hello world" demo
to run on a Cortex-M0+ because it was too large for both the flash and
RAM available on the lower end of the family. And it wsan't even
using "printf" just a "low level" serial port driver that should have
been a few hundred bytes of code but was actually something like
10KB..
On 11/24/2024 10:12 AM, Grant Edwards wrote:
On 2024-11-24, David Brown <david.brown@hesbynett.no> wrote:
[And I'm STILL not seeing your posts. <frown> Something must
be broken in my server. Yet the telephone system seems to be
working properly! Yet another thing to look into...]
Some vendor-supplied toolchains are not bad, but some are definitely
subpar - and often many years behind the versions you get from
manufacturer independent suppliers (like ARM's build of a gcc toolchain, >>> or commercial gcc toolchains). The biggest problem with microcontroller >>> manufacturer's tools is usually the SDK's that are frequently horrible
in all sorts of ways.
I think vendors offer tools for much the same reason as they
write app notes or illustrate "typical applications". Their
goal is to get you USING their product, as quickly as
possible. If you had to hunt for development tools, then
you would likely bias your device selection based on the
availability and cost of said tools.
[I worked with a firm that offered a "development system"
(compile/ASM/debug
suite plus hardware ICE, in the days before JTAG and on-chip debug
existed) for an obscure, old processor. They recounted a story where
a customer purchased said tool -- for a fair bit of money. And, promptly RETURNED it with a *nasty* note complaining about the (low) quality
of the fabrication! Some time later, they REordered the system...
when they discovered there were no other offerings in that market!]
Note the inroads Microchip made (esp with hobbyists) by offering
free/low cost tools for their devices. I suspect their devices
were not the ideal choices for those applications -- but, the value
of HAVING the tools without spending kilobucks to buy them weighed
heavily in their decisions!
But I agree with your advice - where possible, use ARM's gcc toolchain
build for ARM development. And make sure your project build is
independent of any IDE, whether it is from the vendor or independent.
IDE's are great for coding, and vendor-supplied IDE's can give good
debugging tools, but you want the project build itself to be
independent.
This is a given, regardless. "Sole source" suppliers are always a risk. Moving from one ARM to another (vs a totally different architecture)
saves a lot -- but, you are still stuck with the choices the fab made
in what they decided to offer.
What he said, defintely: Avoid vendor-specific IDEs and SDKs like the
plague.
Demo apps and libraries from Silicon vendors are usually awful -- even
worse than the toolchains. I'm pretty sure they're written by interns
who think that to be "professional" it has to incorporate layers and
layers of macros and objects and abstrcation and polymorphism and
whatnot.
The same is often true of "app notes" for hardware components.
I interviewed a prospective client about a project. Somewhere
along the line he "proudly" presented his proposed "solution"
(then, what do you need ME for?).
I looked at it (schematic) and replied: "This won't work."
I.e., there were signals with no driving sources! He then
admitted to copying it from an app note (said reproduction
later verified to have been accurate; the app note was in error!)
But, you aren't likely going to RUN those apps. And, libraries
can be rebuilt and redesigned. So, you aren't at their "mercy"
for those things.
OTOH, if the vendor has some knowledge of a device defect (that
they aren't eager to publicize -- "trade secrets") but their
tools are aware of it and SILENTLY work-around it, then they
have a leg up on a third-party who is trying to DEDUCE how
the device works from the PUBLISHED knowledge (and personal
observations).
E.g., I would be happier knowing that a compiler would avoid
generating code that could tickle vulnerabilities in a
system (e.g., memory) over one that blindly strives for
performance (or ignorance).
Or, a compiler that knows enough about the SPECIFIC processor
(not just the FAMILY) to know how to more finely optimize its
scheduling of instructions.
[The days of expecting the code to just implement the expressed
algorithm are long past. "What ELSE are you going to do FOR me?"]
As a result I rememeber failing to get a vendor's "hello world" demo
to run on a Cortex-M0+ because it was too large for both the flash and
RAM available on the lower end of the family. And it wsan't even
using "printf" just a "low level" serial port driver that should have
been a few hundred bytes of code but was actually something like
10KB..
But, if they published that code, you could inspect it, determine
what it was TRYING to do and fix it (or, take a lesson from it).
It's amusing when these sorts of things are treated as "proprietary information" ("secret"). There's nothing revolutionary in a GENERIC standard library implementation (though there are varying degrees
of performance that can be obtained from those that are SPECIALIZED)
I think the clearest "war story" I have seen of that kind was for a
tiny 8-bit device from Freescale. The chip had perhaps 2K of flash.
Since this was a one-off use of the chip and I didn't want to read
more manuals than I needed to, I use the vendor IDE "wizard" to make
the initialisation code and a "driver" for the ADC. The resulting
code was about 3.5 KB - for the 2 KB microcontroller. So I read the
manual and found that the ADC peripheral needed one single bit set
to make it run as I needed.
On 2024-11-25, David Brown <david.brown@hesbynett.no> wrote:
I think the clearest "war story" I have seen of that kind was for a
tiny 8-bit device from Freescale. The chip had perhaps 2K of flash.
Since this was a one-off use of the chip and I didn't want to read
more manuals than I needed to, I use the vendor IDE "wizard" to make
the initialisation code and a "driver" for the ADC. The resulting
code was about 3.5 KB - for the 2 KB microcontroller. So I read the
manual and found that the ADC peripheral needed one single bit set
to make it run as I needed.
One of the problems that the SDK authors have to try to deal with is
that the peripherals have gotten "too" versatile. They've got a
polled mode, an interrupt driven mode, a DMA mode, a burst mode, a
batch mode, a right-side up mode, an updisde-down mode, and three compatibility modes so they'll work like products from 40 years ago.
The SDK "drivers" always try to support all the modes in all possible combinations and sometimes even allow you to switch back and forth
while the thing is running. They'll have open() and close() methods
for no apparent reason for devices that don't need to be opened or
closed.
As a result, you end up with 3.5KB of driver for an ADC.
Then, in the real world. 99.99% of applicatoins only use one very
sepecific mode. You either read the hardware description and write
code from scratch (though the #defines for register offsets are
useful), or you pick your way through the "driver" code for you
particular set of modes/choices to find the handful of lines of code
that you need.
Rather than providing a full-up "driver" I would find it a _lot_ more
useful if they just provided documented code snippets to perform some
of the basic operations that one needs to perform.
On 2024-11-25, David Brown <david.brown@hesbynett.no> wrote:
I think the clearest "war story" I have seen of that kind was for a
tiny 8-bit device from Freescale. The chip had perhaps 2K of flash.
Since this was a one-off use of the chip and I didn't want to read
more manuals than I needed to, I use the vendor IDE "wizard" to make
the initialisation code and a "driver" for the ADC. The resulting
code was about 3.5 KB - for the 2 KB microcontroller. So I read the
manual and found that the ADC peripheral needed one single bit set
to make it run as I needed.
One of the problems that the SDK authors have to try to deal with is
that the peripherals have gotten "too" versatile. They've got a
polled mode, an interrupt driven mode, a DMA mode, a burst mode, a
batch mode, a right-side up mode, an updisde-down mode, and three compatibility modes so they'll work like products from 40 years ago.
The SDK "drivers" always try to support all the modes in all possible combinations and sometimes even allow you to switch back and forth
while the thing is running. They'll have open() and close() methods
for no apparent reason for devices that don't need to be opened or
closed.
As a result, you end up with 3.5KB of driver for an ADC.
Then, in the real world. 99.99% of applicatoins only use one very
sepecific mode. You either read the hardware description and write
code from scratch (though the #defines for register offsets are
useful), or you pick your way through the "driver" code for you
particular set of modes/choices to find the handful of lines of code
that you need.
Rather than providing a full-up "driver" I would find it a _lot_ more
useful if they just provided documented code snippets to perform some
of the basic operations that one needs to perform.