59 #if defined(__ICCAVR__)
60 #pragma location=INTERNAL_SRAM_START
61 __no_init uint8_t
classb_buffer[CLASSB_SEC_SIZE+CLASSB_OVERLAP_SIZE];
62 #elif defined(__GNUC__)
63 static uint8_t
classb_buffer[CLASSB_SEC_SIZE+CLASSB_OVERLAP_SIZE] __attribute__ ((section (
".classb_sram_buffer")));
64 #elif defined(__DOXYGEN__)
126 static uint8_t current_section = 0;
128 switch (current_section)
132 classb_marchX((uint8_t *)INTERNAL_SRAM_START, classb_buffer, CLASSB_SEC_SIZE + CLASSB_OVERLAP_SIZE);
137 classb_marchX((uint8_t *)INTERNAL_SRAM_START + CLASSB_SEC_SIZE, classb_buffer, CLASSB_SEC_SIZE);
142 classb_marchX((uint8_t *)INTERNAL_SRAM_START +
CLASSB_NSECS * CLASSB_SEC_SIZE - CLASSB_OVERLAP_SIZE, classb_buffer, CLASSB_SEC_REM + CLASSB_OVERLAP_SIZE);
146 classb_marchX((uint8_t *)INTERNAL_SRAM_START + current_section * CLASSB_SEC_SIZE - CLASSB_OVERLAP_SIZE, classb_buffer, CLASSB_SEC_SIZE + CLASSB_OVERLAP_SIZE);
152 if (current_section > CLASSB_NSEC_TOTAL-1)
180 void classb_marchX(
register volatile uint8_t * p_sram,
register volatile uint8_t * p_buffer,
register uint16_t size)
182 register uint16_t i = 0;
183 register uint8_t error = 0;
186 if (p_buffer != p_sram)
187 for (uint16_t i = 0; i < size; i++)
188 *(p_buffer+i) = *(p_sram+i);
192 for (i = 0; i < size; i++)
197 for (i = 0; i < size; i++)
199 if (*(p_sram+i) != 0x00)
207 for(i = size ; i>0; i--)
209 if (*(p_sram+i-1) != 0xFF)
212 *(p_sram+i-1) = 0x00;
217 for (i = 0; i < size; i++)
218 if (*(p_sram+i) != 0x00)
222 #ifdef CLASSB_SRAM_INTRAWORD_TEST
224 for (i = 0; i < size; i++) {
226 if (*(p_sram+i) != 0x55)
230 if (*(p_sram+i) != 0xAA)
234 if (*(p_sram+i) != 0x33)
238 if (*(p_sram+i) != 0xCC)
242 if (*(p_sram+i) != 0xF0)
245 if (*(p_sram+i) != 0x0F)
252 if (p_buffer != p_sram)
253 for (i = 0; i < size; i++)
254 *(p_sram+i) = *(p_buffer+i);