| Автор |
Съобщение |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
 CCS complier въпрос?
След компилиране на програмата ми дава следния уорнинг : Interrupts disabled during call to prevent re-entrancy: . В някой случаи на програмата това re-entrancy е наложително. Как да го накарам да не спира интеръптите. Те са много важни за действието на цялото устройство. Пробвах в самата функция да постава enable_interrupts() ама не ще. Помогнете....
|
| Нед Сеп 20, 2009 8:17 am |
|
 |
|
fan
Ранг: Почетен член
Регистриран на: Съб Окт 13, 2007 12:12 pm Мнения: 712
|
Това съобщение ти го дава, понеже извикваш функция(коя ще видиш) и по време на прекъсване и в основната програма. Това в много случаи нее фатално, тъй като функцията може да е рутинна и да не предизвика конфликт(повторно извикване по време на първата). За да не те дразни или евентуално не предизвика проблеми, добави същата функция с различно име и я викай в прекъсването с нея а в основната програма със старото.
|
| Нед Сеп 20, 2009 9:52 am |
|
 |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
10х
|
| Нед Сеп 20, 2009 12:41 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Абе викане на функциа от прекусване лично на мен не ми допада много.
|
| Пон Сеп 21, 2009 5:39 pm |
|
 |
|
fan
Ранг: Почетен член
Регистриран на: Съб Окт 13, 2007 12:12 pm Мнения: 712
|
А бе на човека му харесва на вкус и мирис, така, че карай...!
|
| Пон Сеп 21, 2009 8:39 pm |
|
 |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
Това не го решавам аз. Наложително е при задействане на защита, чипът да реагира веднага.
|
| Вто Сеп 22, 2009 10:27 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
мммм то прекъсването винаги е за това, ама да вигаш процедура .... но ти си знаеш де, като рпавило в прекъсване не се стои много, а ако това кеото изпълняваш не е голямо, няма смисъл да е процедура. Ако е голямо пък няма смисъл да го викаш от прекъсване, защото времето му за изпълнение ще е доста по голямо от това ако се вика външно с подходящо написан код.
|
| Вто Сеп 22, 2009 10:49 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
ако няма опция с която да отменяш подобно поведение на компилатора, значи е боклук. нито копипействането на функцията е решение (аз бих дърпал уши за подобно нещо), нито да се откажеш от викане на функция в прекъсване. те функциите са за това, за да не се повтарят и да се викат от където трябва. тъй че порови се в документацията на компилатора.
|
| Сря Сеп 23, 2009 9:24 am |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
Мисля че няма workaround на това. Имаше подобна тема отпреди... Но не за всяко от прекъсванията има претенции да го забранява.
|
| Сря Сеп 23, 2009 11:00 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Абе май има, но никога не съм си играл да ги махам, то в тоя CCS няма смисъл, не мое напишеш кой знае колко голям код за пик та да те залее с безброй грешки та точно варнингите да са ти проблем.
А викането на функция от прекъсване, лично според мен не е одбра идея при микроконтролери, но това си е мое мнение, но самото викане не е проблем, стига човек да си гледа стека дане препълни.
|
| Чет Сеп 24, 2009 9:24 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Да не е Тони глас в пустиня... Кви "функции" в прекъсване кви глупости.
Не че не може, разбира се, ама то може от прекъсването и направо в цикъл
да влезе, та да може само reset да го извади, че прекъсването вече е маскирано.
Не че е толкова немислимо да има някой jsr или нещо подобно в irq handler-а,
но е излишно, хаби стек и довкарва латентност; ако IRQ кодът е толкова голям,
че да му трябва да се разбива на подпрограми и подобни, значи просто подлежи
на преобмисляне и пренаписване.
Да се мисли в категории "функции", "процедури" и подобни HLL глупости
в контекста на прекъсване е напълно погрешно извън първоначалното учене
на това, как се програмират прекъсвания (и смисълът му там е именно да се
разбере защо е погрешно).
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Пет Сеп 25, 2009 12:12 am |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
еее, ае ся, без функции в прекъсване? че то най-сериозните софтуери НЯМАТ код изпълняващ се извън прекъсване, кво сега да не ползват функции ли?  и функции, и цикли и всичко може да се се ползва в прекъсване, и трябва. те затова са измислени тия неща, за да се позлват когато има нужда от тях.
|
| Пет Сеп 25, 2009 7:47 am |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
Тони, той не иска да разкара самия warning, а не знае как да накара CCS да не забранява своеволно прекъсванията по свое усмотрение  И аз не знам де, мисля че не може. Дали е редно или не викане на функция от irq или не - това да е друга тема, но не е редно компилатора да го решава това  Ама той питащият повече не се и обади...
|
| Пет Сеп 25, 2009 10:05 am |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Стига бе, кви са тия "най-сериозни" софтуери дето се изпълняват все в прекъсване.
Освен ако нямаш предвид, че reset е прекъсване и всичко става в неговите рамки, де  .
Кой и за какъв ще кара непрекъснато маскиран? То човек може и с чук да размаже
процесора за можене, разбира се.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Пет Сеп 25, 2009 12:06 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
е, не непрекъснато маскиран, прекъсванията могат и да са реентрантни.
но и да не са, това не променя нищо - тялото на прекъсването има да върщи нещо, това ползва да речем умножение. нормално си е да ползваш функцията за умножение която ползваш и извън прекъсването, а не да дублираш код.
|
| Пет Сеп 25, 2009 2:36 pm |
|
|