kopia lustrzana https://github.com/stlink-org/stlink
FIX: "unaligned addr or size" in attempt of write the program in the RAM (#323)
rodzic
e616416b77
commit
6d3f105d2a
|
@ -953,6 +953,7 @@ int stlink_fwrite_sram
|
||||||
|
|
||||||
int error = -1;
|
int error = -1;
|
||||||
size_t off;
|
size_t off;
|
||||||
|
size_t len;
|
||||||
mapped_file_t mf = MAPPED_FILE_INITIALIZER;
|
mapped_file_t mf = MAPPED_FILE_INITIALIZER;
|
||||||
|
|
||||||
|
|
||||||
|
@ -971,16 +972,23 @@ int stlink_fwrite_sram
|
||||||
} else if ((addr + mf.len) > (sl->sram_base + sl->sram_size)) {
|
} else if ((addr + mf.len) > (sl->sram_base + sl->sram_size)) {
|
||||||
fprintf(stderr, "addr too high\n");
|
fprintf(stderr, "addr too high\n");
|
||||||
goto on_error;
|
goto on_error;
|
||||||
} else if ((addr & 3) || (mf.len & 3)) {
|
} else if (addr & 3) {
|
||||||
/* todo */
|
/* todo */
|
||||||
fprintf(stderr, "unaligned addr or size\n");
|
fprintf(stderr, "unaligned addr\n");
|
||||||
goto on_error;
|
goto on_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
len = mf.len;
|
||||||
|
|
||||||
|
if(len & 3) {
|
||||||
|
len -= len & 3;
|
||||||
|
}
|
||||||
|
|
||||||
/* do the copy by 1k blocks */
|
/* do the copy by 1k blocks */
|
||||||
for (off = 0; off < mf.len; off += 1024) {
|
for (off = 0; off < len; off += 1024) {
|
||||||
size_t size = 1024;
|
size_t size = 1024;
|
||||||
if ((off + size) > mf.len)
|
if ((off + size) > len)
|
||||||
size = mf.len - off;
|
size = len - off;
|
||||||
|
|
||||||
memcpy(sl->q_buf, mf.base + off, size);
|
memcpy(sl->q_buf, mf.base + off, size);
|
||||||
|
|
||||||
|
@ -991,6 +999,11 @@ int stlink_fwrite_sram
|
||||||
stlink_write_mem32(sl, addr + off, size);
|
stlink_write_mem32(sl, addr + off, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(mf.len > len) {
|
||||||
|
memcpy(sl->q_buf, mf.base + len, mf.len - len);
|
||||||
|
stlink_write_mem8(sl, addr + len, mf.len - len);
|
||||||
|
}
|
||||||
|
|
||||||
/* check the file ha been written */
|
/* check the file ha been written */
|
||||||
if (check_file(sl, &mf, addr) == -1) {
|
if (check_file(sl, &mf, addr) == -1) {
|
||||||
fprintf(stderr, "check_file() == -1\n");
|
fprintf(stderr, "check_file() == -1\n");
|
||||||
|
|
Ładowanie…
Reference in New Issue