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.
Hi, Having wondered why the linker couldn't locate a code segment which I'd specified as part of the BL51 command line, I took a look at listing file to discover that the compiler had (somewhat arbitrarily) appended an underscore to some of the function names, hence the link error. Is there a means of inhibiting (or predicting)this annoying compiler characteristic? Thanks!
Well, the first port of call for all such questions is always the Compiler manual! ;-) You didn't say which toolset - I assume we're talking C51? When you say "append" I assume you mean "prefix?" The compiler adds various prefixes depending on whether & how parameters are passed. See the "Segment Naming Conventions" section in the manual The error probably means that you've mismatched your function prototypes & definitions. What exactly is the error you get? What does it tell you if you look up the error in the help?
A function name has an underscore prepended if the function has any parameters. No parameters, no underscore. Goodness knows why...
A function name has an underscore prepended if the function has any parameters. No parameters, no underscore. Goodness knows why... This is incorrect. In the compiler manual, there is a section named "Segment Naming Conventions". In that section, is a sub-section named, "Program Objects". Under "Program Objects", there is a table that discusses the naming conventions for functions. A segment with an _ prefix indicates that arguments for that function are passed in registers. If you do not want your arguments to be passed in registers, use the NOREGPARMS directive. Jon