ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Алгоритм чтСния рСгистрации Π ΠŸΠ”ΠŸ

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ModalResult = Application→MessageBoxW (L" Π€Π°ΠΉΠ» с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡƒΠΆΠ΅ сущСствуСт. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ?", L" Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅", MB_OKCANCEL|MB_ICONWARNING); Cmd. addr_hi += page_count;// ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ адрСс Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ страницы. ВыдСляСм Π±ΡƒΡ„Π΅Ρ€ для хранСния страниц FLASH-памяти. Int last_cycle = cycles — 1; // Π½ΠΎΠΌΠ΅Ρ€ послСднСго запроса. EthFileName = «Π—Π°ΠΏΠΈΡΡŒ» + Time ().FormatString («hh_mm_ss»)+ «.rpdp… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Алгоритм чтСния рСгистрации Π ΠŸΠ”ΠŸ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ПослС Π²Ρ‹Π²ΠΎΠ΄Π° списка рСгистраций Π²StrGridRPDP, ΠΌΠΎΠΆΠ½ΠΎ произвСсти считываниС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ рСгистрации. Для Π²Ρ‹Π±ΠΎΡ€Π° рСгистрации Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ»ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π° Π½Π΅Π΅ ΠΌΡ‹ΡˆΠΊΠΎΠΉ Π² StrGridRPDP. Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ производится ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΈ «ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ» BtnReсeiveFromEthernet. ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ row записываСтся Π½ΠΎΠΌΠ΅Ρ€ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ строки Π² StrGridRPDP для дальнСйшСго поиска ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈΠΎΠ± этой рСгистрации Π² Π±ΡƒΡ„Π΅Ρ€Π΅ (адрСса Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ Π ΠŸΠ”ΠŸ ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π° страниц). Помимо этого Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ usgDirectoryNсоздаСтся Ρ„Π°ΠΉΠ» Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ .rpdp для дальнСйшСй записи считанной рСгистрации. Имя Ρ„Π°ΠΉΠ»Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ EthFileName. Π”Π°Π»Π΅Π΅ производится Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ чтСния Download_fast (), ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся имя созданного Ρ„Π°ΠΉΠ»Π° для записи ΠΈ Π½ΠΎΠΌΠ΅Ρ€ рСгистрации для считывания.

Листинг 3.4.1.

void __fastcall TForm1: BtnReceiveClick (TObject *Sender).

{.

TDateTime dtTemp;

row = Form1->StrGridRPDP->Row-1;

dtTemp = FileNameReg (row);

SaveDialog1->InitialDir = usgDirectoryN;

SaveDialog1->Filter = L" (*.rpdp)|*.rpdp" ;

EthFileName = «Π—Π°ΠΏΠΈΡΡŒ» + Time ().FormatString («hh_mm_ss»)+ «.rpdp» ;

SaveDialog1->FileName = EthFileName;

if (SaveDialog1->Execute ()).

{.

if (FileExists (SaveDialog1->FileName)).

{.

ModalResult = Application->MessageBoxW (L" Π€Π°ΠΉΠ» с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡƒΠΆΠ΅ сущСствуСт. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ?", L" Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅", MB_OKCANCEL|MB_ICONWARNING);

if (ModalResult == 2) { return; }.

}.

Download_fast (EthFileName, row);

}.

BtnCompare->Enabled = true;

}.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ функция ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ считываниС Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π² ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠΈ Π ΠŸΠ”ΠŸ рСгистрации ΠΈ Π·Π°ΠΏΠΈΡΡŒ этой рСгистрации Π² Ρ„Π°ΠΉΠ». По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ количСство считываСмых Π·Π° Ρ€Π°Π· страниц pages_per_req рСгистрации выбираСтся Ρ€Π°Π²Π½Ρ‹ΠΌ 50. Как ΠΈ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ оглавлСния, для считывания рСгистрации Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π ΠŸΠ”ΠŸ. НазваниС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ — RPDP_GET_RAW_PAGE, адрСс считываСмой рСгистрации ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ изглобального массива всСх страниц оглавлСния g_sys_page[40 960] Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π½Π΅Π΅. Π”Π°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ количСство запросов Π½Π° ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ для открытия Ρ†ΠΈΠΊΠ»Π° скачивания cycles. Π’ Ρ†ΠΈΠΊΠ»Π΅ опрСдСляСтся количСство страниц Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ запрос, отправляСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ количСством страниц для скачивания cmd. len = page_count ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся считываниС Π² tmp_buf. Π”Π°Π»Π΅Π΅ производится Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ считанного Π±ΡƒΡ„Π΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ rscodec_decode_page4k (), Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° rscodec_dll. ДСкодированная информация записываСтся Π² Ρ€Π°Π½Π΅Π΅ созданный Ρ„Π°ΠΉΠ».

Листинг 3.4.2.

bool _fastcall TForm1: Download_fast (UnicodeString asFileName, int row).

{.

int pages_per_req = 50;

char cTemp[2];

reg_info_t *info;

info = (reg_info_t *) g_sys_page;

iFileName = FileCreate (asFileName);

// ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

rpdp_cmd_t cmd;

cmd.pack_type = PKT_CMD;

cmd.cmd = RPDP_GET_RAW_PAGE;//.

cmd.addr_lo = 0;

cmd.addr_hi = info[row]. faddr. addr_hi;

cmd.len = pages_per_req;

// опрСдСляСм ΠΊΠΎΠ»-Π²ΠΎ запросов Π½Π° ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅.

int cycles = info[row]. pages / pages_per_req;

int last_pages = info[row]. pages % pages_per_req;

if (last_pages).

cycles++;

// выдСляСм Π±ΡƒΡ„Π΅Ρ€ для хранСния страниц FLASH-памяти.

char *tmp_buf = (char*)malloc (pages_per_req * sizeof (nand_page4k_t));

// сам Ρ†ΠΈΠΊΠ» скачки.

int last_cycle = cycles — 1; // Π½ΠΎΠΌΠ΅Ρ€ послСднСго запроса.

for (int i=0; i.

{.

// ΠΎΠΏΡ€Π΅Π΄. ΠΊΠΎΠ»-Π²ΠΎ страниц Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ запрос.

int page_count;

if (i == last_cycle).

{.

if (last_pages).

page_count = last_pages;

else.

page_count = pages_per_req;

} else.

{.

page_count = pages_per_req;

}.

cmd.len = page_count;

dev->send_cmd (&cmd);

dev->read_raw_pages (tmp_buf, page_count, 5000);

cmd.addr_hi += page_count;// ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ адрСс Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ страницы.

nand_page4k_t *page_buf = (nand_page4k_t *)tmp_buf;

// Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅ΠΌ страницы ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ.

// записываСм ΠΈΡ… Π² Ρ„Π°ΠΉΠ».

for (int j=0; j < page_count; j++).

{.

rscodec_decode_page4k (&page_buf[j]);

if (i == 0 && j == 0).

{.

FileWrite (iFileName, page_buf[j]. data, 4082);

} else.

{.

FileWrite (iFileName, page_buf[j]. data, 4080);

}.

}.

}.

cTemp[0] = 0xFA; // записываСм Π²Π΅Ρ€ΡΠΈΡŽ рСгистрации.

cTemp[1] = 0xFA;

FileSeek (iFileName, 0, 0);

FileWrite (iFileName, cTemp, 2);

StatusBar->Panels->operator [](3)->Text = «Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ «;

free (tmp_buf);

return true;

}.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ