Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

Вся ΠΏΡ€Π°Π²Π΄Π° ΠΎΠ± ΠžΠ‘Π Π’ ΠΎΡ‚ Колина Уоллса. Π‘Ρ‚Π°Ρ‚ΡŒΡ #4. Π—Π°Π΄Π°Ρ‡ΠΈ, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста ΠΈ прСрывания

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π·Π°Π΄Π°Ρ‡ (Task Identifiers)


НСобходимо ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ Π² систСмС. Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ядра, Π½ΠΎ Π² Π·Π°Π΄Π°Ρ‡Π°Ρ… Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡŽΠ°Π½ΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π΅ΠΌΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠžΠ‘Π Π’ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΎΠ±Ρ‰ΠΈΠ΅ стратСгии:

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста


ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста β€” ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π­Ρ‚Ρƒ Ρ‚Π΅ΠΌΡƒ стоит ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ±Π»ΠΈΠΆΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста, являСтся Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠžΠ‘Π Π’.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π·Π°Π΄Π°Ρ‡Π°?


ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° β€” это квазинСзависимая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая Π΄Π΅Π»ΠΈΡ‚ процСссорноС врСмя с рядом Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠžΠ‘Π Π’. Но Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ.

Набор рСгистров


Π—Π°Π΄Π°Ρ‡Π° β€” это, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ рСгистра процСссора. Они Π»ΠΈΠ±ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π² рСгистры процСссора (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Π° являСтся Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ), Π»ΠΈΠ±ΠΎ хранятся Π³Π΄Π΅-Ρ‚ΠΎ Π΄ΠΎ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. Π’ идСальном ΠΌΠΈΡ€Π΅ Ρƒ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора Π±Ρ‹Π»ΠΎ Π±Ρ‹ нСсколько Π½Π°Π±ΠΎΡ€ΠΎΠ² рСгистров, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. ПодобноС Π±Ρ‹Π»ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ для особых случаСв. Много Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ Π² сСрии TI 9900 ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Texas Instruments Π±Ρ‹Π»ΠΎ мноТСство Π½Π°Π±ΠΎΡ€ΠΎΠ² рСгистров для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ задания, Π½ΠΎ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² основной памяти, Ρ‡Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. АрхитСктура SPARC (Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»Π°ΡΡŒ Π² дСсктопных систСмах Unix) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСство Π½Π°Π±ΠΎΡ€ΠΎΠ² рСгистров Π² Β«ΠΊΠΎΠ»ΡŒΡ†Π°Ρ… доступа» (ring structure), Π½ΠΎ количСство Π½Π°Π±ΠΎΡ€ΠΎΠ² всС Ρ€Π°Π²Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ.

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅


Π£ Π·Π°Π΄Π°Ρ‡ΠΈ, вСроятно, Π±ΡƒΠ΄Π΅Ρ‚ свой собствСнный стСк, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ для всСх Π·Π°Π΄Π°Ρ‡ Π² систСмС. Π­Ρ‚ΠΎ, наряду с рСгистрами, обСспСчиваСт Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ области памяти для хранСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

РСсурсы ΠΎΠ±Ρ‰Π΅Π³ΠΎ пользования


ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π»ΡŽΠ±Ρ‹Π΅ рСсурсы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ. Код ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΌ: Π»ΠΈΠ±ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΊΠΎΠ΄ Π·Π°Π΄Π°Ρ‡ΠΈ. НСобходимо ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ являСтся Ρ€Π΅Π΅Π½Ρ‚Π΅Ρ€Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ статичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ статичСскиС ΠΈΠ»ΠΈ просто Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны со стандартными Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΌΠΈ модулями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для встроСнного использования; Π² Π½ΠΈΡ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ€Π΅Π΅Π½Ρ‚Π΅Ρ€Π°Π±Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ совмСстноС использованиС Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа ΠΊ Π½ΠΈΠΌ. Π’ ΠΈΠ΄Π΅Π°Π»Π΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° Π·Π°Π΄Π°Ρ‡Π° являСтся Β«Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌΒ» Π΄Π°Π½Π½Ρ‹Ρ… Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Как ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ контСкст


Когда Π·Π°Π΄Π°Ρ‡Π° пСрСпланируСтся (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ пСрСстаСт Π±Ρ‹Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ), Π΅Π΅ Π½Π°Π±ΠΎΡ€ рСгистров Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π³Π΄Π΅-Ρ‚ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ. Π•ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄Π²Π΅ возмоТности:

ДинамичСскоС созданиС Π·Π°Π΄Π°Ρ‡


Основной аспСкт Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠžΠ‘Π Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠžΠ‘Π Π’ являСтся Π»ΠΈΠ±ΠΎ «статичСской», Π»ΠΈΠ±ΠΎ «динамичСской».

ΠŸΡ€ΠΈ использовании статичСской ΠžΠ‘Π Π’ всС опрСдСляСтся Π²ΠΎ врСмя сборки прилоТСния, Π² частности, количСство Π·Π°Π΄Π°Ρ‡ Π² систСмС. Π­Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ для встраиваСмых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

ДинамичСская ΠžΠ‘Π Π’ запускаСт ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ (которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ спСциализированной «основной» Π·Π°Π΄Π°Ρ‡Π΅ΠΉ), Π° Ρ‚Π°ΠΊΠΆΠ΅ создаСт ΠΈ удаляСт Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости. Π­Ρ‚ΠΎ позволяСт систСмС Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΌΡΡ трСбованиям ΠΈ являСтся Π±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΠΈΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ дСсктопной систСмы, которая Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. БтатичСский/динамичСский Π²ΠΈΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ примСняСтся ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ядра.

Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ динамичСскому созданию Π·Π°Π΄Π°Ρ‡


Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ коммСрчСских ΠžΠ‘Π Π’. Однако Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСбольшая Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нуТдаСтся Π² динамичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹. ΠžΡ‡Π΅Π½ΡŒ часто систСма запускаСтся, создаСт всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), Π° Π·Π°Ρ‚Π΅ΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° большС Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ создаСт ΠΈ Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ΄Π° прилоТСния. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания динамичСских Π·Π°Π΄Π°Ρ‡ стало Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Один поставщик Π²Π½Π΅Π΄Ρ€ΠΈΠ» Π΅Π΅, всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ послСдовали Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ стандарт OSEK / VDX Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ статичСской Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ довольно слоТным прилоТСниям. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этих Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ являСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ OSEK / VDX с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ€Π°ΠΏΠΏΠ΅Ρ€Π° (wrapper), ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ слоя ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ (динамичСской) ΠžΠ‘Π Π’.

ΠŸΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ динамичСского создания Π·Π°Π΄Π°Ρ‡


БущСствуСт нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с динамичСским Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ бСспокойство.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, услоТняСтся систСма, Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для структур Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π·Π°Π΄Π°Ρ‡ΠΈ (TCB), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… списков, Ρ‡Ρ‚ΠΎ Π²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌ, связанным с объСмом памяти.
ВсС Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΠžΠ—Π£. Π­Ρ‚ΠΎ нСэффСктивно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ большая Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ просто постоянными элСмСнтами Π΄Π°Π½Π½Ρ‹Ρ…, скопированными ΠΈΠ· ΠŸΠ—Π£. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π° процСссорах Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня (ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ…) ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π΄ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти.

ВСроятно, наибольшСС бСспокойство Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ нСпрСдсказуСмого Π΄Π΅Ρ„ΠΈΡ†ΠΈΡ‚Π° рСсурсов, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ нСвозмоТности создания Π½ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡΡƒΡ‚ΡŒ систСмы Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π΅Π΅ прСдсказуСмости, это Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΡΠ²Π»ΡΡ‚ΡŒ ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ использовании создания динамичСских Π·Π°Π΄Π°Ρ‡ (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²).

ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡ


Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ встраиваСмая систСма Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π±Π΅Π· использования ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ, Π½ΠΎ это Π½Π΅Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎ.

ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡ ΠΈ ядро


Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠžΠ‘Π Π’, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ (ISR) дСлаСтся ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³Ρ‡Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Β«ΠΊΡ€Π°ΡΡ‚ΡŒΒ» минимальноС количСство процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρƒ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Часто устройство ΠΌΠΎΠΆΠ΅Ρ‚ просто ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ, Π° любая трСбуСмая Π·Π°Π΄Π°Ρ‡Π° Π±ΡƒΠ΄Π΅Ρ‚ поставлСна Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Помимо этого, Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΠΎ прСрываниях ΠΈ ΠΈΡ… взаимодСйствии с ядрами, просто ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ сильно Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΡŽΡ‚ΡΡ. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠžΠ‘Π Π’ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ прСрывания Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ ядру, ΠΈ программисту придСтся ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ слишком Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π·Π°Π΄Π°Ρ‡, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ½ΠΎΠ³ΠΎ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² ISR. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠžΠ‘Π Π’ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всю подсистСму ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ. Ни ΠΎΠ΄ΠΈΠ½ ΠΈΠ· описанных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π½Π΅ являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, ΠΎΠ½ΠΈ просто Ρ€Π°Π·Π½Ρ‹Π΅.

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ контСкста


ISR всСгда Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ «контСкст», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ подвСргался Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ вычислСний ISR. Π’ систСмС, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±Π΅Π· ΠžΠ‘Π Π’, это просто вопрос сохранСния Π»ΡŽΠ±Ρ‹Ρ… рСгистров, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ISR (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² стСкС), ΠΈ ΠΈΡ… восстановлСния ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ. НСкоторыС процСссоры ΠΈΠΌΠ΅ΡŽΡ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ стСк ISR, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ стСк, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ΄ прилоТСния.

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠžΠ‘Π Π’, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ стСк, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ISR, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ «заимствован» ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΈΠ»ΠΈ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стСк, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ для ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ. НСкоторыС ядра Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, Π΄Π°ΠΆΠ΅ Ссли сам процСссор Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ стСк ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ. Битуация услоТняСтся, Ссли ISR Π΄Π΅Π»Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ влияСт Π½Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π·Π°Π΄Π°Ρ‡. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ вСрнСтся ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ ΠΎΡ‚ Ρ‚ΠΎΠΉ, которая Π±Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅.

ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡ ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ


БущСствуСт нСсколько ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π², ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ΄ выполнСния ISR ΠΌΠΎΠΆΠ΅Ρ‚ произвСсти Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅:

Π’Π°ΠΊΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ (Tick Clock)


Π’ΠΎ встраиваСмых систСмах часто встрСчаСтся ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ пСриодичСского Β«Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°Β» (ΠΊΠ²Π°Π½Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ). Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠžΠ‘Π Π’ ΠΎΠ½ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° являСтся ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ, Π° Π΅Π³ΠΎ отсутствиС просто ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… слуТб. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдоставляСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста ΠΈ простой Π²Ρ‹Ρ‚Π΅ΡΠ½ΡΡŽΡ‰ΠΈΠΉ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ для CortexM

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

Π‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π³ΠΎΠ΄ΠΎΠΌ курсовыС для ΠΌΠΎΠΈΡ… студСнтов становятся всС объСмнСС. НапримСр, Π² этом Π³ΠΎΠ΄Ρƒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π·Π°Π΄Π°Π½ΠΈΠΉ Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° мСтСостанции, вСдь Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»Π΅Π½ΠΈΠ²Ρ‹ΠΉ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ мСтСостанции, Π° студСнты ΠΎΠ½ΠΈ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π½Π΅ Π»Π΅Π½ΠΈΠ²Ρ‹Π΅, поэтому Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΅Ρ‘ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π•Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ быстро Π½Π°ΠΊΠΈΠ΄Π°Ρ‚ΡŒ Π² Cube ΠΈΠ»ΠΈ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½Π° Ардуино, Π½ΠΎ Π·Π°Π΄Π°Ρ‡Π° курсового Π½Π΅ Π² этом. Основная Π·Π°Π΄Π°Ρ‡Π° β€” ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, с нуля Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с модулями ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ПО ΠΈ, собствСнно, Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π½Π° Π‘++, начиная ΠΎΡ‚ рСгистров ΠΈ заканчивая Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ РВОБ. ΠšΠΎΠΌΡƒ интСрСсно, здСсь ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΌΡƒ курсовому

Π’Π°ΠΊ Π²ΠΎΡ‚, появилась нСбольшая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, бСсплатный IAR позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ ПО Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 30 ΠΊΠ‘Π°ΠΉΡ‚. А это ΡƒΠΆΠ΅ Π²ΠΏΡ€ΠΈΡ‚Ρ‹ΠΊ ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ курсового Π² Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. Анализ ΠΊΠΎΠ΄Π° студСнтов выявил, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 1/4 Ρ‡Π°ΡΡ‚ΡŒ ΠΈΡ… прилоТСния Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ FreeRtos β€” ΠΎΠΊΠΎΠ»ΠΎ 6 ΠΊΠ‘Π°ΠΉΡ‚, хотя для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Ρ‚Π΅ΡΠ½ΡΡŽΡ‰ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΡƒ ΠΈ управлялку Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ Π±Ρ‹, навСрноС… Π΄Π° Π±Π°ΠΉΡ‚ 500 ΠΏΡ€ΠΈΡ‡Π΅ΠΌ вмСстС с 3 Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ (свСтодиодными ΠΌΠΎΡ€Π³ΡƒΠ½Ρ‡ΠΈΠΊΠ°ΠΌΠΈ).

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ посвящСна Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠžΡ‡Π΅Π½ΡŒ ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ(ΠΎΠ½ ΠΆΠ΅ SST), описанный Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π°ΠΆ 2006 Π³ΠΎΠ΄Π° ΠΈ сСйчас ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ Quantum Leaps Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅ Qp framework.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ядра ΠΎΡ‡Π΅Π½ΡŒ просто Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚, ΠΈ ΠΎΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… студСнтами (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ 5 ΠΊΠ‘Π°ΠΉΡ‚ Π² своС распоряТСниС.

Π― ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ самому. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ сильно ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ, Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста Π½Π° CortexM0 Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ модуля с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ.

ВсС ΠΊΡ‚ΠΎ заинтСрСсовался ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ контСкст, Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

НСбольшоС отступлСниС

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ я Ρ…ΠΎΡ‚Π΅Π» ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π² «Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ…» РВОБ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ сдСлан Π² ΠŸΡ€ΠΎΡΡ‚ΠΎΠΌ ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ΅ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° Π½Π° ядрС CortexM4, Π½ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠ»ΡƒΡ‡Π°Π»Π°ΡΡŒ довольно большой ΠΈ нСпонятной, поэтому я Ρ€Π΅ΡˆΠΈΠ» Π΅Ρ‘ ΡƒΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ (Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° стала понятнСС, Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ мСньшС, хотя всС Ρ€Π°Π²Π½ΠΎ большой). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я Π²Π²Π΅Π» нСбольшиС ограничСния ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ условия:

И хотя Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈ Π½Π° CortexM3 ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° CortexM4 (с ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ FPU Π±Π»ΠΎΠΊΠΎΠΌ), для Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ внСсти нСбольшиС измСнСния Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ PendSV ΠΈ SVC ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎ-ΠΌΠΎΠ΄Π½ΠΎΠΌΡƒ, Π½Π° Π‘++17, Π±Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, интСрфСйсов, создания Π·Π°Π΄Π°Ρ‡ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅ΠΉ «Π΅Ρ€ΡƒΠ½Π΄Ρ‹», Π° ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° соmpile-time, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всё-всё Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Π° ΠΏΠΎ возмоТности ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ Π½Π° этапС компиляции.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

БобствСнно, Π² качСствС ввСдСния Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ Ρ†ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· Π²Ρ‹ΡˆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ 2006 Π³ΠΎΠ΄Π°

Π‘ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ встроСнныС систСмы ΠΆΠ΄ΡƒΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ события, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ, готовности АЦП ΠΈΠ»ΠΈ получСния ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…. ПослС распознавания события систСмы Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΡŽΡ‚, выполняя ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ вычислСния. Π­Ρ‚Π° рСакция ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ модулями ΠΈΠ»ΠΈ созданиС Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹Ρ… событий бизнСс Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ дСйствия ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ событий Ρ‚Π°ΠΊΠΈΠ΅ систСмы пСрСходят Π² спящСС состояниС Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ события.
Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ RTOS для встроСнных систСм Π²Ρ‹Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ программистов ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти простыС, дискрСтныС Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° события, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹Π΅ бСсконСчныС Ρ†ΠΈΠΊΠ»Ρ‹.

По Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ счСту, вся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° β€” это ΠΎΠ΄ΠΈΠ½ большой ΠΈΠ»ΠΈ нСбольшой ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚. И наши ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ Π±Ρ€Π°Ρ‚ΡŒΡ Π² ΠΌΠΈΡ€Π΅ ПО ΠΏΠΎΠ΄ «Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅» ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы Π΄Π°Π²Π½ΠΎ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΡƒΡ‡Ρƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ² β€” ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹, Ρ„ΠΈΠ±Π΅Ρ€Ρ‹ β€” Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅.
Π’ ПО ΠΆΠ΅ для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· приходится Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ совсСм Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° событий ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΊ Π·Π°Π΄Π°Ρ‡Π΅, со всСми Π²Ρ‹Ρ‚Π΅ΠΊΠ°ΡŽΡ‰ΠΈΠΌΠΈ (Π΄ΠΎΠ»Π³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста, созданиС Π½ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ с большими стСками)), Π»ΠΈΠ±ΠΎ Π³ΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ своС, Π»ΠΈΠ±ΠΎ ΠΏΠΎ старинкС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ switchΠΎΠΌ.

Π’ случаС ΠΆΠ΅ с SST ядро ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΎΡ‡Π΅Π½ΡŒ просты ΠΈ Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ нСсколькими стСками. И основноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ этого ядра являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ (Run to completion), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄ΠΈΠ½ стСк.

А это кстати Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ· «Π²Π΅Ρ‡Π½Ρ‹Ρ…» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с бСсконСчным Ρ†ΠΈΠΊΠ»ΠΎΠΌ, вСдь бСсконСчный Ρ†ΠΈΠΊΠ» Π² Π‘++ это Π²ΠΎΠΎΠ±Ρ‰Π΅-Ρ‚ΠΎ Undefined/Unspecified Behaviour (UB).
Бпасибо Dubovik_a Π·Π° ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅: Π½Π΅ всС бСсконСчныС Ρ†ΠΈΠΊΠ»Ρ‹ UB, Π² соотвСтствии со стандартом, Ссли Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ниТСсказанного, Ρ‚ΠΎ это ΡƒΠΆΠ΅ Π½Π΅ UB

Но Π² любом случаС, Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ² β€” Π½Π΅Ρ‚ UB, Π° Π·Π°ΠΎΠ΄Π½ΠΎ сдСлаСм наш ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π±Π΅Π· Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ указатСля, Ρ‡Ρ‚ΠΎΠ±Ρ‹, Π΅Ρ‰Π΅ мСньшС UB ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ»ΠΈ Π² ΠΊΠΎΠ΄ (Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° Π‘++ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±Π΅Π· UB, Π½ΠΎ Π²Π΄Ρ€ΡƒΠ³).

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ, я Ρ…ΠΎΡ‚Π΅Π» Π²Π½Π°Ρ‡Π°Π»Π΅ Π½Π°ΠΉΡ‚ΠΈ простоС объяснСниС, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ контСкст Π½Π° CortexM Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ Π½Π° русском языкС, ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π½Π΅Π΅ понятного ΠΈ простого, нашСл Π²ΠΎΡ‚ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ. Но я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ заглядывания Π² руководство ΠΏΠΎ ядру CortexM3 ΠΈΠ· этого тСкста ΠΌΠΎΠΆΠ½ΠΎ сразу всС ΠΏΠΎΠ½ΡΡ‚ΡŒ.

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π° Π₯Π°Π±Ρ€Π΅: Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ context switch Π½Π° STM32.
Но Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ эти ΡΡ‚Π°Ρ‚ΡŒΠΈ, всС Ρ€Π°Π²Π½ΠΎ всС выглядит ΠΊΠ°ΠΊ рисованиС совы.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Π½Π°Ρ‡Π°Π»Π΅ разбСрСмся с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста, ΠΊΠ°ΠΊ это Π²ΠΎΠΎΠ±Ρ‰Π΅ происходит. И ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ займСмся ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для создания ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° понятий.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ CortexM ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ²

Π£ CortexM Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠ°Π½Π΄:

Π’Π°ΠΊ Π²ΠΎΡ‚ наш CortexM0 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Thumb Π½Π°Π±ΠΎΡ€, Π½Ρƒ Π½Π΅ считая ΠΏΠ°Ρ€ΠΎΡ‡ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ· Thumb-2, Π½ΠΎ Π·Π°ΠΊΡ€ΠΎΠ΅ΠΌ Π½Π° это Π³Π»Π°Π·Π°.
На всякий случай, CortexM3 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Thumb-2 ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

Π Π΅ΠΆΠΈΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСссора

Cortex-M ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹: Ρ€Π΅ΠΆΠΈΠΌ процСсса (Thread) ΠΈ Ρ€Π΅ΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° (Handle):

ΠŸΡ€ΠΎ стСки ΡƒΠ·Π½Π°Π΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅, Π° ΠΏΠΎΠΊΠ° это вся информация ΠΏΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста. И Π΄Π°, ΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ основной стСк MSP.

CortexM0 рСгистры

CortexM0 ΠΈΠΌΠ΅Π΅Ρ‚ 16 рСгистров ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

И ряд рСгистров ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ назначСния:

РСгистр указатСля стСка (r13/SP)

Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стСк, Π΅ΡΡ‚ΡŒ мноТСство статСй Π½Π° эту Ρ‚Π΅ΠΌΡƒ. Но для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° CortexM Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ нСсколько ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ².

И хотя Π² нашСй Π·Π°Π΄Π°Ρ‡Π΅ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ стСк процСсса, для ΠΎΠ±Ρ‰Π΅Π³ΠΎ образования всС Ρ‚Π°ΠΊΠΈ ΡƒΡ‚ΠΎΡ‡Π½ΡŽ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Handle ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ SP всСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° MSP, Π° Π²ΠΎΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Thread ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π½Π° основной стСк MSP, Ρ‚Π°ΠΊ ΠΈ Π½Π° стСк процСсса PSP. Какой ΠΈΠΌΠ΅Π½Π½ΠΎ сСйчас стСк ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CONTROL рСгистра.

Выходя ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° Handle ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ стСк ΡƒΠΊΠ°Π·Π°Π² волшСбноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ ΠΈΠ· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π² рСгистрС связи. ВстрСчаСм рСгистр связи.

РСгистр связи (r14/LR)

Π£ рСгистра связи Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Одна прямая β€” Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ адрСса Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°:

И вторая Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ваТная:

EXC_RETURNΠ§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚
0xFFFFFFF1ВозвращаСмся Π² Handle Ρ€Π΅ΠΆΠΈΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ основной стСк MSP
0xFFFFFFF9ВозвращаСмся Π² Thread Ρ€Π΅ΠΆΠΈΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ основной стСк MSP
0xFFFFFFFDВозвращаСмся Π² Thread Ρ€Π΅ΠΆΠΈΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ стСк процСсса PSP

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² ARM, это Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ бСзмятСТноС Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкции Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΆΠ΅ Π²Ρ‹Π·Π²Π°Π½ΠΎ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы, Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ°ΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅, ошибка выравнивания ΠΈΠ»ΠΈ ошибка систСмы памяти.
Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±Ρ‹Π²Π°ΡŽΡ‚ синхронныС ΠΈ асинхронныС. ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡ ΡΠ²Π»ΡΡŽΡ‚ΡΡ асинхронными ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ. А Π²ΠΎΡ‚ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ошибки связанныС с доступом ΠΊ памяти ΠΈΠ»ΠΈ выполнСния инструкций β€” синхронныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

И Π² Ρ†Π΅Π»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ Π΄Π²Π΅ основныС стадии ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

ΠœΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π² ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ происходит Π½Π΅ΠΊΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ событиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ связано с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ

Π­Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для Π²Ρ…ΠΎΠ΄Π° Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌ выполняСт ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. И Π² ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ состояния Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎ состояния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΌ.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΉΠΌΠ΅ΠΌ ΠΊΠ°ΠΊ происходит Π²Ρ…ΠΎΠ΄ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π½ΠΎ для ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹ ΠΏΡ€Π΅ΠΆΠ΄Π΅, посмотрим Π½Π° ΠΊΠ°Π΄Ρ€ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

ΠšΠ°Π΄Ρ€ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

ΠšΠ°Π΄Ρ€ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (Exception Frame). Π’Π°ΠΊ Π²ΠΎΡ‚, это Π½Π°Π±ΠΎΡ€ рСгистров, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ автоматичСски ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ восстанавливаСтся ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠšΠ°Π΄Ρ€ выглядит Ρ‚Π°ΠΊ:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкстаВ ΠΊΠ°Π΄Ρ€Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ рСгистры R0-R3, R12 ΠΈ LR, PC, xPSR.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ рСгистры R4-R11 Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ (Π² соотвСтствии с C/C++ standard Procedure Call Standard for the ARM Architecture) Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ поэтому Π½Π΅ входят Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€.

Π’Ρ…ΠΎΠ΄ Π² Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ для понимания Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π²ΠΎ врСмя вхоТдСния ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· прСрывания.
Π’Ρ…ΠΎΠ΄ Π² ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° появляСтся ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰Π΅Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΈ:

Когда ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ½ сохраняСт ΠΊΠ°Π΄Ρ€ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² стСкС. Π­Ρ‚Π° опСрация ΠΏΠΎ английски называСтся «stacking». По русски Π·Π²ΡƒΡ‡ΠΈΡ‚ странно, поэтому Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ. ΠŸΡ€ΠΈ этом ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСка пСрСмСщаСтся Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°Π΄Ρ€Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

Как Π±Ρ‹Π»ΠΎ ΡƒΠΆΠ΅ сказано Π²Ρ‹ΡˆΠ΅, стСк ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ содСрТит ΠΊΠ°Π΄Ρ€ ΠΈΠ· 8 слов Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ подчиняСтся простым ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ.

Π‘Ρ‚Π΅ΠΊ Π²Ρ‹Ρ€Π°Π²Π½Π΅Π½ ΠΏΠΎ 8 Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠΌΡƒ адрСсу (Π΄Π²ΡƒΠΌ словам).

Π‘Ρ‚Π΅ΠΊ содСрТит адрСс Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ β€” адрСс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ инструкции Π² ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½ΠΎΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ восстанавливаСтся ΠΈ загруТаСтся Π² PC Π²ΠΎ врСмя Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ прСрывания считываСт стартовый адрСс ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΈ ΠΊΠΎΠ³Π΄Π° «stacking» Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½, запускаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° этого прСрывания. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ записываСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° β€” EXC_RETURN Π² рСгистр LR, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠΆΠ΅ выяснили этот ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ указатСля стСка (MSP ΠΈΠ»ΠΈ PSP) ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π±Ρ‹Π» ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π΄ΠΎ Π²Ρ…ΠΎΠ΄Π° Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Если Π²ΠΎ врСмя Π²Ρ…ΠΎΠ΄Π° Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π±ΠΎΠ»Π΅Π΅ высоко-ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΎΠ³ΠΎ прСрывания, процСссор запускаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ автоматичСски измСняСт статус ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅.

Если Π±ΠΎΠ»Π΅Π΅ высокоприоритСтноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π²ΠΎ врСмя Π²Ρ…ΠΎΠ΄Π° Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ статус Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΡƒΠ΄Π΅Ρ‚ «ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅». Π’Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ «ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΏΡ€ΠΈΠ±Ρ‹Ρ‚ΠΈΠ΅».

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ ΠΈ всС, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°Π΄ΠΎ ΠΈΠ· Π½Π΅Π³ΠΎ Π²Ρ‹ΠΉΡ‚ΠΈ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ происходит ΠΊΠΎΠ³Π΄Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ находится Π² Handle Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ выполняСтся ΠΎΠ΄Π½Π° ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… инструкций, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ PC Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ EXC_RETURN Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ :

ΠœΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ сохраняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ EXC_RETURN Π² LR ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ полагаСтся Π½Π° это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ³Π΄Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π‘ΠΈΡ‚Ρ‹[31:4]

Π‘ΠΈΡ‚Ρ‹[3:0]

ΠŸΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ ΠΈΠ· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ происходит обратная опСрация β€” unstacking, Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ странно пСрСводящаяся Π½Π° русский язык. ΠŸΡ€ΠΈ этом ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π² PC адрСс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ инструкции ΠΈΠ· ΠΊΠ°Π΄Ρ€Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈ собствСнно ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° Π΅Ρ‘ исполнСниС.

Π― Ρ‚ΡƒΡ‚ попытался Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π»ΠΈΠΏΠ°ΡŽΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ ΠΆΠ΅ 2-часову Ρ‚Ρ€ΡƒΠ΄Ρƒ зря.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

Π’ «Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ…» RTOS, идСя Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ PSP стСк использовался ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, Π° MSP стСк использовался ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈ ядром. Когда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, контСкст Π·Π°Π΄Π°Ρ‡ΠΈ помСщаСтся Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСка PSP, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° использованиС MSP для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны это Ρ…ΠΎΡ€ΠΎΡˆΠΎ β€” это ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ стСками ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈ Π·Π°Π΄Π°Ρ‡, ваша Π·Π°Π΄Π°Ρ‡Π° всСгда Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со стСком PSP ΠΈ доступа ΠΊ MSP Π½Π΅Ρ‚.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста Π½Π΅ Ρ‚Π°ΠΊΠΎΠ΅ быстроС, Π° ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ каТдая Π·Π°Π΄Π°Ρ‡Π° ΠΈΠΌΠ΅Π΅Ρ‚ свой стСк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ с запасом, Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π½Π΅ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹ΠΉ расход ΠžΠ—Π£.

Π˜Ρ‚Π°ΠΊ, контСкст Ρƒ нас Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ. ΠŸΡƒΡΡ‚ΡŒ это Π±ΡƒΠ΄Π΅Ρ‚ любоС событиС происходящСС Π² ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ, ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄Ρƒ символа Π² UART, ΠΈΠ»ΠΈ Π»ΡŽΠ±ΠΎΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ событиС ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈ запустит Π΅Ρ‘, ΠΏΡ€ΠΈ этом вытСснив ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹Π΅.

Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ события ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ, Ρ‚.Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Handle, Π° Π²ΠΎΡ‚ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Thread. Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ?

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· любого прСрывания Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ гСнСрируСтся событиС для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ PendSV, ΠΈ ΡƒΠΆΠ΅ Π² Π½Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ магию ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ контСкста: Π² ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π’.Π΅. вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ, ΠΌΡ‹ сгСнСрируСм ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ PendSV ΠΈ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Π½Π΅Π³ΠΎ запустим ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Ρ‡.

Π‘Ρ€Π°Π·Ρƒ ΠΆΠ΅ послС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· прСрывания, ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π²ΡˆΠ΅Π³ΠΎ событиС для ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΌΡ‹ ΠΏΠΎΠΏΠ°Π΄Π΅ΠΌ Π² PendSV ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹:

На послСднСм ΠΏΡƒΠ½ΠΊΡ‚Π΅ Π΄Π°Π²Π°ΠΉΡ‚Π΅ остановимся ΠΏΠΎΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Π΄Π° ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Π’Ρ‹Π·ΠΎΠ² ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°

Нам Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΈΠ· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ PendSV, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ запустился Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Thread, Π½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² этот Ρ€Π΅ΠΆΠΈΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· PendSV.
Как Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ сохранил ΠΊΠ°Π΄Ρ€ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° стСкС.
А Ссли ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСка Ρ‚Π°ΠΊ ΠΈ останСтся Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ этого ΠΊΠ°Π΄Ρ€Π°, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°, Ρ‚.Π΅. Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· прСрывания, этот ΠΊΠ°Π΄Ρ€ ΠΏΡ€ΠΎΠΏΠ°Π΄Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ сдСлаСтся unstacking.

Π—Π½Π°Ρ‡ΠΈΡ‚ Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠ°Π΄Ρ€ΠΎΠΌ, Π½Π΅ испортив ΠΏΡ€ΠΈ этом ΠΊΠ°Π΄Ρ€ вытСснСнной Π·Π°Π΄Π°Ρ‡ΠΈ. Π’.Π΅. ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ стСка Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (Π° ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ стСк растСт Π² сторону ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ адрСсов, Ρ‚ΠΎ ΡƒΠ±Π°Π²ΠΈΡ‚ΡŒ) стСк Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ°Π΄Ρ€Π°, Π½ΠΎ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для Π²Ρ‹Π·ΠΎΠ²Π° ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°.

И Π² этом ΠΊΠ°Π΄Ρ€Π΅ Π² PC ΠΌΡ‹ ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ адрСс ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°, Π² LR адрСс Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° послС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°, Π° Π² xPSR Π½Π°Π΄ΠΎ поставим 1 Π² Π±ΠΈΡ‚ T, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ Thumb, Π° Ρ‚ΠΎ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ошибкС выполнСния инструкций.

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΌΡ‹ Ρ€ΡƒΠΊΠ°ΠΌΠΈ помСняСм наш стСк Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ PendSV для Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» свою Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ, Π³Π΄Π΅ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ прСрывания, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅. Π’.Π΅. ΠΌΡ‹ ΠΎΠΏΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈ Π² Π½Π΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΊΠ°Π΄Ρ€ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π΅. И ΡƒΠΆΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρƒ нас сдСлаСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ unstacking с ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π½Π° ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ.

Для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания, я нарисовал Ρ†Π΅Π»ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ошибки, Π½ΠΎ чСстно старался ΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ посыл ΠΏΠ΅Ρ€Π΅Π΄Π°Π» Π²Π΅Ρ€Π½ΠΎ.

Опа ΠΈ всС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒβ€¦ Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΠΆΠ΅ самоС Π½Π° lisp (Π½Π΅ нашСл, ΠΊΠ°ΠΊ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° ассСмблСрС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ отобраТался, ΠΈ Π±Ρ‹Π»ΠΈ Π²ΠΈΠ΄Π½Ρ‹ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, поэтому вставил Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π° lisp) ассСмблСрС.

ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ

Ну Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим, ΠΊΠ°ΠΊ устроСн ΠžΠΎΠΎΡ‡Π΅Π½ΡŒ простой ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ насколько ΠΎΠ½ простой β€” сразу ΠΏΠΎΠΊΠ°ΠΆΡƒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, ΠΎΠ½Π° ΠΌΠ½ΠΎΠ³ΠΎ прояснит: ВсСго 4 ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ скрыто ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΡ‚ Π³Ρ€Π΅Ρ…Π° подальшС.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

Как Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, вся ΡΡƒΡ‚ΡŒ Ρ‚ΡƒΡ‚ Π·Π°Π»ΠΎΠΆΠ΅Π½Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Schedule() ΠΈ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½ΠΎ простым. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ сдСлаСм Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ опрСдСлялся Π΅Ρ‘ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² спискС Π·Π°Π΄Π°Ρ‡. Ну Ρ‚. Π΅., Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ссли ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ Π±Ρ‹ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‚Π°ΠΊ:

Π’ΠΎ это Π±Ρ‹ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ HighPriorityTask β€” самый высокий, Π° idleTask β€” самый Π½ΠΈΠ·ΠΊΠΈΠΉ. Π­Ρ‚ΠΎ Π½Π°ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ ΠΊΡƒΡ‡Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с сортировкой списка Π·Π°Π΄Π°Ρ‡. Π—Π°Π΄Π°Ρ‡ΠΈ всСгда располоТСны Π² порядкС ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°.

Π’ΠΎΠ³Π΄Π° наш ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ совсСм-совсСм простым.

Ѐункция запуска Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‚ΠΎΠΆΠ΅ проста ΠΊΠ°ΠΊ ΠΏΡΡ‚ΡŒ ΠΊΠΎΠΏΠ΅Π΅ΠΊ:

Как Π²ΠΈΠ΄Π½ΠΎ, Π·Π°Π΄Π°Ρ‡Π° Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ OnEvent().
И Π΄Π°, ΠΌΡ‹ ΠΆΠ΅ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, поэтому Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· ссылки, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ шаблона.

И ΠΎΡ‡Π΅Π½ΡŒ просто пробСгаСмся ΠΏΠΎ этому списку, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π²ΡƒΡŽ (ΡΠ°ΠΌΡƒΡŽ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΡƒΡŽ) Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ:

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Π½ΠΈΠΊΠ°ΠΊΠΈΡ… массивов ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ, Π° поэтому Π½Π΅ сущСствуСт Π΄Π°ΠΆΠ΅ тСорСтичСской возмоТности Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ массива

БобствСнно ΠΈ запускаСм Π½Π° исполнСниС ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ:

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‡Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ Π΅ΠΉ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΡΠΈΠ³Π½Π°Π»ΠΈΡ‚ΡŒ, Π½Ρƒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, случился Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ канального уровня Ρƒ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° (Π² Modbus RTU Π°ΠΆ Π΄Π²Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π½Π° 3,5 символа ΠΈ 1,5 символ) ΠΈ Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ событиС ΠΏΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΡƒ сообщСния β€” Π΄Π° Ρ€Π°Π΄ΠΈ Π±ΠΎΠ³Π° β€” посылаСм ΠΈΠ· Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π·Π°Π΄Π°Ρ‡Π΅, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΏΡ€ΠΈΠ΅ΠΌΠ° сообщСния, событиС.

Π’Ρ‹ΡˆΠ΅ я ΡƒΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π», Ρ‡Ρ‚ΠΎ нСльзя просто Ρ‚Π°ΠΊ Π²Π·ΡΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΈΠ· прСрывания, Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ· этого прСрывания ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π²Ρ‹ΠΉΡ‚ΠΈ Π²Π½Π°Ρ‡Π°Π»Π΅, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ β€” ΠΈ это ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° PendSV.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я сдСлал события ΠΎΡ‚ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ построил Π½Π° основС систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅:

А Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ просто постят события

Π—Π°Π΄Π°Ρ‡ΠΈ

Π—Π°Π΄Π°Ρ‡ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ TaskBase. Π’ Π½Π΅Π³ΠΎ я Π·Π°ΠΏΠΈΡ…Π½ΡƒΠ» Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ событиС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π±Ρ‹Π» Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ статичСский, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π±Ρ‹Π» Ρ€Π°Π·Π½Ρ‹ΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ» странно-рСкурсивный шаблон.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

Π’ ΠΊΠΎΠ΄Π΅ это Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊ:

Π—Π°Π΄Π°Ρ‡ΠΈ сами просто Ρ‚Π°ΠΊ Π½Π΅ запустятся, Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΈΠΌ запостил событиС, Π° Ρ‚Π°ΠΊΠΈΠΌΠΈ сущностями Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹. Π˜Ρ… Π½Π°Π΄ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ.

Ну ΠΈ всС запускаСм.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста

.
ВсС Π»Π΅ΠΆΠΈΡ‚ Π² Github Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. МоТно просто ΠΏΠ°ΠΏΠΊΡƒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² Clion.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

4 Π·Π°Π΄Π°Ρ‡ΠΈ моргания свСтодиодом + сам ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 564 Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π° + 14 Π±Π°ΠΉΡ‚ константных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ 17 Π±Π°ΠΉΡ‚ ΠžΠ—Π£ Π±Π΅Π· ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

Modulero codero datarw data
taskerschedule.cpp5081417
interrupthandlers.s5600

ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° 120 Π±Π°ΠΉΡ‚.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *