37 #warning For a PIC24F, the DATA_FLASH_PAGE is set to the second to last flash page instead of the last page,
38 #warning as the last flash page in the 24F family contains the configuration bits.
42 #if defined(__PIC24HJ64GP502__) || defined(__PIC24FJ64GA002__)
43 #define LAST_IMPLEMENTED_PMEM 0x00ABFF
44 #elif defined(__PIC24HJ32GP202__) || defined(__PIC24FJ32GA002__) || defined(__dsPIC33FJ32GP202__)
45 #define LAST_IMPLEMENTED_PMEM 0x0057FF
46 #elif defined(__dsPIC33FJ128GP802__)
47 #define LAST_IMPLEMENTED_PMEM 0x0157FF
48 #elif defined(__PIC24EP64GP202__) //PIC24E test
49 #define LAST_IMPLEMENTED_PMEM 0x00AFFF
51 #error "Define LAST_IMPLEMENTED_PMEM for your processor!
57 #if (defined(__PIC24F__) || defined(__PIC24E__)|| defined(__dsPIC33E__))
58 #define DATA_FLASH_PAGE (((LAST_IMPLEMENTED_PMEM/FLASH_PAGESIZE)*FLASH_PAGESIZE)-FLASH_PAGESIZE) //2nd to last page of flash
60 #if (defined(__PIC24H__)|| defined(__dsPIC33F__))
61 #define DATA_FLASH_PAGE ((LAST_IMPLEMENTED_PMEM/FLASH_PAGESIZE)*FLASH_PAGESIZE) //last page of flash
70 #define NUM_ROWS (((sizeof(REC))/FLASH_ROWBYTES) + 1)
71 #define FLASH_DATA_SIZE (NUM_ROWS*FLASH_ROWBYTES)
73 typedef union _UFDATA {
75 char fill[FLASH_DATA_SIZE];
80 void doCommit(UFDATA* p_ufdata) {
82 u_memaddr.u32 = DATA_FLASH_PAGE;
86 void doRead(UFDATA* p_ufdata) {
88 u_memaddr.u32 = DATA_FLASH_PAGE;
94 printf(
"1 Read 16-bit value from flash.\n");
95 printf(
"2 Write 16-bit value to flash. \n");
96 printf(
" Enter number (1-2): ");
109 printf(
"The 16-bit value read from memory is: %u (%x hex)\n",fdata.dat.u16_val,fdata.dat.u16_val);
112 printf(
"Enter 16-bit value+\\n (0 to 65535, decimal): ");
114 sscanf(data,
"%d", (
int *) &u16_val);
115 fdata.dat.u16_val = u16_val;