Skip to content

Commit 06ee62a

Browse files
committed
Fixed compile problems with avr gcc 4.6.2 (crosspack CrossPack-AVR-20121207.dmg)
1 parent 7625c33 commit 06ee62a

File tree

3 files changed

+466
-62
lines changed

3 files changed

+466
-62
lines changed

hardware/arduino/bootloaders/stk500v2/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ CINCS =
124124
CFLAGS = -g$(DEBUG)
125125
CFLAGS += $(CDEFS) $(CINCS)
126126
CFLAGS += -O$(OPT)
127-
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -mno-tablejump
127+
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-jump-tables
128128
CFLAGS += -Wall -Wstrict-prototypes
129129
CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
130130
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))

hardware/arduino/bootloaders/stk500v2/stk500boot.c

+57-61
Original file line numberDiff line numberDiff line change
@@ -1240,82 +1240,78 @@ unsigned long gEepromIndex;
12401240
void PrintDecInt(int theNumber, int digitCnt);
12411241

12421242
#ifdef _AVR_CPU_NAME_
1243-
prog_char gTextMsg_CPU_Name[] PROGMEM = _AVR_CPU_NAME_;
1243+
const char gTextMsg_CPU_Name[] PROGMEM = _AVR_CPU_NAME_;
12441244
#else
1245-
prog_char gTextMsg_CPU_Name[] PROGMEM = "UNKNOWN";
1245+
const char gTextMsg_CPU_Name[] PROGMEM = "UNKNOWN";
12461246
#endif
12471247

1248-
prog_char gTextMsg_Explorer[] PROGMEM = "Arduino explorer stk500V2 by MLS";
1249-
prog_char gTextMsg_Prompt[] PROGMEM = "Bootloader>";
1250-
prog_char gTextMsg_HUH[] PROGMEM = "Huh?";
1251-
prog_char gTextMsg_COMPILED_ON[] PROGMEM = "Compiled on = ";
1252-
prog_char gTextMsg_CPU_Type[] PROGMEM = "CPU Type = ";
1253-
prog_char gTextMsg_AVR_ARCH[] PROGMEM = "__AVR_ARCH__= ";
1254-
prog_char gTextMsg_AVR_LIBC[] PROGMEM = "AVR LibC Ver= ";
1255-
prog_char gTextMsg_GCC_VERSION[] PROGMEM = "GCC Version = ";
1256-
prog_char gTextMsg_CPU_SIGNATURE[] PROGMEM = "CPU ID = ";
1257-
prog_char gTextMsg_FUSE_BYTE_LOW[] PROGMEM = "Low fuse = ";
1258-
prog_char gTextMsg_FUSE_BYTE_HIGH[] PROGMEM = "High fuse = ";
1259-
prog_char gTextMsg_FUSE_BYTE_EXT[] PROGMEM = "Ext fuse = ";
1260-
prog_char gTextMsg_FUSE_BYTE_LOCK[] PROGMEM = "Lock fuse = ";
1261-
prog_char gTextMsg_GCC_DATE_STR[] PROGMEM = __DATE__;
1262-
prog_char gTextMsg_AVR_LIBC_VER_STR[] PROGMEM = __AVR_LIBC_VERSION_STRING__;
1263-
prog_char gTextMsg_GCC_VERSION_STR[] PROGMEM = __VERSION__;
1264-
prog_char gTextMsg_VECTOR_HEADER[] PROGMEM = "V# ADDR op code instruction addr Interrupt";
1265-
prog_char gTextMsg_noVector[] PROGMEM = "no vector";
1266-
prog_char gTextMsg_rjmp[] PROGMEM = "rjmp ";
1267-
prog_char gTextMsg_jmp[] PROGMEM = "jmp ";
1268-
prog_char gTextMsg_WHAT_PORT[] PROGMEM = "What port:";
1269-
prog_char gTextMsg_PortNotSupported[] PROGMEM = "Port not supported";
1270-
prog_char gTextMsg_MustBeLetter[] PROGMEM = "Must be a letter";
1271-
prog_char gTextMsg_SPACE[] PROGMEM = " ";
1272-
prog_char gTextMsg_WriteToEEprom[] PROGMEM = "Writting EE";
1273-
prog_char gTextMsg_ReadingEEprom[] PROGMEM = "Reading EE";
1274-
prog_char gTextMsg_EEPROMerrorCnt[] PROGMEM = "EE err cnt=";
1275-
prog_char gTextMsg_PORT[] PROGMEM = "PORT";
1248+
const char gTextMsg_Explorer[] PROGMEM = "Arduino explorer stk500V2 by MLS";
1249+
const char gTextMsg_Prompt[] PROGMEM = "Bootloader>";
1250+
const char gTextMsg_HUH[] PROGMEM = "Huh?";
1251+
const char gTextMsg_COMPILED_ON[] PROGMEM = "Compiled on = ";
1252+
const char gTextMsg_CPU_Type[] PROGMEM = "CPU Type = ";
1253+
const char gTextMsg_AVR_ARCH[] PROGMEM = "__AVR_ARCH__= ";
1254+
const char gTextMsg_AVR_LIBC[] PROGMEM = "AVR LibC Ver= ";
1255+
const char gTextMsg_GCC_VERSION[] PROGMEM = "GCC Version = ";
1256+
const char gTextMsg_CPU_SIGNATURE[] PROGMEM = "CPU ID = ";
1257+
const char gTextMsg_FUSE_BYTE_LOW[] PROGMEM = "Low fuse = ";
1258+
const char gTextMsg_FUSE_BYTE_HIGH[] PROGMEM = "High fuse = ";
1259+
const char gTextMsg_FUSE_BYTE_EXT[] PROGMEM = "Ext fuse = ";
1260+
const char gTextMsg_FUSE_BYTE_LOCK[] PROGMEM = "Lock fuse = ";
1261+
const char gTextMsg_GCC_DATE_STR[] PROGMEM = __DATE__;
1262+
const char gTextMsg_AVR_LIBC_VER_STR[] PROGMEM = __AVR_LIBC_VERSION_STRING__;
1263+
const char gTextMsg_GCC_VERSION_STR[] PROGMEM = __VERSION__;
1264+
const char gTextMsg_VECTOR_HEADER[] PROGMEM = "V# ADDR op code instruction addr Interrupt";
1265+
const char gTextMsg_noVector[] PROGMEM = "no vector";
1266+
const char gTextMsg_rjmp[] PROGMEM = "rjmp ";
1267+
const char gTextMsg_jmp[] PROGMEM = "jmp ";
1268+
const char gTextMsg_WHAT_PORT[] PROGMEM = "What port:";
1269+
const char gTextMsg_PortNotSupported[] PROGMEM = "Port not supported";
1270+
const char gTextMsg_MustBeLetter[] PROGMEM = "Must be a letter";
1271+
const char gTextMsg_SPACE[] PROGMEM = " ";
1272+
const char gTextMsg_WriteToEEprom[] PROGMEM = "Writting EE";
1273+
const char gTextMsg_ReadingEEprom[] PROGMEM = "Reading EE";
1274+
const char gTextMsg_EEPROMerrorCnt[] PROGMEM = "EE err cnt=";
1275+
const char gTextMsg_PORT[] PROGMEM = "PORT";
12761276

12771277

12781278
//************************************************************************
12791279
//* Help messages
1280-
prog_char gTextMsg_HELP_MSG_0[] PROGMEM = "0=Zero addr";
1281-
prog_char gTextMsg_HELP_MSG_QM[] PROGMEM = "?=CPU stats";
1282-
prog_char gTextMsg_HELP_MSG_AT[] PROGMEM = "@=EEPROM test";
1283-
prog_char gTextMsg_HELP_MSG_B[] PROGMEM = "B=Blink LED";
1284-
prog_char gTextMsg_HELP_MSG_E[] PROGMEM = "E=Dump EEPROM";
1285-
prog_char gTextMsg_HELP_MSG_F[] PROGMEM = "F=Dump FLASH";
1286-
prog_char gTextMsg_HELP_MSG_H[] PROGMEM = "H=Help";
1287-
prog_char gTextMsg_HELP_MSG_L[] PROGMEM = "L=List I/O Ports";
1288-
// prog_char gTextMsg_HELP_MSG_Q[] PROGMEM = "Q=Quit & jump to user pgm";
1289-
prog_char gTextMsg_HELP_MSG_Q[] PROGMEM = "Q=Quit";
1290-
prog_char gTextMsg_HELP_MSG_R[] PROGMEM = "R=Dump RAM";
1291-
prog_char gTextMsg_HELP_MSG_V[] PROGMEM = "V=show interrupt Vectors";
1292-
prog_char gTextMsg_HELP_MSG_Y[] PROGMEM = "Y=Port blink";
1293-
1294-
prog_char gTextMsg_END[] PROGMEM = "*";
1280+
const char gTextMsg_HELP_MSG_0[] PROGMEM = "0=Zero addr";
1281+
const char gTextMsg_HELP_MSG_QM[] PROGMEM = "?=CPU stats";
1282+
const char gTextMsg_HELP_MSG_AT[] PROGMEM = "@=EEPROM test";
1283+
const char gTextMsg_HELP_MSG_B[] PROGMEM = "B=Blink LED";
1284+
const char gTextMsg_HELP_MSG_E[] PROGMEM = "E=Dump EEPROM";
1285+
const char gTextMsg_HELP_MSG_F[] PROGMEM = "F=Dump FLASH";
1286+
const char gTextMsg_HELP_MSG_H[] PROGMEM = "H=Help";
1287+
const char gTextMsg_HELP_MSG_L[] PROGMEM = "L=List I/O Ports";
1288+
// const char gTextMsg_HELP_MSG_Q[] PROGMEM = "Q=Quit & jump to user pgm";
1289+
const char gTextMsg_HELP_MSG_Q[] PROGMEM = "Q=Quit";
1290+
const char gTextMsg_HELP_MSG_R[] PROGMEM = "R=Dump RAM";
1291+
const char gTextMsg_HELP_MSG_V[] PROGMEM = "V=show interrupt Vectors";
1292+
const char gTextMsg_HELP_MSG_Y[] PROGMEM = "Y=Port blink";
1293+
1294+
const char gTextMsg_END[] PROGMEM = "*";
12951295

12961296

12971297
//************************************************************************
1298-
void PrintFromPROGMEM(void *dataPtr, unsigned char offset)
1298+
void PrintFromPROGMEM(const void *dataPtr, unsigned char offset)
12991299
{
1300-
uint8_t ii;
13011300
char theChar;
13021301

1303-
ii = offset;
1304-
theChar = 1;
1302+
dataPtr += offset;
13051303

1306-
while (theChar != 0)
1307-
{
1304+
do {
13081305
#if (FLASHEND > 0x10000)
1309-
theChar = pgm_read_byte_far((uint32_t)dataPtr + ii);
1306+
theChar = pgm_read_byte_far((uint16_t)dataPtr++);
13101307
#else
1311-
theChar = pgm_read_byte_near((uint32_t)dataPtr + ii);
1308+
theChar = pgm_read_byte_near((uint16_t)dataPtr++);
13121309
#endif
13131310
if (theChar != 0)
13141311
{
13151312
sendchar(theChar);
13161313
}
1317-
ii++;
1318-
}
1314+
} while (theChar != 0);
13191315
}
13201316

13211317
//************************************************************************
@@ -1327,7 +1323,7 @@ void PrintNewLine(void)
13271323

13281324

13291325
//************************************************************************
1330-
void PrintFromPROGMEMln(void *dataPtr, unsigned char offset)
1326+
void PrintFromPROGMEMln(const void *dataPtr, unsigned char offset)
13311327
{
13321328
PrintFromPROGMEM(dataPtr, offset);
13331329

@@ -1523,7 +1519,7 @@ unsigned char *ramPtr;
15231519
break;
15241520

15251521
case kDUMP_EEPROM:
1526-
theValue = eeprom_read_byte((void *)myAddressPointer);
1522+
theValue = eeprom_read_byte((uint8_t *)(uint16_t)myAddressPointer);
15271523
break;
15281524

15291525
case kDUMP_RAM:
@@ -1567,9 +1563,9 @@ int errorCount;
15671563
PrintNewLine();
15681564
ii = 0;
15691565
#if (FLASHEND > 0x10000)
1570-
while (((theChar = pgm_read_byte_far(gTextMsg_Explorer + ii)) != '*') && (ii < 512))
1566+
while (((theChar = pgm_read_byte_far(((uint16_t)gTextMsg_Explorer) + ii)) != '*') && (ii < 512))
15711567
#else
1572-
while (((theChar = pgm_read_byte_near(gTextMsg_Explorer + ii)) != '*') && (ii < 512))
1568+
while (((theChar = pgm_read_byte_near(((uint16_t)gTextMsg_Explorer) + ii)) != '*') && (ii < 512))
15731569
#endif
15741570
{
15751571
eeprom_write_byte((uint8_t *)ii, theChar);
@@ -1592,9 +1588,9 @@ int errorCount;
15921588
errorCount = 0;
15931589
ii = 0;
15941590
#if (FLASHEND > 0x10000)
1595-
while (((theChar = pgm_read_byte_far(gTextMsg_Explorer + ii)) != '*') && (ii < 512))
1591+
while (((theChar = pgm_read_byte_far((uint16_t)gTextMsg_Explorer + ii)) != '*') && (ii < 512))
15961592
#else
1597-
while (((theChar = pgm_read_byte_near(gTextMsg_Explorer + ii)) != '*') && (ii < 512))
1593+
while (((theChar = pgm_read_byte_near((uint16_t)gTextMsg_Explorer + ii)) != '*') && (ii < 512))
15981594
#endif
15991595
{
16001596
theEEPROMchar = eeprom_read_byte((uint8_t *)ii);

0 commit comments

Comments
 (0)