modified to enable remote debugging of basflash.s19.

basflash.s19 does not work in this version (hang)!
This commit is contained in:
Markus Fröschle
2013-02-17 07:30:14 +00:00
parent 6b4da80a56
commit 624e690f62
4 changed files with 17 additions and 23 deletions

View File

@@ -107,7 +107,7 @@ $(RAM_EXEC): TARGET_ADDRESS=0x10000000
$(RAM_EXEC): LDCFILE=ram.lk $(RAM_EXEC): LDCFILE=ram.lk
$(RAM_EXEC): MAPFILE=ram.map $(RAM_EXEC): MAPFILE=ram.map
$(BASFLASH_EXEC): TARGET_ADDRESS=0x00100000 $(BASFLASH_EXEC): TARGET_ADDRESS=0x00040000
$(BASFLASH_EXEC): LDCFILE=basflash.lk $(BASFLASH_EXEC): LDCFILE=basflash.lk
$(BASFLASH_EXEC): MAPFILE=basflash.map $(BASFLASH_EXEC): MAPFILE=basflash.map

View File

@@ -16,19 +16,14 @@ SECTIONS
*(.rodata.*) *(.rodata.*)
} > flasher } > flasher
.bas : .bas :
/* The BaS is stored in the flash, just after the init part.
* Then it will be copied to its final location in the RAM.
* This data must be aligned for optimal copy loop speed.
*/
AT (ALIGN(ADDR(.text) + SIZEOF(.text), 4))
{ {
} }
#define BAS_LABEL_LMA(x) ((x)) #define BAS_LABEL_LMA(x) ((x))
_xprintf_before_copy = BAS_LABEL_LMA(_xprintf); _xprintf_before_copy = BAS_LABEL_LMA(_xprintf);
_display_progress_before_copy = BAS_LABEL_LMA(_display_progress); _display_progress_before_copy = BAS_LABEL_LMA(_display_progress);
_flush_and_invalidate_caches_before_copy = BAS_LABEL_LMA(_flush_and_invalidate_caches); /* _flush_and_invalidate_caches_before_copy = BAS_LABEL_LMA(_flush_and_invalidate_caches); */
/* /*
* Global memory map * Global memory map

View File

@@ -9,8 +9,6 @@
void startup(void) void startup(void)
{ {
void basflash(void); void basflash(void);
void init_serial(void);
init_serial();
basflash(); basflash();
} }

View File

@@ -43,12 +43,12 @@
#define SREC_TYPE(a) (a)[0] /* type of record */ #define SREC_TYPE(a) (a)[0] /* type of record */
#define SREC_COUNT(a) (a)[1] /* length of valid bytes to follow */ #define SREC_COUNT(a) (a)[1] /* length of valid bytes to follow */
#define SREC_ADDR16(a) (256 * (a)[2] + (a)[3]) /* 2 byte address field */ #define SREC_ADDR16(a) (256 * (a)[2] + (a)[3]) /* 2 byte address field */
#define SREC_ADDR32(a) (0x1000000 * a[2] + 0x10000 * \
a[3] + 0x100 * (a)[4] + (a)[5]) /* 4 byte address field */
#define SREC_ADDR24(a) (0x10000 * (a)[2] + 0x100 * \ #define SREC_ADDR24(a) (0x10000 * (a)[2] + 0x100 * \
(a)[3] + (a)[4]) /* 3 byte address field */ (a)[3] + (a)[4]) /* 3 byte address field */
#define SREC_ADDR32(a) (0x1000000 * a[2] + 0x10000 * \
a[3] + 0x100 * (a)[4] + (a)[5]) /* 4 byte address field */
#define SREC_DATA16(a) ((uint8_t *)&((a)[4])) /* address of first byte of data in a record */ #define SREC_DATA16(a) ((uint8_t *)&((a)[4])) /* address of first byte of data in a record */
#define SREC_DATA24(a) ((uint8_t *)&((a)[3])) /* address of first data bite in 24 bit record */ #define SREC_DATA24(a) ((uint8_t *)&((a)[5])) /* address of first data byte in 24 bit record */
#define SREC_DATA32(a) ((uint8_t *)&((a)[6])) /* adress of first byte of a record with 32 bit address field */ #define SREC_DATA32(a) ((uint8_t *)&((a)[6])) /* adress of first byte of a record with 32 bit address field */
#define SREC_DATA16_SIZE(a) (SREC_COUNT((a)) - 3) /* length of the data[] array without the checksum field */ #define SREC_DATA16_SIZE(a) (SREC_COUNT((a)) - 3) /* length of the data[] array without the checksum field */
#define SREC_DATA24_SIZE(a) (SREC_COUNT((a)) - 4) /* length of the data[] array without the checksum field */ #define SREC_DATA24_SIZE(a) (SREC_COUNT((a)) - 4) /* length of the data[] array without the checksum field */
@@ -147,22 +147,22 @@ void print_record(uint8_t *arr)
/* /*
* convert an S-record line into its corresponding byte vector (ASCII->binary) * convert an S-record line into its corresponding byte vector (ASCII->binary)
*/ */
static void line_to_vector(uint8_t *line, uint8_t *vector) static void line_to_vector(uint8_t *buff, uint8_t *vector)
{ {
int i; int i;
int length; int length;
uint8_t *vp = vector; uint8_t *vp = vector;
length = hex_to_byte(line + 2); length = hex_to_byte(buff + 2);
line++; buff++;
*vp++ = nibble_to_byte(*line); /* record type. Only one single nibble */ *vp++ = nibble_to_byte(*buff); /* record type. Only one single nibble */
line++; buff++;
for (i = 0; i <= length; i++) for (i = 0; i <= length; i++)
{ {
*vp++ = hex_to_byte(line); *vp++ = hex_to_byte(buff);
line += 2; buff += 2;
} }
} }
@@ -203,7 +203,7 @@ err_t read_srecords(char *filename, void **start_address, uint32_t *actual_lengt
while (ret == OK && (uint8_t *) f_gets((char *) line, sizeof(line), &file) != NULL) while (ret == OK && (uint8_t *) f_gets((char *) line, sizeof(line), &file) != NULL)
{ {
lineno++; lineno++;
uint8_t vector[64]; uint8_t vector[80];
line_to_vector(line, vector); /* vector now contains the decoded contents of line, from line[1] on */ line_to_vector(line, vector); /* vector now contains the decoded contents of line, from line[1] on */
@@ -292,6 +292,7 @@ err_t read_srecords(char *filename, void **start_address, uint32_t *actual_lengt
else else
{ {
xprintf("could not open file %s\r\n", filename); xprintf("could not open file %s\r\n", filename);
ret = FILE_OPEN;
} }
return ret; return ret;
} }