Move evaluating 'is flash' from caller to callee avr_mem_hiaddr()
This commit is contained in:
parent
ed38456f83
commit
e18d436f88
27
src/avr.c
27
src/avr.c
|
@ -278,6 +278,7 @@ int avr_read_byte_default(PROGRAMMER * pgm, AVRPART * p, AVRMEM * mem,
|
||||||
* value. This is useful for determining where to stop when dealing
|
* value. This is useful for determining where to stop when dealing
|
||||||
* with "flash" memory, since writing 0xff to flash is typically a
|
* with "flash" memory, since writing 0xff to flash is typically a
|
||||||
* no-op. Always return an even number since flash is word addressed.
|
* no-op. Always return an even number since flash is word addressed.
|
||||||
|
* Only apply this optimisation on flash-type memory.
|
||||||
*/
|
*/
|
||||||
int avr_mem_hiaddr(AVRMEM * mem)
|
int avr_mem_hiaddr(AVRMEM * mem)
|
||||||
{
|
{
|
||||||
|
@ -293,6 +294,13 @@ int avr_mem_hiaddr(AVRMEM * mem)
|
||||||
if(disableffopt)
|
if(disableffopt)
|
||||||
return mem->size;
|
return mem->size;
|
||||||
|
|
||||||
|
/* if the memory is not a flash-type memory do not remove trailing 0xff */
|
||||||
|
if(strcasecmp(mem->desc, "flash") &&
|
||||||
|
strcasecmp(mem->desc, "application") &&
|
||||||
|
strcasecmp(mem->desc, "apptable") &&
|
||||||
|
strcasecmp(mem->desc, "boot"))
|
||||||
|
return mem->size;
|
||||||
|
|
||||||
/* return the highest non-0xff address regardless of how much
|
/* return the highest non-0xff address regardless of how much
|
||||||
memory was read */
|
memory was read */
|
||||||
for (i=mem->size-1; i>0; i--) {
|
for (i=mem->size-1; i>0; i--) {
|
||||||
|
@ -426,15 +434,8 @@ int avr_read(PROGRAMMER * pgm, AVRPART * p, char * memtype,
|
||||||
nread++;
|
nread++;
|
||||||
report_progress(nread, npages, NULL);
|
report_progress(nread, npages, NULL);
|
||||||
}
|
}
|
||||||
if (!failure) {
|
if (!failure)
|
||||||
if (strcasecmp(mem->desc, "flash") == 0 ||
|
return avr_mem_hiaddr(mem);
|
||||||
strcasecmp(mem->desc, "application") == 0 ||
|
|
||||||
strcasecmp(mem->desc, "apptable") == 0 ||
|
|
||||||
strcasecmp(mem->desc, "boot") == 0)
|
|
||||||
return avr_mem_hiaddr(mem);
|
|
||||||
else
|
|
||||||
return mem->size;
|
|
||||||
}
|
|
||||||
/* else: fall back to byte-at-a-time write, for historical reasons */
|
/* else: fall back to byte-at-a-time write, for historical reasons */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -464,13 +465,7 @@ int avr_read(PROGRAMMER * pgm, AVRPART * p, char * memtype,
|
||||||
report_progress(i, mem->size, NULL);
|
report_progress(i, mem->size, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcasecmp(mem->desc, "flash") == 0 ||
|
return avr_mem_hiaddr(mem);
|
||||||
strcasecmp(mem->desc, "application") == 0 ||
|
|
||||||
strcasecmp(mem->desc, "apptable") == 0 ||
|
|
||||||
strcasecmp(mem->desc, "boot") == 0)
|
|
||||||
return avr_mem_hiaddr(mem);
|
|
||||||
else
|
|
||||||
return i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
19
src/fileio.c
19
src/fileio.c
|
@ -1585,21 +1585,14 @@ int fileio(int op, char * filename, FILEFMT format,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rc > 0) {
|
/* on reading flash set the size to location of highest non-0xff byte */
|
||||||
if ((op == FIO_READ) && (strcasecmp(mem->desc, "flash") == 0 ||
|
if (rc > 0 && op == FIO_READ) {
|
||||||
strcasecmp(mem->desc, "application") == 0 ||
|
int hiaddr = avr_mem_hiaddr(mem);
|
||||||
strcasecmp(mem->desc, "apptable") == 0 ||
|
|
||||||
strcasecmp(mem->desc, "boot") == 0)) {
|
|
||||||
/*
|
|
||||||
* if we are reading flash, just mark the size as being the
|
|
||||||
* highest non-0xff byte
|
|
||||||
*/
|
|
||||||
int hiaddr = avr_mem_hiaddr(mem);
|
|
||||||
|
|
||||||
if(hiaddr < rc) /* if trailing-0xff not disabled */
|
if(hiaddr < rc) /* if trailing-0xff not disabled */
|
||||||
rc = hiaddr;
|
rc = hiaddr;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (format != FMT_IMM && !using_stdio) {
|
if (format != FMT_IMM && !using_stdio) {
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue