fork download
  1. /*
  2.  
  3.  
  4. */
  5.  
  6. #ifndef F_CPU
  7. #define F_CPU 7372800UL
  8. #endif
  9.  
  10. #define BAUDRATE 115200
  11. #define BAUDREG ((unsigned int)((F_CPU * 10) / (16UL * BAUDRATE) - 5) / 10)
  12.  
  13. #define Pages 112
  14.  
  15. #include <avr/io.h>
  16. #include <avr/boot.h>
  17. #include <avr/eeprom.h>
  18. #include <avr/pgmspace.h>
  19. #include <avr/interrupt.h>
  20.  
  21. #include <util/delay.h>
  22.  
  23. //void (*reset)(void)=0x0000;
  24. static void (*jump_to_app)(void) = 0x0000;
  25.  
  26. unsigned char PageBuffer[SPM_PAGESIZE];
  27.  
  28. void sendchar(unsigned char c) //rs232 write
  29. {
  30. UDR0 = c; // prepare transmission
  31. while (!(UCSR0A & (1 << TXC0))); // wait until byte sendt
  32. UCSR0A |= (1 << TXC0); // delete TXCflag
  33. }
  34.  
  35. unsigned char recchar(void) //rs232 read
  36. {
  37. while(!(UCSR0A & (1 << RXC0))); // wait for data
  38. return UDR0;
  39. }
  40.  
  41. void recvBuffer(unsigned char size)
  42. {
  43. unsigned char cnt ;
  44. unsigned char *tmp = PageBuffer;
  45.  
  46. for(cnt = 0 ; cnt < SPM_PAGESIZE ; cnt ++)
  47. {
  48. *tmp++ = (cnt < size) ? recchar() : 0xff;
  49. }
  50. }
  51.  
  52. unsigned char writeFlashPage(unsigned int addr,unsigned char size )
  53. {
  54. uint32_t pagestart = (uint32_t)addr<<1;
  55. uint32_t baddr = pagestart;
  56. uint16_t data;
  57. uint8_t *tmp = PageBuffer;
  58.  
  59. do
  60. {
  61. data = *tmp ++;
  62. data |= *tmp++ << 8;
  63. boot_page_fill(baddr,data);
  64. baddr += 2;
  65. size -= 2;
  66. } while (size);
  67.  
  68. boot_page_write(pagestart);
  69. boot_spm_busy_wait();
  70. boot_rww_enable();
  71.  
  72. return baddr>>1;
  73. }
  74.  
  75. void eraseFlash(void)
  76. {
  77. // erase only main section (bootloader protection)
  78. uint32_t addr = 0;
  79. while (112 > addr) {
  80. boot_page_erase(addr); // Perform page erase
  81. boot_spm_busy_wait(); // Wait until the memory is erased.
  82. //addr += SPM_PAGESIZE;
  83. addr += 112;
  84. }
  85. boot_rww_enable();
  86. }
  87.  
  88. int main(void)
  89. {
  90. unsigned char get_data = 0;
  91. unsigned int time_out = 0;
  92. unsigned int address = 0;
  93.  
  94. PORTD = 0x04;
  95. DDRD = 0x0e;
  96.  
  97. cli();
  98. //RS232
  99. UBRR0H = BAUDREG/256;
  100. UBRR0L = BAUDREG%256;
  101. UCSR0B = ( 1 << RXEN0 ) | ( 1 << TXEN0 );
  102. UCSR0C = ( 1 << UCSZ00 ) | ( 1 << UCSZ01 );
  103.  
  104. sendchar('B');
  105. sendchar('o');
  106. sendchar('o');
  107. sendchar('t');
  108.  
  109. sendchar(0x0d); //== sendchar('\n')
  110. sendchar(0x0a); //== sendchar('\r');
  111.  
  112. start:
  113. //rs232 read data
  114. while(!(UCSR0A & (1 << RXC0))) // wait for data
  115. {
  116. if(time_out == 2000)
  117. {
  118. time_out = 0;
  119. sendchar('@');
  120. jump_to_app();
  121. }
  122.  
  123. _delay_ms(1);
  124. time_out ++;
  125. }
  126.  
  127. //get a command
  128. get_data = UDR0;
  129. time_out = 0;
  130. switch(get_data)
  131. {
  132. case 'a':
  133. address = recchar() << 8;
  134. address |= recchar();
  135. sendchar('a');
  136. break;
  137. case 'w': //write flash
  138. {
  139. unsigned int size;
  140.  
  141. size = recchar() << 8;
  142. size |= recchar();
  143. sendchar('g');
  144. PORTD ^= (1 <<PD2);
  145. recvBuffer(size);
  146. //PORTD ^= (1 <<PD2);
  147. writeFlashPage(address,size);
  148. PORTD ^= (1 <<PD2);
  149. sendchar('!');
  150. }
  151. break;
  152. case 'e':
  153. eraseFlash();
  154. sendchar('e');
  155. break;
  156. default:
  157. sendchar('?');
  158. break;
  159. }
  160. goto start;
  161.  
  162. return 0;
  163. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:6: error: illegal character: '#'
#ifndef F_CPU
^
Main.java:7: error: illegal character: '#'
#define F_CPU              7372800UL
^
Main.java:8: error: illegal character: '#'
#endif
^
Main.java:10: error: illegal character: '#'
#define BAUDRATE           115200
^
Main.java:11: error: illegal character: '#'
#define BAUDREG            ((unsigned int)((F_CPU * 10) / (16UL * BAUDRATE) - 5) / 10)
^
Main.java:13: error: illegal character: '#'
#define Pages				112
^
Main.java:15: error: illegal character: '#'
#include <avr/io.h>
^
Main.java:16: error: illegal character: '#'
#include <avr/boot.h>
^
Main.java:17: error: illegal character: '#'
#include <avr/eeprom.h>
^
Main.java:18: error: illegal character: '#'
#include <avr/pgmspace.h>
^
Main.java:19: error: illegal character: '#'
#include <avr/interrupt.h>
^
Main.java:21: error: illegal character: '#'
#include <util/delay.h>
^
Main.java:26: error: class, interface, or enum expected
unsigned char PageBuffer[SPM_PAGESIZE];
^
Main.java:28: error: class, interface, or enum expected
void sendchar(unsigned char c)			//rs232 write
^
Main.java:31: error: class, interface, or enum expected
	while (!(UCSR0A & (1 << TXC0)));	// wait until byte sendt
	^
Main.java:32: error: class, interface, or enum expected
	UCSR0A |= (1 << TXC0);				// delete TXCflag
	^
Main.java:33: error: class, interface, or enum expected
}
^
Main.java:38: error: class, interface, or enum expected
	return UDR0;
	^
Main.java:39: error: class, interface, or enum expected
}
^
Main.java:44: error: class, interface, or enum expected
	unsigned char *tmp =  PageBuffer;
	^
Main.java:46: error: class, interface, or enum expected
	for(cnt = 0 ; cnt < SPM_PAGESIZE ; cnt ++)
	^
Main.java:46: error: class, interface, or enum expected
	for(cnt = 0 ; cnt < SPM_PAGESIZE ; cnt ++)
	              ^
Main.java:46: error: class, interface, or enum expected
	for(cnt = 0 ; cnt < SPM_PAGESIZE ; cnt ++)
	                                   ^
Main.java:49: error: class, interface, or enum expected
	}
	^
Main.java:55: error: class, interface, or enum expected
	uint32_t baddr = pagestart;
	^
Main.java:56: error: class, interface, or enum expected
	uint16_t data;
	^
Main.java:57: error: class, interface, or enum expected
	uint8_t *tmp = PageBuffer;
	^
Main.java:59: error: class, interface, or enum expected
	do 
	^
Main.java:62: error: class, interface, or enum expected
		data |= *tmp++ << 8;
		^
Main.java:63: error: class, interface, or enum expected
		boot_page_fill(baddr,data);
		^
Main.java:64: error: class, interface, or enum expected
		baddr += 2;
		^
Main.java:65: error: class, interface, or enum expected
		size -= 2;
		^
Main.java:66: error: class, interface, or enum expected
	} while (size);
	^
Main.java:68: error: class, interface, or enum expected
	boot_page_write(pagestart);
	^
Main.java:69: error: class, interface, or enum expected
	boot_spm_busy_wait();
	^
Main.java:70: error: class, interface, or enum expected
	boot_rww_enable();
	^
Main.java:72: error: class, interface, or enum expected
	return baddr>>1;
	^
Main.java:73: error: class, interface, or enum expected
}
^
Main.java:79: error: class, interface, or enum expected
	while (112 > addr) {
	^
Main.java:81: error: class, interface, or enum expected
		boot_spm_busy_wait();		// Wait until the memory is erased.
		^
Main.java:83: error: class, interface, or enum expected
		addr += 112;
		^
Main.java:84: error: class, interface, or enum expected
	}
	^
Main.java:86: error: class, interface, or enum expected
}
^
Main.java:91: error: class, interface, or enum expected
	unsigned int time_out = 0;
	^
Main.java:92: error: class, interface, or enum expected
	unsigned int address = 0;
	^
Main.java:94: error: class, interface, or enum expected
	PORTD	= 0x04;
	^
Main.java:95: error: class, interface, or enum expected
	DDRD	= 0x0e;
	^
Main.java:97: error: class, interface, or enum expected
	cli();
	^
Main.java:99: error: class, interface, or enum expected
	UBRR0H = BAUDREG/256;
	^
Main.java:100: error: class, interface, or enum expected
	UBRR0L = BAUDREG%256;
	^
Main.java:101: error: class, interface, or enum expected
	UCSR0B = ( 1 << RXEN0 ) | ( 1 << TXEN0 );
	^
Main.java:102: error: class, interface, or enum expected
	UCSR0C = ( 1 << UCSZ00 ) | ( 1 << UCSZ01 );
	^
Main.java:104: error: class, interface, or enum expected
	sendchar('B');
	^
Main.java:105: error: class, interface, or enum expected
	sendchar('o');
	^
Main.java:106: error: class, interface, or enum expected
	sendchar('o');
	^
Main.java:107: error: class, interface, or enum expected
	sendchar('t');
	^
Main.java:109: error: class, interface, or enum expected
	sendchar(0x0d);	//==	sendchar('\n')
	^
Main.java:110: error: class, interface, or enum expected
	sendchar(0x0a);	//==	sendchar('\r');
	^
Main.java:112: error: class, interface, or enum expected
start:
^
Main.java:119: error: class, interface, or enum expected
			sendchar('@');
			^
Main.java:120: error: class, interface, or enum expected
			jump_to_app();
			^
Main.java:121: error: class, interface, or enum expected
		}
		^
Main.java:124: error: class, interface, or enum expected
		time_out ++;		
		^
Main.java:125: error: class, interface, or enum expected
	}
	^
Main.java:129: error: class, interface, or enum expected
	time_out = 0;
	^
Main.java:130: error: class, interface, or enum expected
	switch(get_data)
	^
Main.java:134: error: class, interface, or enum expected
			address |= recchar();			
			^
Main.java:135: error: class, interface, or enum expected
			sendchar('a');
			^
Main.java:136: error: class, interface, or enum expected
		break;
		^
Main.java:137: error: class, interface, or enum expected
		case 'w':	//write flash
		^
Main.java:141: error: class, interface, or enum expected
			size = recchar() << 8;
			^
Main.java:142: error: class, interface, or enum expected
			size |= recchar();
			^
Main.java:143: error: class, interface, or enum expected
			sendchar('g');	
			^
Main.java:144: error: class, interface, or enum expected
			PORTD	^=	(1 <<PD2);
			^
Main.java:145: error: class, interface, or enum expected
			recvBuffer(size);
			^
Main.java:147: error: class, interface, or enum expected
			writeFlashPage(address,size);
			^
Main.java:148: error: class, interface, or enum expected
			PORTD	^=	(1 <<PD2);
			^
Main.java:149: error: class, interface, or enum expected
			sendchar('!');
			^
Main.java:150: error: class, interface, or enum expected
		}
		^
Main.java:152: error: class, interface, or enum expected
		case 'e':
		^
Main.java:154: error: class, interface, or enum expected
			sendchar('e');
			^
Main.java:155: error: class, interface, or enum expected
		break;
		^
Main.java:156: error: class, interface, or enum expected
		default:
		       ^
Main.java:158: error: class, interface, or enum expected
		break;
		^
Main.java:159: error: class, interface, or enum expected
	}
	^
Main.java:162: error: class, interface, or enum expected
	return 0;
	^
Main.java:163: error: class, interface, or enum expected
}
^
87 errors
stdout
Standard output is empty