mirror of
https://git.code.sf.net/p/newrpl/sources
synced 2024-11-16 19:51:25 +01:00
Fixed jump table relocation problem. Firmware update works.
This commit is contained in:
parent
afdff9e7d9
commit
0fc424031b
4 changed files with 31 additions and 23 deletions
|
@ -339,7 +339,7 @@ BYTE __usb_rxtxbuffer[LONG_BUFFER_SIZE] __SCRATCH_MEMORY__; // LARG
|
|||
BINT __usb_rxoffset __SYSTEM_GLOBAL__; // STARTING OFFSET OF THE DATA IN THE RX BUFFER
|
||||
volatile BINT __usb_rxtxtop __SYSTEM_GLOBAL__; // NUMBER OF BYTES USED IN THE RX BUFFER
|
||||
volatile BINT __usb_rxtxbottom __SYSTEM_GLOBAL__; // NUMBER OF BYTES IN THE RX BUFFER ALREADY READ BY THE USER
|
||||
BINT __usb_rxtotalbytes __SYSTEM_GLOBAL__; // TOTAL BYTES ON THE FILE, 0 MEANS DON'T KNOW YET
|
||||
volatile BINT __usb_rxtotalbytes __SYSTEM_GLOBAL__; // TOTAL BYTES ON THE FILE, 0 MEANS DON'T KNOW YET
|
||||
|
||||
BINT __usb_txtotalbytes __SYSTEM_GLOBAL__; // TOTAL BYTES ON THE FILE, 0 MEANS DON'T KNOW YET
|
||||
BINT __usb_txseq __SYSTEM_GLOBAL__; // SEQUENTIAL NUMBER WITHIN A FRAGMENT OF DATA
|
||||
|
|
|
@ -308,7 +308,9 @@ void usb_receivecontrolpacket()
|
|||
// SIGNAL THE ERROR AND LEAVE THE REQUESTED OFFSET AT rxoffset
|
||||
__usb_drvstatus|=USB_STATUS_ERROR;
|
||||
__usb_rxoffset=ctl->p_offset;
|
||||
}
|
||||
} else {
|
||||
__usb_drvstatus&=~USB_STATUS_ERROR;
|
||||
}
|
||||
if(ctl->p_data[2]) {
|
||||
// SIGNAL THAT THE REMOTE ACKNOWLEDGED THE END OF FILE MARK
|
||||
__usb_drvstatus|=USB_STATUS_EOF;
|
||||
|
@ -477,8 +479,8 @@ int usb_txfileopen(int file_type)
|
|||
end=tmr_ticks();
|
||||
if(tmr_ticks2ms(start,end)>USB_TIMEOUT_MS) {
|
||||
//************************************
|
||||
fprintf(stderr,"fileopen previous data timeout\n");
|
||||
fflush(stderr);
|
||||
//fprintf(stderr,"fileopen previous data timeout\n");
|
||||
////fflush(stderr);
|
||||
//************************************
|
||||
return 0;
|
||||
}
|
||||
|
@ -503,8 +505,8 @@ int usb_txfileopen(int file_type)
|
|||
if(tmr_ticks2ms(start,end)>USB_TIMEOUT_MS)
|
||||
{
|
||||
//************************************
|
||||
fprintf(stderr,"fileopen general timeout\n");
|
||||
fflush(stderr);
|
||||
//fprintf(stderr,"fileopen general timeout\n");
|
||||
//fflush(stderr);
|
||||
//************************************
|
||||
__usb_fileid=0;
|
||||
return 0; // FAIL IF TIMEOUT
|
||||
|
@ -513,8 +515,8 @@ int usb_txfileopen(int file_type)
|
|||
usb_sendcontrolpacket(P_TYPE_GETSTATUS);
|
||||
if(!usb_waitforreport()) {
|
||||
//************************************
|
||||
fprintf(stderr,"fileopen NO REPORT timeout\n");
|
||||
fflush(stderr);
|
||||
//fprintf(stderr,"fileopen NO REPORT timeout\n");
|
||||
//fflush(stderr);
|
||||
//************************************
|
||||
__usb_fileid=0;
|
||||
return 0; // FAIL IF TIMEOUT
|
||||
|
@ -533,8 +535,8 @@ int usb_txfileopen(int file_type)
|
|||
// REPLYING WITH A DIFFERENT FILEID, PERHAPS IT'S STILL CLOSING THE PREVIOUS FILE
|
||||
// KEEP WAITING
|
||||
//************************************
|
||||
fprintf(stderr,"fileopen bad fileid\n");
|
||||
fflush(stderr);
|
||||
//fprintf(stderr,"fileopen bad fileid\n");
|
||||
//fflush(stderr);
|
||||
//************************************
|
||||
|
||||
}
|
||||
|
@ -600,8 +602,8 @@ int usb_filewrite(int fileid,BYTEPTR data,int nbytes)
|
|||
__usb_rxtxtop=new__usb_rxtxtop;
|
||||
__usb_drvstatus|=USB_STATUS_TXDATA;
|
||||
//************************************
|
||||
fprintf(stderr,"Write %d bytes, offset=%d\n",available,__usb_offset);
|
||||
fflush(stderr);
|
||||
//fprintf(stderr,"Write %d bytes, offset=%d\n",available,__usb_offset);
|
||||
//fflush(stderr);
|
||||
//************************************
|
||||
nbytes-=available;
|
||||
sent+=available;
|
||||
|
@ -620,11 +622,6 @@ int usb_txfileclose(int fileid)
|
|||
// SET THE TOTAL SIZE OF THE FILE BASED ON THE LAST BUFFER SENT
|
||||
int total=__usb_rxtxtop-__usb_rxtxbottom;
|
||||
if(total<0) total+=RING_BUFFER_SIZE;
|
||||
//************************************
|
||||
fprintf(stderr,"fileclose totalbytes=%d, top=%d,bottom=%d,offset=%d\n",__usb_offset+total,__usb_rxtxtop,__usb_rxtxbottom,__usb_offset);
|
||||
fprintf(stderr,"fileclose __usb_txtotalbytes=%d\n",__usb_txtotalbytes);
|
||||
fflush(stderr);
|
||||
//************************************
|
||||
__usb_txtotalbytes=__usb_offset+total;
|
||||
|
||||
// SIGNAL THAT WE HAVE A NEW BUFFER READY
|
||||
|
@ -645,8 +642,8 @@ int usb_txfileclose(int fileid)
|
|||
if(!__usb_fileid) { result=0;
|
||||
|
||||
//************************************
|
||||
fprintf(stderr,"fileclose ABORTED file\n");
|
||||
fflush(stderr);
|
||||
//fprintf(stderr,"fileclose ABORTED file\n");
|
||||
//fflush(stderr);
|
||||
//************************************
|
||||
|
||||
break; } // COMMUNICATION WAS ABORTED
|
||||
|
@ -656,8 +653,8 @@ int usb_txfileclose(int fileid)
|
|||
end=tmr_ticks();
|
||||
if(tmr_ticks2ms(start,end)>USB_TIMEOUT_MS) {
|
||||
//************************************
|
||||
fprintf(stderr,"filclose timeout\n");
|
||||
fflush(stderr);
|
||||
//fprintf(stderr,"filclose timeout\n");
|
||||
//fflush(stderr);
|
||||
//************************************
|
||||
|
||||
result=0; break; } // FAIL IF TIMEOUT
|
||||
|
@ -666,6 +663,10 @@ int usb_txfileclose(int fileid)
|
|||
|
||||
} while(1);
|
||||
|
||||
//************************************
|
||||
//fprintf(stderr,"fileclose totalbytes=%d\n",__usb_txtotalbytes);
|
||||
//fflush(stderr);
|
||||
//************************************
|
||||
|
||||
__usb_fileid=0; // CLOSE THE FILE
|
||||
|
||||
|
|
|
@ -323,8 +323,8 @@ QMAKE_CXX = arm-none-eabi-g++
|
|||
QMAKE_LINK = arm-none-eabi-gcc
|
||||
#QMAKE_AR_CMD = arm-none-eabi-ar -cqs $(TARGET) $(OBJECTS)
|
||||
#QMAKE_AR_CMD = arm-none-eabi-ld --verbose -T$$PWD/firmware/ld.script -nodefaultlibs -nostdlib -L$$GCC_LIBDIR $(OBJECTS) -lgcc -o $(TARGET).elf
|
||||
QMAKE_CFLAGS_DEBUG = -g -mtune=arm920t -mcpu=arm920t -mlittle-endian -fomit-frame-pointer -fno-toplevel-reorder -msoft-float -Og -pipe -mthumb-interwork -nostdinc
|
||||
QMAKE_CFLAGS_RELEASE = -g -mtune=arm920t -mcpu=arm920t -mlittle-endian -fomit-frame-pointer -fno-toplevel-reorder -msoft-float -O2 -fno-partial-inlining -pipe -mthumb-interwork -nostdinc
|
||||
QMAKE_CFLAGS_DEBUG = -g -mtune=arm920t -mcpu=arm920t -mlittle-endian -fno-jump-tables -fomit-frame-pointer -fno-toplevel-reorder -msoft-float -Og -pipe -mthumb-interwork -nostdinc
|
||||
QMAKE_CFLAGS_RELEASE = -g -mtune=arm920t -mcpu=arm920t -mlittle-endian -fno-jump-tables -fomit-frame-pointer -fno-toplevel-reorder -msoft-float -O2 -fno-partial-inlining -pipe -mthumb-interwork -nostdinc
|
||||
QMAKE_CFLAGS_SHLIB =
|
||||
QMAKE_CFLAGS_MT =
|
||||
QMAKE_CFLAGS_MT_DBG =
|
||||
|
|
|
@ -761,6 +761,13 @@ void FWThread::run()
|
|||
header[1]=__fwupdate_address+(offset<<2);
|
||||
header[2]=1024;
|
||||
|
||||
//************************************
|
||||
fprintf(stderr,"Starting flash block=%08X\n",header[1]);
|
||||
fflush(stderr);
|
||||
//************************************
|
||||
|
||||
|
||||
|
||||
if(result && (!usb_filewrite(fileid,(BYTEPTR)header,3*sizeof(WORD)))) {
|
||||
// TODO: SOME KIND OF ERROR
|
||||
result=0;
|
||||
|
|
Loading…
Reference in a new issue