рдорд╛рдЗрдХреНрд░реЛрдЪрд┐рдк рдореЗрдВ рд╣рд┐рдВрджреВ рдХреЛрдб

рдПрд╕рдбреА-рдХрд╛рд░реНрдб рдХреЛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдЬрд▓реНрджреА рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдФрд░ рдХрд╛рд░реНрдп рд╕рд░рд▓ рд▓рдЧ рд░рд╣рд╛ рдерд╛ - рдПрдХ рдЕрдЪреНрдЫрд╛ рдорд╛рдЗрдХреНрд░реЛрдЪрд┐рдк рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдУрд╣, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рдбрд╛рд▓рдирд╛ рднрд╛рдЧреНрдп рдирд╣реАрдВ рд╣реИ) , рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд┐рд░ рдкрд░ рдмрд╛рд▓ рдЪрд▓рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ред

рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ рдорд╛рдЗрдХреНрд░реЛрдЪрд┐рдк рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХреА, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рдХрд┐ рд╡реЗ рдЕрдХреНрд╕рд░ рдХрд╛рд░реНрдпрд╛рд▓рдп рдХреЗ рднрд╛рд░рддреАрдп рд╡рд┐рднрд╛рдЧ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдФрд░ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рд╕рдВрджреЗрд╣ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдерд╛ рдХрд┐ рдкреВрд░рд╛ рдорд╛рдЗрдХреНрд░реЛрдЪрд┐рдк рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдмреЙрдореНрдмреЗ рдЪрд▓рд╛ рдЧрдпрд╛ рдФрд░ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд░рдд рдХреЗ рдмреЗрдШрд░ рд╕реНрдХреВрд▓реА рдмрдЪреНрдЪреЛрдВ рдХреЛ рднрд░реНрддреА рдХрд┐рдпрд╛ред



рдРрд╕рд╛ рдордд рд╕реЛрдЪреЛ рдХрд┐ рдореИрдВ рдПрдХ рдирд╕реНрд▓реАрдп рд░реВрдк рд╕реЗ рд╕рд╣реА рд░реЗрдЦрд╛ рдХреЛ рдореЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ - рдореБрдЭреЗ рднрд╛рд░рддреАрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрд╛рдлреА рд╣реИрдВ (рд╡рд┐рд╢реНрд╡рд╛рд╕ рдордд рдХрд░реЛ, Google рдореЗрдВ "95" рдЯрд╛рдЗрдк рдХрд░реЗрдВ), рд▓реЗрдХрд┐рди "рд╣рд┐рдВрджреВ рдХреЛрдб" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдмрд╣реБрдд рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдИ рджреА рдереА рдФрд░ рдХрд╛рдлреА рдордЬрдмреВрддреА рд╕реЗ рдЙрд▓рдЭрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд░рд╛рдЬрдиреАрддрд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╣реА рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ (рд▓реЗрдХрд┐рди рдЧреВрдЧреЛрд▓ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ)ред
рд╣рд┐рдВрджреВ рдХреЛрдб (рднрд╛рд░рддреАрдп рдпрд╛ рдореВрд▓ рдЕрдореЗрд░рд┐рдХреА рдирд╣реАрдВ) рд╕рд░рд▓ рд▓реЗрдХрд┐рди рд╢рд╛рддрд┐рд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрддреНрдпрдВрдд рдирд┐рдореНрди-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдХреЛрдб рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рд╣реИред
рдХреНрдпреЛрдВ рд╣рд┐рдВрджреВ?
рднрд╛рд░рдд рдореЗрдВ рдЕрдлрд╡рд╛рд╣реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП, рдХреЛрдб рд▓рд┐рдЦреЗ рдЧрдП рд░рд╛рд╢рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреА рдкреНрд░рдерд╛ рд░рд╣реА рд╣реИред рдЕрдзрд┐рдХ рдХреЛрдб, рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЙрд╕рдХрд╛ рд╡реЗрддрди рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИред рдлреБрд░реНрддреАрд▓реЗ рднрд╛рд░рддреАрдпреЛрдВ рдиреЗ рдЬрд▓реНрджреА рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдХреИрд╕реЗ рдЕрдХреБрд╢рд▓ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдмрд░рдЧрд▓рд╛рддреЗ рд╣реИрдВред
рдХрд╛рд▓рд╛рдзрд╛рд░рд╛ рд╕реЗ рдЙрдкрдпреЛрдЧреА рдиреЛрдЯ
рднрд╛рд░рдд рдХрд╛ рдирд┐рд╡рд╛рд╕реА рдПрдХ рднрд╛рд░рддреАрдп рд╣реИ, рдФрд░ рдПрдХ рд╣рд┐рдВрджреВ рд╣рд┐рдВрджреВ рдзрд░реНрдо рдХреА рдХрд┐рд╕реА рднреА рджрд┐рд╢рд╛ рдХрд╛ рдЕрдиреБрдпрд╛рдпреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдиреНрдирдд рд╡рд░реНрд╖реЛрдВ рдХреА рдЪреБрдЪреА, рд╢реИрд╡ рдзрд░реНрдо (рдФрд░ рд╢рд╛рдпрдж C ++ рдореЗрдВ рд▓рд┐рдЦрдирд╛) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдПрдХ рднрд╛рд░рддреАрдп рд╣реИред

рддреЛ, рдЕрдЧрд░ рдЖрдк рдорд╛рдЗрдХреНрд░реЛрдЪрд┐рдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрди рд╕рд░рд▓ рд╕реБрдЭрд╛рд╡реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ ...

0. рдЕрдзрд┐рдХ рдХреЛрдб - рдЕрдзрд┐рдХ рд▓рд╛рдн!


рдЬрдм рдЖрдкрдХреЛ рдорд╛рдЗрдХреНрд░реЛрдЪрд┐рдк рдореЗрдВ рдиреМрдХрд░реА рдорд┐рд▓рддреА рд╣реИ рддреЛ рдЖрдкрдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ: "рд╡реЗ рдЕрднреА рднреА рдХреЛрдб рдХреА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рддреЗ рд╣реИрдВ!" рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реНрд░реЛрдд рдЧреНрд░рдВрдереЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рдмрдврд╝рд╛рдПрдВред рд╕рд╛рдорд╛рдиреНрдп рд╕рд▓рд╛рд╣, рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛, рдХрд▓реНрдкрдирд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред

1. рд╢реИрд▓реА рдХреЗ рдХреНрд▓рд╛рд╕рд┐рдХреНрд╕


рд╣рд┐рдВрджреВ рдлрд┐рд▓реНрдо рд╢реИрд▓реА рдХреА рдХреНрд▓рд╛рд╕рд┐рдХ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рдЕрдбрд┐рдЧ рд░рд╣реА рд╣реИред рд╡рд╛рд░реНрдо рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ "MDD рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо \ SD-SPI.c" рд▓рд╛рдЗрди 1042 рдкрд░ рдлрд╛рдЗрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рдЫрд┐рдкрд╛ рд╣реИ:

if(localCounter != 0x0000) { localPointer--; while(1) { SPIBUF = 0xFF; localPointer++; if((--localCounter) == 0x0000) { break; } while(!SPISTAT_RBF); *localPointer = (BYTE)SPIBUF; } while(!SPISTAT_RBF); *localPointer = (BYTE)SPIBUF; } 

ANSWER рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдордд рдХрд░реЛ - рдпрд╣ рд╕рд░рд▓ рд╣реИ:
 //    (      )    while (localCounter--) { SPIBUF = 0xFF; while (!SPISTAT_RBF); *localPointer++ = SPIBUF; } //    ,        //      -    while (localCounter) { localCounter--; SPIBUF = 0xFF; while (!SPISTAT_RBF); *localPointer++ = SPIBUF; } 


2. рдХреЙрдкреА-рдкреЗрд╕реНрдЯ


рдХрд▓реНрдкрдирд╛ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдлрд╡рд╛рд╣реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрдИ рдирд┐рдпреЛрдХреНрддрд╛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдорд╛рдЗрдХреНрд░реЛрдЪрд┐рдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ, рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрднреА рднреА рд╣рд┐рдВрджреВ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЖрдЯрд╛ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП рди рдХрд░реЗрдВ - рд╡реЗ рдмреБрд░рд╛рдИ рдФрд░ рдмрджрд╕реВрд░рдд рдХреЛрдб рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MDD рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо \ FSIO.c рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмреАрд╕ рдмрд╛рд░ рджреЛрд╣рд░рд╛рддрд╛ рд╣реБрдЖ рдПрдХ рдЯреБрдХрдбрд╝рд╛:

ctrl + v
 if (utfModeFileName) { utf16path++; i = *utf16path; } else { temppath++; i = *temppath; } 

рдЖрдо рддреМрд░ рдкрд░ рдореИрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдЕрдЧрд░ рдХреБрдЫ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдореИрдВ рддреБрд░рдВрдд рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рдХрд╣рд╛рдВ рдФрд░ рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛрдб рдХреЗ рд╕рдорд╛рди рдЯреБрдХрдбрд╝реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд╣реАрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдмреНрд▓рдВрдЯ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдЗрд╕рд╕реЗ рдПрдХ рдореИрдХреНрд░реЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛:

рдКрдкрд░ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
 #define getnextpathchar() ( utfModeFileName ? *++utf16path : *++temppath ) // -   ... i = getnextpathchar(); //    

рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдкрдХреНрд╖ рдореЗрдВ 10: 1 рдХрд╛ рдЕрдиреБрдкрд╛рдд, рдФрд░ рдирд┐рд░рдкреЗрдХреНрд╖ рд░реВрдк рд╕реЗ рдмреАрд╕ рджреЛрд╣рд░рд╛рд╡ рджрд┐рдП рдЧрдП, рдпрд╣ рдХрдИ рд╕реМ рд░реБрдкрдпреЗ рд╣реИ!

3. рд▓рд╛рдЗрди рдХреЛрдб


рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреБрд░рд╛рдИ рд╣реИред рдПрдХ рд░реЗрдЦреАрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣рд╛рд▓рдд рдмрдпрд╛рдиреЛрдВ рдФрд░ рдмрджрд▓рд╛рд╡реЛрдВ рдкрд░ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд┐рдП рдмрд┐рдирд╛ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдб рдХреА рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ
 fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part3[1]; fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part3[0]; fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[5]; fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[4]; fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[3]; fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[2]; fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[1]; fileFoundString[fileFoundLfnIndex--] = lfnObject.LFN_Part2[0]; tempShift.byte.LB = lfnObject.LFN_Part1[8]; tempShift.byte.HB = lfnObject.LFN_Part1[9]; fileFoundString[fileFoundLfnIndex--] = tempShift.Val; tempShift.byte.LB = lfnObject.LFN_Part1[6]; tempShift.byte.HB = lfnObject.LFN_Part1[7]; fileFoundString[fileFoundLfnIndex--] = tempShift.Val; tempShift.byte.LB = lfnObject.LFN_Part1[4]; tempShift.byte.HB = lfnObject.LFN_Part1[5]; fileFoundString[fileFoundLfnIndex--] = tempShift.Val; tempShift.byte.LB = lfnObject.LFN_Part1[2]; tempShift.byte.HB = lfnObject.LFN_Part1[3]; fileFoundString[fileFoundLfnIndex--] = tempShift.Val; tempShift.byte.LB = lfnObject.LFN_Part1[0]; tempShift.byte.HB = lfnObject.LFN_Part1[1]; fileFoundString[fileFoundLfnIndex--] = tempShift.Val; 

рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд╛рдп-рдмрд╛рдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; рд╕рд░рд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:

 const somestruct mystruct = {"Field1", 2, 4, 8 .... }; 

рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВ, рд╣рд╛рд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╛рджрдЧрд╛рд░, рдФрд░ рдпрд╣ рдЕрд╕рд▓реА рдкреИрд╕рд╛ рд╣реИ
 gDataBuffer[0] = 0xEB; //Jump instruction gDataBuffer[1] = 0x3C; gDataBuffer[2] = 0x90; gDataBuffer[3] = 'M'; //OEM Name "MCHP FAT" gDataBuffer[4] = 'C'; gDataBuffer[5] = 'H'; gDataBuffer[6] = 'P'; gDataBuffer[7] = ' '; gDataBuffer[8] = 'F'; gDataBuffer[9] = 'A'; gDataBuffer[10] = 'T'; gDataBuffer[11] = 0x00; //Sector size gDataBuffer[12] = 0x02; gDataBuffer[13] = disk->SecPerClus; //Sectors per cluster gDataBuffer[14] = 0x20; //Reserved sector count gDataBuffer[15] = 0x00; disk->fat = 0x20 + disk->firsts; gDataBuffer[16] = 0x02; //number of FATs gDataBuffer[17] = 0x00; //Max number of root directory entries - 512 files allowed gDataBuffer[18] = 0x00; gDataBuffer[19] = 0x00; //total sectors gDataBuffer[20] = 0x00; gDataBuffer[21] = 0xF8; //Media Descriptor gDataBuffer[22] = 0x00; //Sectors per FAT gDataBuffer[23] = 0x00; gDataBuffer[24] = 0x3F; //Sectors per track gDataBuffer[25] = 0x00; gDataBuffer[26] = 0xFF; //Number of heads gDataBuffer[27] = 0x00; // Hidden sectors = sectors between the MBR and the boot sector gDataBuffer[28] = (BYTE)(disk->firsts & 0xFF); gDataBuffer[29] = (BYTE)((disk->firsts / 0x100) & 0xFF); gDataBuffer[30] = (BYTE)((disk->firsts / 0x10000) & 0xFF); gDataBuffer[31] = (BYTE)((disk->firsts / 0x1000000) & 0xFF); // Total Sectors = same as sectors in the partition from MBR gDataBuffer[32] = (BYTE)(secCount & 0xFF); gDataBuffer[33] = (BYTE)((secCount / 0x100) & 0xFF); gDataBuffer[34] = (BYTE)((secCount / 0x10000) & 0xFF); gDataBuffer[35] = (BYTE)((secCount / 0x1000000) & 0xFF); gDataBuffer[36] = fatsize & 0xFF; //Sectors per FAT gDataBuffer[37] = (fatsize >> 8) & 0xFF; gDataBuffer[38] = (fatsize >> 16) & 0xFF; gDataBuffer[39] = (fatsize >> 24) & 0xFF; gDataBuffer[40] = 0x00; //Active FAT gDataBuffer[41] = 0x00; gDataBuffer[42] = 0x00; //File System version gDataBuffer[43] = 0x00; gDataBuffer[44] = 0x02; //First cluster of the root directory gDataBuffer[45] = 0x00; gDataBuffer[46] = 0x00; gDataBuffer[47] = 0x00; gDataBuffer[48] = 0x01; //FSInfo gDataBuffer[49] = 0x00; gDataBuffer[50] = 0x00; //Backup Boot Sector gDataBuffer[51] = 0x00; gDataBuffer[52] = 0x00; //Reserved for future expansion gDataBuffer[53] = 0x00; gDataBuffer[54] = 0x00; gDataBuffer[55] = 0x00; gDataBuffer[56] = 0x00; gDataBuffer[57] = 0x00; gDataBuffer[58] = 0x00; gDataBuffer[59] = 0x00; gDataBuffer[60] = 0x00; gDataBuffer[61] = 0x00; gDataBuffer[62] = 0x00; gDataBuffer[63] = 0x00; gDataBuffer[64] = 0x00; // Physical drive number gDataBuffer[65] = 0x00; // Reserved (current head) gDataBuffer[66] = 0x29; // Signature code gDataBuffer[67] = (BYTE)(serialNumber & 0xFF); gDataBuffer[68] = (BYTE)((serialNumber / 0x100) & 0xFF); gDataBuffer[69] = (BYTE)((serialNumber / 0x10000) & 0xFF); gDataBuffer[70] = (BYTE)((serialNumber / 0x1000000) & 0xFF); gDataBuffer[82] = 'F'; gDataBuffer[83] = 'A'; gDataBuffer[84] = 'T'; gDataBuffer[85] = '3'; gDataBuffer[86] = '2'; gDataBuffer[87] = ' '; gDataBuffer[88] = ' '; gDataBuffer[89] = ' '; 


4. рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╕реЗ рдмрд╛рдЗрдХ рдпрд╛ рдкреИрд╕реЗ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛


рдлрд╛рдЗрд▓ тАЬMDD рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо \ FSIO.cтАЭ рдореЗрдВ рдлрд╛рдЗрд▓ 60bjectCopy рдлрд╝рдВрдХреНрд╢рди рдХреА рд▓рд╛рдЗрди 6065 рдкрд░ рд╡рд┐рдЪрд╛рд░ рдиреЗ рдореБрдЭреЗ рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рдЕрд▓рдЧ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдереАрдВ, рддреЛ SomeObjectCopy рдкреНрд░рдХрдЯ рд╣реЛрдЧреА

рд╕реНрд╡рдпрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдВ
 void FileObjectCopy(FILEOBJ foDest, FILEOBJ foSource) { int size; BYTE* dest; BYTE* source; int Index; dest = (BYTE*)foDest; source = (BYTE*)foSource; size = sizeof(FSFILE); for (Index = 0; Index < size; Index++) { dest[Index] = source[Index]; } } 

рд╡рд┐рд╡рд░рдг рдЖрдХрд░реНрд╖рдг рд╕рд╛рджрдЧреА рдХреЗ рд╕рд╛рде:
FileObjectCopy рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ FSFILE рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рдПрдХреНрд╕рд╕рд╛рдЗрдЯ рдХреЙрдкреА рдмрдирд╛ рджреЗрдЧрд╛ред
рдпрджрд┐ рдХреЛрдб рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ "рдПрдХреНрдЬрд╝рд┐рдорд╛" == "рд╕рдЯреАрдХ" рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рднрджрд╛рдпрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИ - рдПрдПрдирдПрд╕рдЖрдИ рд╕реА рдореЗрдВ рдПрдХ рдорд╛рдирдХ рд╕рдВрдЪрд╛рд▓рди, рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдпрд╣ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдПрдлрдПрд╕рдЖрд░ / рдЗрдВрдбрд┐рдпрд╛рдлрд╝ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рддреЗрдЬрд╝ рдФрд░ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Memcpy (рдбреА, рдПрд╕, рдЖрдХрд╛рд░ (рдУрдВ)) рд╡рд┐рднрд┐рдиреНрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдФрд░ рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рд╕рдВрдпреЛрдЬрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

FileObjectCopy рдХреЗ рд▓рд╛рднрд╣реАрди рд╕рдВрд╕реНрдХрд░рдг, HITech C18 рд╕реЗ рдЕрд╕рдВрддреБрд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг
 ; *FileObject1 = *FileObject2; //     ;    MOVLW FileObject1 >> 8 MOVWF FSR1H MOVLW FileObject1 MOVWF FSR1L MOVLW FileObject2 >> 8 MOVWF FSR0H MOVLW FileObject2 MOVWF FSR0L ;  MOVLW sizeof(*FileObject) loop: MOVFF POSTINC0, POSTINC1 ;       DECFSZ WREG, F BRA loop 

рдареАрдХ рд╣реИ, рдХреЛрдб рдХреЛ рдлреБрд▓рд╛рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдмрд╣реБрдд рдХрдо рдЪреАрдЬреЗрдВ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдХреБрдЫ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ - рддреАрди рд▓рд╛рдЗрдиреЗрдВ, рдЬреИрд╕реЗ:

 int FSerror (void) { return FSerrno; } 

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореИрдХреНрд░реЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╢рдкрде рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ:

 #define FSerror() ( FSerrno ) 


5. рдХрдЯреНрдЯрд░рддрд╛ рдХреЗ рд╕рд╛рде рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ


рд╕рдмрд╕реЗ рдЕрдирдЬрд╛рдиреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг 1 рджреЗрдЦреЗрдВред) рдпрджрд┐ рдЖрдк рдЕрднреА рддрдХ рдкреВрд░реНрдг рдЬреНрдЮрд╛рди рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ рдФрд░ рджреЛ рдпрд╛ рддреАрди рдХрд╛рд░реНрдп рдЧрд▓рддреА рд╕реЗ рдЖрдкрдХреЗ рд╣рд┐рдВрджреВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдмрдиреЗ рд╣реБрдП рд╣реИрдВ - рдПрдХ "рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рд╡рд░рдг рдЯреЗрдореНрдкрд▓реЗрдЯ" рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдорд╛рд░реНрдЯ рд╢рдмреНрдж-рдЕрдиреБрднрд╛рдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЕрдиреБрднрд╛рдЧ рдореЗрдВ "рд╡рд┐рд╡рд░рдг" рд╕реВрдЪреА рдлрд┐рд░ рд╕реЗ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЛрдб рдХреА рдХрдИ рдЧреБрдирд╛ рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ "FSerror ()" рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЦрд╛рд▓реА рдЯреЛрдкреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддреА рд╣реИ
 /************************************************************************** Function: void func (void) Summary: Does a hard work Conditions: This function should not be called by the user Input: None Return Values: None Side Effects: None Description: This function will do <a hard work>, with <none> input parameter.... Remarks: Optimize code later **************************************************************************/ 


6. рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рдКрдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ, рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдкреНрд░рдмреЛрдзрди рдХреЗ рдорд╛рд░реНрдЧ рдкрд░ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рд▓рд╛рд╣ рд╣реИред рд▓реЗрдХрд┐рди рдЕрд╕рд▓реА рд╢рд┐рд╡ рдкреНрд░рд╢рдВрд╕рдХ рдЕрд░рд╛рдЬрдХрддрд╛ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рдЕрд╡рд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред PIC рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреА рд╣рд╛рд░реНрд╡рд░реНрдб рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рд╡рдХреНрд░рддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рд┐рдВрджреВ рдХреЛрдб рдЧреБрд░реБ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рд╕рдВрдХрд▓рдХ рдореЗрдВ рд╕реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╡рдХреНрд░рддрд╛ рдХреА рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВрдЧреЗред

рдХреЛрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗрдВ рдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рддрд╣рдд рднреА рд╕рдВрдХрд▓рд┐рдд рди рд╣реЛ рд╕рдХреЗ, рдФрд░ рд╕рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ #pragma рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХрдо рд╕реЗ рдХрдо рджреЛ рд╕рдВрдХрд▓рдХ рдФрд░ рддреАрди рд╕реЗ рдЪрд╛рд░ PIC рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдЧрд╛, рдХреЛрдб рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП 8 рдЧреБрдирд╛ рддрдХред

рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, PIC рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ рдореЗрдВ RAM рдФрд░ ROM рдкреЙрдЗрдВрдЯрд░реНрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдорд╛рдЗрдХреНрд░реЛ рдЯреЗрдХ рдореЗрдВ рд╣рд╛рдИ рдЯреЗрдХ рдпрд╛ "const rom char *" рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ "const char *" рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред ред рдЬреЛ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЙрдЪреНрдЪ рддрдХрдиреАрдХ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢реВрдиреНрдп, рджреВрд░ рдФрд░ рдХрд╛рдВрд╕реНрдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╕рднреА рдореЗрдореЛрд░реА рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд░реЛрдо рдФрд░ рд░реИрдо рджреЛрдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕реА рдХреЗ рдорд╛рдЗрдХреНрд░реЛрдЪрд┐рдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдпрд╣ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рд░реЛрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рд░реИрдо рдХреЗ рд╕рд╛рде - рд╢реБрджреНрдз рд▓рд╛рднред рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрднреА рднреА рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд░реИрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╡рд╣рд╛рдВ рд░реЛрдо рд╕реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ)ред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрд╢рд╛ рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдореНрдмрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рднреА рдХрд░реЗрдВ рдЬрдм рдЖрдкрдХрд╛ рдХреЛрдб рд╕рд╛рдорд╛рдиреНрдп рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдВрдмрд╛ рдФрд░ рдзреАрдорд╛ рд╣реЛред рдЕрд╕реЗрдВрдмрд▓рд░ рд╢рд╛рдВрдд рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЙрд╕ рдЦрд░рд╛рдм рдореВрд░реНрдЦрддрд╛ рдкрд░ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╡реЗ рдпрд╣ рднреА рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдВрднрд╡ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп


рдорд╛рдЗрдХреНрд░реЛрдЪрд┐рдк рдЪрдорддреНрдХрд╛рд░ рдХрд╛рд░реНрдп (рдЙрдирдХреА рд╕рд╛рдЗрдЯ рдЕрднреА рднреА рдЧреБрд▓рд╛рдм) рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ , рдореИрдВрдиреЗ рдПрд╕рдбреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдпрд╣рд╛рдВ рд▓реА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рд╣реИ , рдЬрд┐рд╕реЗ рдореИрдВ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ - рдЕрдзрд┐рдХ рд╕рдЯреАрдХ: "рдЕрдВрджрд░ рдЧрдбрд╝рдмрдбрд╝"ред

Source: https://habr.com/ru/post/In150982/


All Articles