рдЕрдкрдиреЗ рдХрдореНрдлрд░реНрдЯ рдЬрд╝реЛрди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛: рдиреЛрдбрдЬ рд╕реЗ рд▓реЗрдХрд░ рджрдмрдВрдЧ рддрдХ

2017 рдореЗрдВ, рдореИрдВрдиреЗ рдиреЛрдбрдЬ рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ - рдХреЗрдПрдирдЬреА рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдиреНрдЬрд╝рд┐рдПрд░рд▓ рдСрдмреНрдЬреЗрдХреНрдЯрд╕рд░реНрд╡рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рд▓реЗрдЦрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рд╣рдордиреЗ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛: рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рдбреЗрдЯрд╛ рдкреЗрд╢ рдХрд░рдирд╛, рд╕реЙрдХреЗрдЯреНрд╕ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпреВрдирд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯреНрд╕) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рд░реЗрдбрд┐рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдкрдм / рдЙрдк рдЪреИрдирд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ред


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


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


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


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рд╛рд░


KNX BAOS 830/832/838 рдореЙрдбреНрдпреВрд▓ UART рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ, ObjectServer рдкреНрд░реЛрдЯреЛрдХреЙрд▓ FT1.2 рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИред рдЖрд╡реЗрджрди /dev/ttyXXX рд╕рд╛рде рдПрдХ рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, PUB / SUB рдЪреИрдирд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ JSON рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рдПрдХ рд╣реА рдХрддрд╛рд░ рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ, рдпрд╛ Redis рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдиреМрдХрд░реА рдХреА рдХрддрд╛рд░ рдореЗрдВ (рдиреЛрдбрдЬ рдХреЗ рд▓рд┐рдП, рдордзреБрдордХреНрдЦреА-рдХрддрд╛рд░ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрддрд╛рд░реЗрдВ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИрдВред )ред


 queue.on("job", data => { //   : //  ,     //  ,      }); baos.on("data", data => { // ,  :    //  ,      //   -     pub/sub }); 

рдЧрддрд┐рд╢реАрд▓рддрд╛


JSON in js рдПрдХ рджреЗрд╢реА рдЪреАрдЬрд╝ рд╣реИ; рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдереЛрдбрд╝рд╛ рдЕрдВрддрд░ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреЗрдЯ get value рдореЗрдердб рд▓реЗрдВред рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд▓реЗрддрд╛ рд╣реИ - рджрд┐рдирд╛рдВрдХ рд╕рдВрдЦреНрдпрд╛, рдпрд╛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреАред


Js рдореЗрдВ, рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ:


 if (Array.isArray(payload)) { //     return values; } if (typeof id === "number") { //     return value; } throw new Error(" id"); 

рдбреА рдкрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рди:


 if (payload.type() == JSONType.integer) { //    } else if (payload.type() === JSONType.array) { //    } else { throw Errors.wrong_payload_type; } 

рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд░рд╕реНрдЯ-рдПрдХ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рдордп, рдпрд╣ JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рдордЭ рдХреА рдХрдореА рдереА рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдзреАрдорд╛ рдХрд░ рджрд┐рдпрд╛ред рдЧрддрд┐рд╢реАрд▓рддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдФрд░ рдмрд┐рдВрджреБ: рд╕рд░рдгрд┐рдпрд╛рдБред Js рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕ рддрдереНрдп рдХреА рдЖрджрдд рд╣реЛрддреА рд╣реИ рдХрд┐ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП push рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╕реА рдореЗрдВ, рдбрд╛рдпрдирд╛рдорд┐рд╕реНрдо рдХреЛ рдореЗрдореЛрд░реА рдХреЗ рдореИрдиреБрдЕрд▓ рдЖрд╡рдВрдЯрди рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдЪрдврд╝рдирд╛ рдЪрд╛рд╣рддрд╛ред Dlang, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдЧрддрд┐рд╢реАрд▓ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред


 ubyte[] res; //   -     res.length = 1000; //        res.length = count; //        1 

Js рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ UART рдбреЗрдЯрд╛ рдХреЛ Object рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдорд╛рди рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛, рдФрд░ рдЬреЛрдбрд╝ рдбреА рдореЗрдВ рдорд╣рд╛рди рд╣реИрдВред


 enum OS_Services { unknown, GetServerItemReq = 0x01, GetServerItemRes = 0x81, SetServerItemReq = 0x02, SetServerItemRes = 0x82, // ... } // ... struct OS_Message { OS_Services service; OS_MessageDirection direction; bool success; union { // union of possible service returned structs // DatapointDescriptions/DatapointValues/ServerItems/ParameterBytes OS_DatapointDescription[] datapoint_descriptions; OS_DatapointValue[] datapoint_values; OS_ServerItem[] server_items; Exception error; }; } 

рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде:


 ubyte mainService = data.read!ubyte(); ubyte subService = data.read!ubyte(); try { if (mainService == OS_MainService) { switch(subService) { case OS_Services.GetServerItemRes: result.direction = OS_MessageDirection.response; result.service= OS_Services.GetServerItemRes; result.success = true; result.server_items = _processServerItemRes(data); break; case OS_Services.SetServerItemRes: result.direction = OS_MessageDirection.response; // ... 

Js рдореЗрдВ, рдореИрдВрдиреЗ рдмрд╛рдЗрдЯ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛, рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рдПрдХ рдЦреЛрдЬ рдХреА рдФрд░ рд╕реЗрд╡рд╛ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛ рджреАред рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдкреНрд░рдЧрдгрдирд╛рдПрдВ, рдФрд░ рд╕рдВрдШ рдХрдбрд╝реЗ рджрд┐рдЦрддреЗ рд╣реИрдВред


рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


Node.js рдореБрдЭреЗ Buffer рдХрд╛ рдЕрдореВрд░реНрдд рдкрд╕рдВрдж рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: readUInt16BE(offset) рд▓рд┐рдП readUInt16BE(offset) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП - writeUInt16BE(value, offset) , рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдмрдлрд╝рд░реНрд╕ред Dlang рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдКрдиреА рднрдВрдбрд╛рд░ рдкреИрдХреЗрдЬ рд╢реБрд░реВ рдХрд┐рдПред рдЙрддреНрддрд░ std.bitmanip рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ 2 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП: ushort start = data.read!ushort() , рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП:ред result.write!ushort(start, 2); рджреВрд╕рд░рд╛ рддрд░реНрдХ рдХрд╣рд╛рдВ рд╣реИред


EE, рд╡рд╛рджреЗ, async / рдкреНрд░рддреАрдХреНрд╖рд╛


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


 while(!(_responseReceived || _resetInd || _interrupted)) { try { processIncomingData(); processIncomingInterrupts(); if (_resetInd || _interrupted) { _response.success = false; _response.service = OS_Services.unknown; _response.error = Errors.interrupted; _responseReceived = true; _ackReceived = true; } // ... // ... return _response; 

рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓реВрдк рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЛ рдЧреИрд░-рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╡рд┐рдзрд┐ processIncomingData() рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред processIncomingData() ред KNX рдореЙрдбреНрдпреВрд▓ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (KNX рдмрд╕ рдпрд╛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдФрд░ рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛) рднреА рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, processIncomingInterrupts() рд╣реИрдВрдбрд▓рд░ рдПрдХ reset рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдкрдм / рдЙрдк рдЪреИрдирд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рдЬреЗрдПрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреЛрдИ рд╡рд╛рджрд╛ рдпрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕рдВрд░рдЪрдирд╛ (рдЕрд░реНрдерд╛рддреН, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдХреНрд░рдо) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдерд╛, рд▓реЗрдХрд┐рди, рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рд╛рд░ рдХреЗ рдЕрднрд╛рд╡ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрдм рдХреБрдЫ await someAsyncMethod рдХрд╛ await someAsyncMethod рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ js рдХреЛрдб рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рднрд╛рд╖рд╛ рдХреА рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рдЕрдЪреНрдЫреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдорддрднреЗрдж


рдиреМрдХрд░реА рдХреА рдХрддрд╛рд░ред рдиреЛрдб.рдЬреЗрдПрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП bee-queue рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдбреА рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдЕрдиреБрд░реЛрдз рдХреЗрд╡рд▓ рдкрдм / рдЙрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдЕрдиреНрдпрдерд╛, рд╕рдм рдХреБрдЫ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИред


рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг 10 рдЧреБрдирд╛ рдХрдо рд░реИрдо рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХрд▓-рдмреЛрд░реНрдб рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


рд╕рдВрдХрд▓рди


Aarch64 рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ ldc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХрд▓рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


Ldc рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:


 curl -fsS https://dlang.org/install.sh | bash -s ldc 

рдПрдХ рдорджрд░рдмреЛрд░реНрдб рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рддреАрди рдореБрдЦреНрдп рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рдереЗ: рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдиреИрдиреЛрдкреАрдУрдЖрдИ рдХреЛрд░ 2, рдХреЗрдПрдирдПрдХреНрд╕ рдмрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЗрдПрдирдПрдХреНрд╕ рдмреАрдПрдУрдПрд╕ рдореЙрдбреНрдпреВрд▓ 830, рдФрд░ рдкреАрдУрдИ рдкрд╛рд╡рд░ рдХреЗ рд▓рд┐рдП рд╕рд┐рд▓реНрд╡рд░рдЯреЗрд▓ рдПрдЬреА 9205, рдЬрд┐рд╕ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдЧрдИ рдереАред


рдмреЛрд░реНрдб рдЙрдкрд╕реНрдерд┐рддрд┐


рдирд┐рд╖реНрдХрд░реНрд╖


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


рдЖрд░рд╛рдо рдХреНрд╖реЗрддреНрд░ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП (рдЬреИрд╕рд╛ рдХрд┐ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ): рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рднрдп рдХреА рдмрдбрд╝реА рдЖрдВрдЦреЗрдВ рдереАрдВ, рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдореБрдЭреЗ рдиреЛрдбрдЬ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддреА рдереАрдВред


рд╕реНрд░реЛрдд рдХреЛрдб рдЦреБрд▓реЗ рд╣реИрдВ рдФрд░ github.com/dobaos/dobaos рдкрд░ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ

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


All Articles