Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
Jan Waclawek
03/06/10 14:36
Modified:
  03/06/10 14:47

Read: 252 times
Bratislava
Slovakia


 
#173907 - linking
Responding to: Erik Malund's previous message
Erik Malund said:
... the abscense of a separate linker

SDCC is quite "normal" in this regard, i.e. it follows the preprocessor-compiler-assembler-linker model.

Assuming you have a recent version installed (not 2.9.0), for '51[*], these are sdcpp-sdcc[**]-sdas8051-sdld, respectively; all located in the bin subdirectory of the installation directory. You can see the exact invocation of preprocessor, assembler and linker, if you add "-V" switch to the invocation of sdcc (note that switches are case sensitive).

Erik said:
[...] the only means of precompiled file inclusion is from a libray.

No. You might perhaps want to read chapter 3.1.3 Projects with Multiple Source Files of the manual.

Erik said:
[...]ISRs need be prototyped in main() [...]

The manual puts it down more precisely:
sdccman.pdf in chapter 3.9.1 said:
If you have multiple source files in your project, interrupt service routines can be present in any of them, but a prototype of the isr MUST be present or included in the file that contains the function main.


I think, Maarten Brock once has explained quite concisely the reason, why is it so, but I now can't find it[***], so I try myself (hope I don't get it wrong): when file containing main() is compiled, the interrupt vector table is created (as that contains also the reset vector). So, this file needs to "know", which ISRs are present in the program and under what name, to be able to create that table.

I agree this might be one of the gotchas for the unaware "migrant".

Jan


[*] with the standard installation, you have installed support for *all* targets, i.e. not only '51, but also the extended Dallas '51-s (390 and 400), the Motorola/Freescale HC08, Zilog Z80 (including a gameboy-specific-derivative) and two lines of PICs (but those require some additional software to be installed).

[**] this can be seen as an oddity perhaps. Traditionally, the program called by user to compile - cc - calls all the "components", including the compiler itself (called usually cc1). Here, the compiler itself, sdcc, is invoked by the user; while it calls the preprocessor-assembler-linker, it performs the compilation itself. But this is only a minor, completely unimportant, detail.

[edit][***] found it http://www.8052.com/forumchat/read/166881


List of 39 messages in thread
TopicAuthorDate
SDCC download      Erik Malund      03/05/10 11:53      
   Here you go...      Robert Revens      03/05/10 12:13      
   newest      Jan Waclawek      03/05/10 12:30      
      Has any effort gone into documentation?        Richard Erlacher      03/05/10 18:20      
         documentation      Jan Waclawek      03/06/10 03:16      
            Just to add...      Robert Revens      03/06/10 04:02      
               more howto-s      Jan Waclawek      03/06/10 05:13      
                  the first 'oddity' is ...      Erik Malund      03/06/10 06:46      
                     I think you dreamt that one eric      Jez Smith      03/06/10 07:27      
                        No - it's a well-known Gotcha! in SDCC!      Andy Neil      03/06/10 11:46      
                           Reference: ISRs (or prototypes) must be in same file as main      Andy Neil      03/07/10 01:04      
                     linking      Jan Waclawek      03/06/10 14:36      
                        I see it not correct      Erik Malund      03/06/10 14:51      
                           I don't understand      Jan Waclawek      03/06/10 15:04      
                              what is it you do not understand?      Erik Malund      03/07/10 07:11      
                                 Does it not recognise...      Andy Neil      03/07/10 07:25      
                                 Surely not...      Robert Revens      03/07/10 08:42      
                                    "magic"      Jan Waclawek      03/07/10 10:44      
                                       That's not the fault of 'C'!!      Andy Neil      03/07/10 13:14      
                                       highly unusal, but      Erik Malund      03/07/10 18:42      
                                       Try java etc      Oliver Sedlacek      03/08/10 07:54      
                                 I now see why is this confusing      Jan Waclawek      03/07/10 10:27      
               emulation?      Andy Peters      03/11/10 15:53      
                  Source-level debug      Robert Revens      03/11/10 16:15      
                     symbol information      Maarten Brock      03/12/10 04:05      
                        re: symbol information      Andy Peters      03/15/10 18:40      
                           hex-file download?      Maarten Brock      03/16/10 05:46      
                              hex vs omf      Andy Peters      03/16/10 12:08      
                     Keil proprietary stuff?      Andy Neil      03/12/10 05:01      
                        extended omf51      Juergen Christoph      03/12/10 07:11      
                           omf51 vs cdb      Jan Waclawek      03/15/10 16:48      
                        proprietary file format?      James Hinnant      03/15/10 01:22      
                           I don't see why not      Andy Neil      03/15/10 01:33      
                              So, what do *you* mean by, "proprietary" ?      Andy Neil      03/16/10 02:15      
                                 AutoCAD      Per Westermark      03/16/10 03:15      
                           Yes      Per Westermark      03/15/10 01:37      
                              patentable vs proprietary      James Hinnant      03/15/10 23:39      
                                 Proprietary is a questin of ownership, not protection      Per Westermark      03/16/10 01:06      
   bouncing email      Maarten Brock      03/07/10 14:38      

Back to Subject List