Just Launched: You can now import projects and releases from Google Code onto SourceForge
We are excited to release new functionality to enable a 1-click import from Google Code onto the Allura platform on SourceForge. You can import tickets, wikis, source, releases, and more with a few simple steps. Read More
(from my post on Monday):
>> I hit a bug today, which makes my mp3 player project crash in some
>> very mysterious ways. Reverting to a SDCC from a few weeks ago, the
>> problem disappears. I don't know what's going on yet, but I will
>> dig deeper in the next couple days. It could be something stupid
>> in my code that didn't matter before. I don't like posting bug
>> reports without a good test case, but since you asked....
>Please expose is to the community...
I fixed this on Tuesday. I should have said something. In the
last couple days I've been going board layout and my mind hasn't
been on writing code.
It turned out the thing that changed was memcpy. Code optimized z80
was added. It's all ifdef'd out for mcs51, except for a "#pragma
NOINDUCTION". I spent a bit of time trying to read through the
memcpy.asm code generated with and without this change, but I
gave up, mostly being tired from comparing the asm generated for
all my project's code before finally digging into the C library.
So, I just moved the pragma inside the z80 portion and the problem
went away. Perhaps it's a bug and it should work either way... I
do not know much about these device independent optimizations
(I'm mostly a hardware and assembly language guy :)
>I mentioned before that a .rel should have a signature that specifies
>how it is compiled (and a stamp for each global !), so the linker could warn
I'll try to do this once 2.3 is released.
>if it is abused. Also initialisation of volatile data should be improved. I
>suggest we leave this for the next run (2.4).
A couple years ago I used the Hi-Tech commercial C compiler for the
Philips XA chip. They put all the non-zero initialized static and
global variables into some special memory segments that the linker
wrote into code memory, and then they has a little startup routine
that could copy these code segments into the various memory areas
using symbols from the linker to know where to copy the data and
how much to copy. Definately this is a 2.4 feature.