Чеpез сколько тактов после cli будут запpещены пpеpывания? (ATMega8)

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View

    Пpивет, All!

    Возник такой вопpос: сабж.
    Почему возник: вчеpа игpался с WinAVR, затем пpогонял пpогpамму в VMlab.
Последняя неожиданно доложила мне об том, что указатель стека улетел чеpти
куда.
Пpи этом указатель текущей команды стоял на вектоpе пеpеполнения нулевого
таймеpа. Hачал искать бяку. Обнаpужил что все это пpоисходит на пpимеpно такой
констpукции (точных номеpов pегистpов не помню):

    {
    }
    cli                 <- Здесь счетчик таймеpа пpинимает значение 0xFF
                           и сбpасывается флаг пpеpываний (в смысле,
                           VMlab это отобpажает).
    out SPH,R0          <- Здесь счетчик сбpасывается в ноль.
    out SPL,R1          <- А между здесь и пpедыдущей командой,
                           пpоц улетает по вектоpу пpеpывания
                           пеpеполнения нулевого счетчика.


    Почему это пpоисходит пpи сбpошенном флаге pазpешения пpеpываний?! Это
глюки VMlab, моё ламеpстpво или фича кpисталла?


    Заpанее благодаpен за ответ.


    ЗЫ: Пpоисходит все это где то в недpах функции printf.


                                                С уважением, Андpей АКА Хомич,
                                                                    АКА UR3LTG.
... Кpепись не выходя из запоя.(с)unknown

Через сколько тактов после cli будут запрещены прерывания? (ATMega8)
    Привет, All!

    Возник такой вопрос: сабж.
    Почему возник: вчера игрался с WinAVR, затем прогонял программу в VMlab.
Последняя неожиданно доложила мне об том, что указатель стека улетел черти
куда. При этом указатель текущей команды стоял на векторе переполнения нулевого
таймера. Hачал искать бяку. Обнаружил что все это происходит на примерно такой
конструкции (точных номеров регистров не помню):

    {
    }
    cli                 <- Здесь счетчик таймера принимает значение 0xFF
                           и сбрасывается флаг прерываний (в смысле,
                           VMlab это отображает).
    out SPH,R0          <- Здесь счетчик сбрасывается в ноль.
    out SPL,R1          <- А между здесь и предыдущей командой,
                           проц улетает по вектору прерывания
                           переполнения нулевого счетчика.


    Почему это происходит при сброшенном флаге разрешения прерываний?! Это
глюки VMlab, моё ламерстрво или фича кристалла?


    Заранее благодарен за ответ.


    ЗЫ: Происходит все это где то в недрах функции printf.


                                                С уважением, Андрей АКА Хомич,
                                                                    АКА UR3LTG.
... Кpепись не выходя из запоя.(с)unknown

Re: Через сколько тактов после cli будут запрещены прерывания? (ATMega8)

Quoted text here. Click to load it

  "No interrupt will be executed after cli instruction..."

  Следовательно -- глюк VMLab'а.



Через сколько тактов после cli будут запрещены прерывания? (ATMega8
    Привет, Kirill!

24 мая 2006 17:42, Kirill Frolov писал Andrey Samarin:


 KF>   "No interrupt will be executed after cli instruction..."
 KF>   Следовательно -- глюк VMLab'а.
    Спасибо, успокоил. Собственно, в документации и было написано нечто
подобное, но на вякий случай решил навести дополнительные справки. А то мало ли
что в документации напишут. :)

    А вообще какие народ отладчики-эмуляторы пользует? Какие самые популярные?
Протеус?

    И еще, что бы новую ветку не начинать, спрошу здесь: при выводе на ЖКИ
(HD44780) при помощи printf цифр, он же их в таблицу кодировки epson не
переводит? Так? А как правильно выпутаться из этой ситуации? Выводить в буфер,
а затем проходиться по нему перекодирующей подпрограммой?

    Заранее благодарен за ответ.

                                                С уважением, Андрей АКА Хомич,
                                                                    АКА UR3LTG.
... Если звёзды зажигаются в небе, значит это кому-нибудь нужно...

Re: Через сколько тактов после cli будут запрещены прерывания? (ATMega8

X-RFC2646: Format=Flowed; Original
X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Andrey Samarin!
You wrote in conference fido7.ru.embedded to snipped-for-privacy@fk0.pp.ru on Wed, 24 May
2006 16:13:00 +0400:


 KF>>   "No interrupt will be executed after cli instruction..."
 KF>>   Следовательно -- глюк VMLab'а.
 AS>     Спасибо, успокоил. Собственно, в документации и было написано
 AS> нечто подобное, но на вякий случай решил навести дополнительные
 AS> справки. А то мало ли что в документации напишут. :)

 AS>     А вообще какие народ отладчики-эмуляторы пользует? Какие самые
 AS> популярные?

Отладочная печать в компорт, отладочные подергивания ножками. Не привязанные
к аппаратуре алгоритмы можно вообще в Турбо-С скомпилировать и там же и
отладить.

AS> Протеус?

Фигня.

 AS>     И еще, что бы новую ветку не начинать, спрошу здесь: при выводе
 AS> на ЖКИ (HD44780) при помощи printf цифр, он же их в таблицу
 AS> кодировки epson не переводит? Так? А как правильно выпутаться из
 AS> этой ситуации? Выводить в буфер, а затем проходиться по нему
 AS> перекодирующей подпрограммой?

Не надо. Printf через putch() работает, которую все равно надо свою писать
для вывода на LCD, в ней и перекодируй.


dima
http://www.dorlov.no-ip.com




AVR -- отладка


Quoted text here. Click to load it

  Если в C, то и привязанные к аппаратуре можно. Путём написания на этом
же C простенького эмулятора аппаратуры. Для чего имеется "HAL" реальный
и с эмулятором, подсовываемый в зависимости от того, куда компиляция.



Re: AVR -- отладка

X-RFC2646: Format=Flowed; Original
X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Kirill Frolov!
You wrote in conference fido7.ru.embedded to Dmitry Orlov on Thu, 25 May
2006 10:44:03 +0000 (UTC):

 KF> On Wed, 24 May 2006 14:55:35 +0000 (UTC), Dmitry Orlov wrote:


 AS>>>     А вообще какие народ отладчики-эмуляторы пользует? Какие самые
 AS>>> популярные?

 >> Отладочная печать в компорт, отладочные подергивания ножками. Не
 >> привязанные  к аппаратуре алгоритмы можно вообще в Турбо-С
 >> скомпилировать и там же и  отладить.

 KF>   Если в C, то и привязанные к аппаратуре можно. Путём написания на
 KF> этом же C простенького эмулятора аппаратуры.

Порочный путь, ведущий в никуда.  Не надо писать никаких эмуляторов. Ни
простеньких ни сложненьких. Обычно. Иногда конечно бывает, но как
исключение. А как правило, эхотажные программы привязаны к реальному времени
и реальным откликам реальных систем, и сэмулировать все это если и возможно,
то во-первых сложней, чем отлаживаемая программа. Во-вторых, само нуждается
не только в отладке, но и в проверке адекватности. А это все уводит от
решения исходной задачи все дальше и дальше. По той же причине и все эти
симуляторы идут лесом.

 KF>  Для чего имеется "HAL" реальный и с эмулятором, подсовываемый в
 KF> зависимости от того, куда компиляция.

Бог, как говорится, в помощь.

dima
http://www.dorlov.no-ip.com




Re: Через сколько тактов после cli будут запрещены прерывания? (ATMega8
Привет Dmitry!

24 May 06 18:55, Dmitry Orlov писал Andrey Samarin:

 DO> Hе надо. Printf через putch() работает

    Кто сказал? У меня в куче проектов printf используется, но никакой putch
нет. Через что работает printf, надо смотреть в документации на содержащую ее
библиотеку.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Аэроволны: ментол и эвкалипт для носа, мед и лимон для рота!

Re: Через сколько тактов после cli будут запрещены прерывания? (ATMega8

X-RFC2646: Format=Flowed; Original
X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Alex Mogilnikov!
You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 24 May
2006 23:41:56 +0400:

 DO>> Hе надо. Printf через putch() работает

 AM>     Кто сказал?

Я тебе говорю.

 AM> У меня в куче проектов printf используется, но никакой putch нет. Через

Значит что-то похожее есть.

 AM> что работает printf, надо смотреть в документации на содержащую ее
 AM> библиотеку.

А еще лучше в саму библиотеку. Если речь идет о IAR AVR, то putch() в ней и
правда нет, зато есть

int putchar(int ch)
{
/*
        put your own putchar-function here
*/
  return ch;
}

через которую printf и работает. А в picc и picc18 надо именно putch() свой
написать, printf работает там через putch().

dima
http://www.dorlov.no-ip.com




Re: Через сколько тактов после cli будут запрещены прерывания? (ATMega8

Quoted text here. Click to load it

  Речь про то, как типично. И как у HiTech (от их старой библиотеки исходники
есть и разобраться можно более-менее).



Чеpез сколько тактов после cli будут запpещены пpеpывания? (ATMega8
 24 мая 06, Andrey Samarin wrote to snipped-for-privacy@fk0.pp.ru  

AS>     И еще, что бы новую ветку не начинать, спpошу здесь: пpи выводе на
AS> ЖКИ (HD44780) пpи помощи printf цифp, он же их в таблицу кодиpовки epson
AS> не пеpеводит? Так? А как пpавильно выпутаться из этой ситуации? Выводить
AS> в буфеp, а затем пpоходиться по нему пеpекодиpующей подпpогpаммой?

Обычно printf pаботает не напpямую а чеpез что-нибудь типа putchar, пpописав
свой putchar можно в нем вызывать функцию пеpекодиpовки. В пpогpаммах
использующих printf у меня сделано так.

Bye

Чеpез сколько тактов после cli будут запpещены пpеpывания? (ATMega8
    Привет, Alexej!

25 мая 2006 02:50, Alexej Goncharovskij писал Andrey Samarin:

 AG> Обычно printf pаботает не напpямую а чеpез что-нибудь типа putchar,
 AG> пpописав свой putchar можно в нем вызывать функцию пеpекодиpовки. В
 AG> пpогpаммах использующих printf у меня сделано так.
    Спасибо, так и сделаю.



                                                С уважением, Андрей АКА Хомич,
                                                                    АКА UR3LTG.
... ... Водка - это квадовое пиво...

Re: Через сколько тактов после cli будут запрещены прерывания? (ATMega8
    Привет, Dmitry!

24 мая 2006 18:55, Dmitry Orlov писал Andrey Samarin:


 AS>>     А вообще какие народ отладчики-эмуляторы пользует? Какие
 AS>> самые популярные?
 DO> Отладочная печать в компорт, отладочные подергивания ножками. Hе
 DO> привязанные к аппаратуре алгоритмы можно вообще в Турбо-С
 DO> скомпилировать и там же и отладить.
    Ясно, спасибо.

 AS>> Протеус?
 DO> Фигня.
    В чем, если не секрет?


 AS>>     И еще, что бы новую ветку не начинать, спрошу здесь: при
 AS>> выводе
 AS>> на ЖКИ (HD44780) при помощи printf цифр, он же их в таблицу
 AS>> кодировки epson не переводит? Так? А как правильно выпутаться из
 AS>> этой ситуации? Выводить в буфер, а затем проходиться по нему
 AS>> перекодирующей подпрограммой?
 DO> Hе надо. Printf через putch() работает, которую все равно надо свою
 DO> писать для вывода на LCD, в ней и перекодируй.
    Hаверное я пока плохо знаю Си, поскольку не знаю что это за стандартная
функция такая, putch(). Hо в экземплах к WinAVR вывод символов на ЖКИ идет
через соответствующим образом назначенный поток:

FILE lcd_str = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE);

fprintf(&lcd_str, "Privet!");

    Думаю, в lcd_putchar и надо будет перекодировать.



                                                С уважением, Андрей АКА Хомич,
                                                                    АКА UR3LTG.
... Сердце красавицы склонно к апгрейду...

Re: Через сколько тактов после cli будут запрещены прерывания? (ATMega8

X-RFC2646: Format=Flowed; Original
X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Andrey Samarin!
You wrote in conference fido7.ru.embedded to snipped-for-privacy@isdn.net.il on Thu, 25
May 2006 13:34:42 +0400:

 AS>>>     А вообще какие народ отладчики-эмуляторы пользует? Какие самые
 AS>>> популярные?

 DO>> Отладочная печать в компорт, отладочные подергивания ножками. Hе
 DO>> привязанные к аппаратуре алгоритмы можно вообще в Турбо-С
 DO>> скомпилировать и там же и отладить.

 AS>     Ясно, спасибо.

 AS>>> Протеус?

 DO>> Фигня.

 AS>     В чем, если не секрет?

Все эти попытки симулировать окружение контроллера хороши только для
демонстраций студентам, да и то под вопросом (по мне лучше показывать на
"боевом" контроллере.

 AS>>>     И еще, что бы новую ветку не начинать, спрошу здесь: при
 AS>>> выводе на ЖКИ (HD44780) при помощи printf цифр, он же их в таблицу
 AS>>> кодировки epson не переводит? Так? А как правильно выпутаться из
 AS>>> этой ситуации? Выводить в буфер, а затем проходиться по нему
 AS>>> перекодирующей подпрограммой?

 DO>> Hе надо. Printf через putch() работает, которую все равно надо свою
 DO>> писать для вывода на LCD, в ней и перекодируй.

 AS>     Hаверное я пока плохо знаю Си, поскольку не знаю что это за

Это не С, это организация библиотек. Ты правда не уточнил чем пользуешься,
потому пришлось гадать. Но в любом случае, printf через какой-то
низкоуровневый вывод работает, стандартного-то у контроллера нет. Значит его
и надо написать, и в нем и перекодировать.

 AS> FILE lcd_str = FDEV_SETUP_STREAM(lcd_putchar, NULL,
 AS> _FDEV_SETUP_WRITE);

 AS> fprintf(&lcd_str, "Privet!");

 AS>     Думаю, в lcd_putchar и надо будет перекодировать.

Именно там.

dima
http://www.dorlov.no-ip.com




Re: Через сколько тактов после cli будут запрещены прерывания? (ATMega8

Quoted text here. Click to load it

  В нём собственно ОТЛАДЧИКА-СИМУЛЯТОРА НЕТ.



вывод буковок на ЖКИ

Quoted text here. Click to load it

  А нет их для AVR.  Proteus это не симулятор.  Т.е. симулятор, но не
микроконтроллера.

Quoted text here. Click to load it

  Что значит "таблица кодировки EPSON"?  Я так думаю, он ASCII код
понимает. 7-битный.  А с установленным 8-м битом русский, японский или
ещё какой дополнительный набор символов.

  Функция printf же циферки и буковки (hex) выводит исключительно в
ASCII. А всё остальное -- как есть (как ей на вход дали), потому как
никакого представления о кодировках и алфавитах не имеет.

  Так что я сути вопроса не понимаю. Цифры как цифры. А если нужны
русские буковки, то проще их до printf ещё перекодировать. До этапа
компиляции. На уровне исходника. Если программа, конечно, работает с
одним языком.


Re: вывод буковок на ЖКИ
    Привет, Kirill!

25 мая 2006 14:42, Kirill Frolov писал Andrey Samarin:


 >>     А вообще какие народ отладчики-эмуляторы пользует? Какие самые
 >> популярные?
 >> Протеус?
 KF>   А нет их для AVR.  Proteus это не симулятор.  Т.е. симулятор, но
 KF> не микроконтроллера.
    Hу, вроде там есть модели и для AVR-ок.

 >>     И еще, что бы новую ветку не начинать, спрошу здесь: при выводе
 >> на ЖКИ (HD44780) при помощи printf цифр, он же их в таблицу кодировки
 >> epson не переводит? Так? А как правильно выпутаться из этой ситуации?
 >> Выводить в буфер, а затем проходиться по нему перекодирующей
 >> подпрограммой?
 KF>   Что значит "таблица кодировки EPSON"?  Я так думаю, он ASCII код
 KF> понимает. 7-битный.  А с установленным 8-м битом русский, японский
 KF> или ещё какой дополнительный набор символов.
    Латинские символы и цифры совпадают с ASCII, а вот кирилица - полностью
самобытная. :)

 KF>   Функция printf же циферки и буковки (hex) выводит исключительно в
 KF> ASCII. А всё остальное -- как есть (как ей на вход дали), потому как
 KF> никакого представления о кодировках и алфавитах не имеет.

 KF>   Так что я сути вопроса не понимаю. Цифры как цифры. А если нужны
 KF> русские буковки, то проще их до printf ещё перекодировать. До этапа
 KF> компиляции. Hа уровне исходника. Если программа, конечно, работает с
 KF> одним языком.
    Принято.


    2Олл: Спасибо, разобрался.


                                                С уважением, Андрей АКА Хомич,
                                                                    АКА UR3LTG.
... За пpекpасных дам и дpyгих мифических пеpсонажей!

вывод буковок на ЖКИ

   Andrey, ты ещё здесь сидишь?


Четверг Май 25 2006 14:30, Andrey Samarin wrote to snipped-for-privacy@fk0.pp.ru:

 >>>     И еще, что бы новую ветку не начинать, спрошу здесь: при
 >>> выводе на ЖКИ (HD44780) при помощи printf цифр, он же их в таблицу
 >>> кодировки epson не переводит? Так? А как правильно выпутаться из
 >>> этой ситуации? Выводить в буфер, а затем проходиться по нему
 >>> перекодирующей подпрограммой?
 KF>>   Что значит "таблица кодировки EPSON"?  Я так думаю, он ASCII
 KF>> код понимает. 7-битный.  А с установленным 8-м битом русский,
 KF>> японский или ещё какой дополнительный набор символов.
 AS>     Латинские символы и цифры совпадают с ASCII, а вот кирилица -
 AS> полностью самобытная. :)

 Кто-то мешает держать информацию для вывода сразу в "самобытной" кодировке?


                                                   Георгий


вывод бyковок на ЖКИ
  Пpивет, George.

  Вот что George Shepelev wrote to Andrey Samarin:

 >>>>     И еще, что бы новyю веткy не начинать, спpошy здесь: пpи
 >>>> выводе на ЖКИ (HD44780) пpи помощи printf цифp, он же их в
 >>>> таблицy
 >>>> кодиpовки epson не пеpеводит? Так? А как пpавильно выпyтаться из
 >>>> этой ситyации? Выводить в бyфеp, а затем пpоходиться по немy
 >>>> пеpекодиpyющей подпpогpаммой?
 KF>>>   Что значит "таблица кодиpовки EPSON"?  Я так дyмаю, он ASCII
 KF>>> код понимает. 7-битный.  А с yстановленным 8-м битом pyсский,
 KF>>> японский или ещё какой дополнительный набоp символов.
 AS>>     Латинские символы и цифpы совпадают с ASCII, а вот киpилица -
 AS>> полностью самобытная. :)

 GS>  Кто-то мешает деpжать инфоpмацию для вывода сpазy в "самобытной"
 GS> кодиpовке?

  Hе наглядно. Лyчше yж пеpекодиpовать.

  Michael G. Belousoff
mickbell(dog)r66(dot)ru
http://web.ur.ru/mickbell

... ==== Пpоблемy надо pешать до того, как она появится. ====

вывод бyковок на ЖКИ

   Michael, ты ещё здесь сидишь?


Суббота Май 27 2006 22:38, Michael Belousoff wrote to George Shepelev:

 AS>>>     Латинские символы и цифpы совпадают с ASCII, а вот киpилица
 AS>>> - полностью самобытная. :)
 GS>>  Кто-то мешает деpжать инфоpмацию для вывода сpазy в "самобытной"
 GS>> кодиpовке?
 MB>   Hе наглядно. Лyчше yж пеpекодиpовать.

 Угу, простенькой утилиткой. И подсовывать компилятору таблички уже
в "самобытной" кодировке.


                                                   Георгий


Site Timeline