On 10. 01. 2013 18:09, Raphael Neider wrote: > Hi, > >> sfr16 keyword exist for pic16. > I> t does? Well, that would be news to me ... Does it work?!?
Yes, and works fine. As pic14 with patch from my previous post. ... > I agree that this feature would be nice. However, this needs support > in the code generator and (equally important) in the linker (gputils' > gplink): Currently gputils do not like two symbols (TMR1 and TMR1L) > occupying the same memory location (0x000F). > Unless someone volunteers to implement both sides (or multiple > volunteers step forward, together covering both sides ...), I do not > see this being implemented any time soon. > It is not sufficient to just "allow" the keyword and hope that > everything else just magically falls into place. > > Sorry to disappoint you. > No problem, for me it work well with only allow the keyword. Just want to share. See: ----------------------------file flash.c ----------------------------- #include <stdint.h> #define Nop() __asm NOP __endasm extern __at(0x018E) __sfr16 PMADR; extern __at(0x0190) __sfr16 PMDAT; typedef struct { unsigned RD : 1; unsigned WR : 1; unsigned WREN : 1; unsigned : 1; unsigned : 1; unsigned : 1; unsigned : 1; unsigned : 1; } __PMCON1bits_t; extern __at(0x018C) volatile __PMCON1bits_t PMCON1bits; uint16_t read_flash(uint16_t addr) { PMADR = addr; PMCON1bits.RD = 1; Nop(); Nop(); return PMDAT; } -------------------------------------------------------------------------------------- and result compiled from patched last SVN version: (no errors or warnings) xxx> sdcc --use-non-free --opt-code-size -mpic14 -pp12f752 -c flash.c -o flash.o ---------------------------flash.asm --------------------------------------------------------------------- ... code_flash code ;*** ; pBlock Stats: dbName = C ;*** ;entry: _read_flash ;Function start ; 2 exit points ;has an exit ;1 compiler assigned register : ; STK00 ;; Starting pCode block _read_flash ;Function start ; 2 exit points ; .line 21; "flash.c" uint16_t read_flash(uint16_t addr) BANKSEL _PMADR MOVWF (_PMADR + 1) MOVF STK00,W MOVWF _PMADR ; .line 25; "flash.c" PMCON1bits.RD = 1; BSF _PMCON1bits,0 NOP NOP ; .line 28; "flash.c" return PMDAT; BANKSEL _PMDAT MOVF _PMDAT,W MOVWF STK00 MOVF (_PMDAT + 1),W RETURN ; exit point of _read_flash ... -------------- Albert ------------------------------------------------------------------------------ Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft MVPs and experts. ON SALE this month only -- learn more at: http://p.sf.net/sfu/learnmore_122712 _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user