From: Matt C. <ma...@wa...> - 2003-12-17 17:06:36
|
Dear All, I have been developing a set of functions to call the silicon software routines on the DS80C400. I have compiled all my code as using a flat 24 bit address space, re-entrant functions (as I want to use the task scheduler) and a 10-bit stack. I have had good success, but have since found the following problems: 1. When using the task scheduler, the original code, using the in-built task swap code, would cause the embedded code to eventually fail. After some investigation I found the reason to be as follows: SDCC uses a an integer called 'bpx' as a frame pointer, and sometimes uses the AP SFR for a general purpose register. Neither of these two registers gets stored by the task swap code. I added some code into the task_switch_in and task_switch_out hooks to store/restore these two values, and hey presto! the system now works! 2. Every time I call the rom_init routine, the processor halts. However, if I call all the individual routines consecutively, then all goes well? Any ideas? Best regards Matt Cunningham ----- Original Message ----- From: <sdc...@li...> To: <sdc...@li...> Sent: Wednesday, December 17, 2003 4:11 AM Subject: Sdcc-user digest, Vol 1 #1080 - 3 msgs > Send Sdcc-user mailing list submissions to > sdc...@li... > > To subscribe or unsubscribe via the World Wide Web, visit > https://lists.sourceforge.net/lists/listinfo/sdcc-user > or, via email, send a message with subject or body 'help' to > sdc...@li... > > You can reach the person managing the list at > sdc...@li... > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Sdcc-user digest..." > > > Today's Topics: > > 1. need help for rom functions of ds400 (dev50) > 2. Re: need help for rom functions of ds400 (Klaus Flittner) > 3. question about using sdcc on the dallas 400 (wn...@mi...) > |
From: Klaus F. <kla...@gm...> - 2003-12-18 18:05:32
|
Hello, > > 1. When using the task scheduler, the original code, using the in-built task > swap code, would cause the embedded code to eventually fail. After some > investigation I found the reason to be as follows: > The default task swap code saves the following locations: data segment: 0x00 - 0x67, excluding 0x20 (0x27 is saved across task switches but used by the rom) SFRs: acc, b, psw, dpl, dph, dpx, dps, dpl1, dph1, dpx1, ie > SDCC uses a an integer called 'bpx' as a frame pointer, and sometimes uses > the AP SFR for a general purpose register. Neither of these two registers > gets stored by the task swap code. I added some code into the > task_switch_in and task_switch_out hooks to store/restore these two values, > and hey presto! the system now works! > since _bpx is inside the data segment it will be saved. the only problem could be, that _bpx got assigned at location 0x20 and was therefore not saved. If never seen any use of AP, but if it's used then the modification would be needed. > 2. Every time I call the rom_init routine, the processor halts. However, if > I call all the individual routines consecutively, then all goes well? Any > ideas? > I had the same problems at first. The problem was that no 1-Wire device was attached to the bus. HTH Klaus |