[an error occurred while processing this directive]
сбоев ни разу не было, но береженого бог бережет подумала монашка и натянула ... тупо:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Пионер 20 декабря 2002 г. 18:02
В ответ на: Если не сложно, вкраце общие подходы отправлено allmaker 20 декабря 2002 г. 17:45

1. мулька:

#include
#include

void main( int argc, char* argv[] )
{
HANDLE hFile;
LPBYTE Buf;
DWORD s, Size;
BYTE Sum;

if( argc < 2 ) return;

hFile = CreateFile( argv[1], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL );
if( hFile != INVALID_HANDLE_VALUE ) {
s = GetFileSize( hFile, NULL );
Buf = LocalAlloc( LMEM_FIXED, s );
if( Buf != NULL ) {
if( ReadFile( hFile, Buf, s, &Size, NULL ) ) {
Sum = 0;
for( s = 0; s < Size; s++ ) Sum += Buf[ s ];
printf( "%02X\n", Sum );
}
LocalFree( Buf );
}
CloseHandle( hFile );
}
}

2. батник:

del %1.bin
hexbin %1.hex %1.bin I
checksum %1.bin

3. внутри асма:

clr ZH
clr ZL
clr TEMP
flash_checksum:
lpm
adiw ZL, 1
add TEMP, r0
cpi ZH, high( CodeEnd < < 1 )
brne flash_checksum
cpi ZL, low( CodeEnd < < 1)
brne flash_checksum
lpm
cp TEMP, r0
пока не отлажено окончательно, след. строка раскомментарена
; rjmp continue_init
breq continue_init
FLASH_CHECKSUM_ERROR:
можно помигать светодиодом
rjmp FLASH_CHECKSUM_ERROR

continue_init:

а это в самом конце
CodeEnd:
.DB 0x9B ; контрольная сумма

может проще надо жить, а?

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru