From: SourceForge.net <no...@so...> - 2007-05-11 09:39:33
|
Feature Requests item #1716427, was opened at 2007-05-10 13:32 Message generated for change (Comment added) made by patryks You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1716427&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Priority: 5 Private: No Submitted By: Patryk (patryks) Assigned to: Nobody/Anonymous (nobody) Summary: Put some declarations in one of SDCC header Initial Comment: I found two such declarations usable, but there may be more I don't know of: unsigned char _sdcc_external_startup(void); extern __idata TByte _start__stack[]; First only as a sanity check for definition (during compilation of a library or an user module). Second allows it's use in C (to fill stack with some value or for runtime sanity check). BTW: is there a way to access some assembler/linker symbols in C other than inline assembler? For example s_SSEG (__start__stack equivalent?), l_SSEG, s_CSEG, l_CSEG etc. There are many uses for them. About using that symbols in inline assembler: MOV (s_SSEG+0x38), #0xA5 ; works MOV (s_SSEG+l_SSEG), #0xA5 ; but this not (causes ?ASxxxx-Error-<r> relocation error) (I'm aware that I should use indirect addressing here, but this way example is simple) Is below the only way to do this: MOV A, #s_SSEG ADD A, #l_SSEG MOV R0, A MOV @R0, #0xA5 ---------------------------------------------------------------------- >Comment By: Patryk (patryks) Date: 2007-05-11 11:39 Message: Logged In: YES user_id=1788180 Originator: YES I was about to protest (not all platforms support bit instructions), but probably all possible platforms got carry bit and many means to handle it :-) So __bit should be OK, at least for return boolean value from function. But isn't __bit type available only for mcs51? crtstart.asm is platform specific, and BOOL is defined as __bit for mcs51 (so no mess in crtstart.asm), so maybe still BOOL is better, leaving _sdcc_external_startup() declaration same for all platforms? ---------------------------------------------------------------------- Comment By: Frieder Ferlemann (frief) Date: 2007-05-10 16:35 Message: Logged In: YES user_id=589052 Originator: NO BOOL looks more clean but I believe it is not. Using BOOL would pretend a flexibility that is not there. The assembler code in crtstart.asm would have to either check for the carry bit or check DPL. It would do so without looking at (or wanting to look at) whether BOOL in stdbool.h might be __bit or char. So I'd prefer to say "__bit" if one day a switch to a bit returning function (saving ~4 byte for each program compiled for mcs51) is done. ---------------------------------------------------------------------- Comment By: Patryk (patryks) Date: 2007-05-10 14:13 Message: Logged In: YES user_id=1788180 Originator: YES Wouldn't BOOL _sdcc_external_startup(void); be better? Probably for all ports, not only mcs51. ---------------------------------------------------------------------- Comment By: Frieder Ferlemann (frief) Date: 2007-05-10 13:54 Message: Logged In: YES user_id=589052 Originator: NO It might be attractive to change: unsigned char _sdcc_external_startup(void); for the mcs51 into: __bit _sdcc_external_startup(void); in later versions of SDCC. So, yes, the declaration might need attention. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1716427&group_id=599 |