📄 rom.c
字号:
#define ROM_SIZE 8192 /* Taille totale de la ROM. */
//*************** VARIABLES GLOBALES ***************//
unsigned int rom_address = 0; /* Adresse des donn閑s pour la
* prochaine lecture/閏riture. */
//*************** FONCTIONS "PUBLIQUES" ***************//
/* Lit un short dans la ROM. */
unsigned short rom_read_short(unsigned int addr) {
return flash_read(rom_address + addr);
}
/* Lit un int dans la ROM. */
unsigned int rom_read_int(unsigned int addr) {
unsigned int temp;
lo(temp) = rom_read_short(addr++);
hi(temp) = rom_read_short(addr);
return temp;
}
/* Lit un long dans la ROM. */
unsigned long rom_read_long(unsigned int addr) {
unsigned long temp;
lo(temp) = rom_read_short(addr++);
hi(temp) = rom_read_short(addr++);
higher(temp) = rom_read_short(addr++);
highest(temp) = rom_read_short(addr);
return temp;
}
/* Copie le contenu d'un tampon dans la ROM. */
void rom_write(unsigned int addr,
unsigned short *buffer, unsigned short length) {
unsigned short i;
/* Commence un mot de 4 octets. */
addr += rom_address;
for( i = addr % 4; i > 0; --i)
flash_write(addr - i, flash_read(addr - i));
/* Ecrit les donn閑s qui nous int閞essent. */
for( i = 0; i < length; ++i)
flash_write(addr + i, buffer[i]);
/* Termine le mot de 4 octets en cours. */
addr += length;
for( i = 0; i < 4 - addr % 4; ++i)
flash_write(addr + i, flash_read(addr + i));
}
/* Ecrit un short dans la ROM. */
void rom_write_short(unsigned int addr, unsigned short data) {
rom_write(addr,&data,1);
}
/* Ecrit un int dans la ROM. */
void rom_write_int(unsigned int addr, unsigned int data) {
rom_write(addr,(unsigned short*)&data,2);
}
/* Ecrit un long dans la ROM. */
void rom_write_long(unsigned int addr, unsigned long data) {
rom_write(addr,(unsigned short*)&data,4);
}
/* Initialisation de l'adresse des donn閑s. */
void rom_init(unsigned int addr, unsigned int length) {
rom_address = ROM_SIZE - addr - length - 4;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -