We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I keep getting a 'Target not created' error at the end of compile. When I comment out a printf, everything is fine. What is the problem? Thank you.
Oh, sorry, there are other error messages. What does ADDRESS SPACE OVERFLOW mean?
Let me guess: you're calling printf() from an interrupt handler? Stefan
What does ADDRESS SPACE OVERFLOW mean? That your code tried to put more stuff into one of the 8051 address spaces (in the case at hand: into DATA) than fits into it. Pretty straightforward, I'd have thought, especially after you looking up the error message number in the docs. But in the case at hand, that's an indirect error. The real problem is that you have so much code compiled in your source files that isn't actually used for anything, as far as the compiler could tell. That wreaks havoc in the data overlay optimization step, and thus caused your data segment to overflow. Fix those "unused segment", and "multiply called segment" warnings before you go on---they're serious.
Let me guess: you're calling printf() from an interrupt handler?
"Yes. I tried replacing the printf with a function that uses puts(). The project compiles OK but the program hangs on this function call." Calling the same function from an ISR and non-ISR code is a recipe for disaster. printf() may well call puts() internally hence the problem remains. I prefer not to call any functions from the ISR - I usually inline all code. "So, you suggest I get rid of the uncalled functions first?" Yes. A trick I sometimes use is to create a function containing dummy calls to all uncalled functions (if I plan to use these functions for real later in development). I then put a call to that function in some unreachable code in my main function: if(!SP) { MakeDummyCalls(); } is my favourite. "But how can an uncalled function cause an overflow?" If the compiler can't see a call to a function it assumes the function must be called via a pointer and excludes it from the overlay map. Local variables in that function then have to be given their own unique storage locations - as though they had been declared static. Stefan