From: 谢继雷 <xj...@99...> - 2010-07-17 09:52:31
|
For example, I want to link some functions in a specific module in a conjunctive segment CODE1, which will address from 0x1000, and therefore calls within CODE1 will be ACALL and from outside will be LCALL (for MCS-51). I've tried: #pragma save #pragma codeseg CODE1 void module_functions() { ... } #pragma restore Which has no effect. |
From: Maarten B. <sou...@ds...> - 2010-07-17 10:26:45
|
Hi, #pragma codeseg cannot be saved and restored. It is global for the whole source file. So is #pragma constseg. SDCC does not try to replace LCALL with ACALL as it does not know where the code will end up after linking. There is a command line option to do this but it will replace *all* jumps and calls. Maarten > For example, I want to link some functions in a specific module in a > conjunctive segment CODE1, which will address from 0x1000, > and therefore calls within CODE1 will be ACALL and from outside will be > LCALL (for MCS-51). > > I've tried: > > #pragma save > #pragma codeseg CODE1 > > void module_functions() { > ... > } > > #pragma restore > > Which has no effect. > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by Sprint > What will you do first with EVO, the first 4G phone? > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > |
From: 谢继雷 <xj...@99...> - 2010-07-17 10:36:17
|
On 2010-7-17 18:01, Maarten Brock wrote: > Hi, > > #pragma codeseg cannot be saved and restored. It is > global for the whole source file. So is #pragma > constseg. > > SDCC does not try to replace LCALL with ACALL as it does > not know where the code will end up after linking. There > is a command line option to do this but it will replace > *all* jumps and calls. > Yes, it's not SDCC generated AJMP, but I'm using AJMP explicitly in some special size-aware functions. Now I want to move these AJMP functions in a separate segment which starts a 0x800 page. I've posted another message in this list. Thanks, Lenik |
From: Maarten B. <sou...@ds...> - 2010-07-17 10:49:15
|
Lenik, > Now I want to move these AJMP functions in a separate segment which > starts a 0x800 page. Then place that segment at that address. See the chapter about bankswitching in the manual, esp. -Wl-b. Maarten |
From: 谢继雷 <xj...@99...> - 2010-07-17 12:27:47
|
On 2010-7-17 18:49, Maarten Brock wrote: > Lenik, > > >> Now I want to move these AJMP functions in a separate segment which >> starts a 0x800 page. >> > > Then place that segment at that address. See the chapter > about bankswitching in the manual, esp. -Wl-b. > > Maarten > Thanks, I have already tried with -Wl-b, which still errors: ?ASlink-Warning-No definition of area PAGE1 According to what you said before: > #pragma codeseg cannot be saved and restored. It is > global for the whole source file. So is #pragma > constseg. I removed the #pragma save/restore from the specific source file, now the result is correct. Lenik |