www.open-tager.ru
http://www.open-tager.ru/forum/

Вопросы по компилятору avr-gcc (WinAVR).
http://www.open-tager.ru/forum/viewtopic.php?f=5&t=330
Страница 2 из 4

Автор:  Pingvin [ 15 окт 2011, 17:40 ]
Заголовок сообщения:  Re: Вопросы по компилятору avr-gcc (WinAVR).

ASM писал(а):
Pingvin писал(а):
А кто-нибудь работал с avr под никсами?


Я работаю под GNU/Linux, всегда и везде.

Pingvin писал(а):
P.S. Удалось запустить с симулятором simulavr. Работает.


Поздравляю, а у меня оно предательски сегфолтится :-)
Хотя штука очень интересная, поддерживает Verilog для аппаратуры
и имеет swig, что позволяет использовать любой язык типо Python, Ruby, Perl
для коварных прикладных нужд...

Спасибо, интересная информация. Хотя я и языки то эти не знаю, но теперь будет стимул поинтересоапться. :)

Автор:  ASM [ 15 окт 2011, 20:48 ]
Заголовок сообщения:  Re: Вопросы по компилятору avr-gcc (WinAVR).

Pingvin писал(а):
Спасибо, интересная информация. Хотя я и языки то эти не знаю, но теперь будет стимул поинтересоапться. :)


Рекомендую ударится в python, как наиболее перспективный на данный момент (его прикручивают везде).

Автор:  Pingvin [ 16 окт 2011, 10:01 ]
Заголовок сообщения:  Re: Вопросы по компилятору avr-gcc (WinAVR).

ASM писал(а):
Pingvin писал(а):
Спасибо, интересная информация. Хотя я и языки то эти не знаю, но теперь будет стимул поинтересоапться. :)


Рекомендую ударится в python, как наиболее перспективный на данный момент (его прикручивают везде).

С питоном даже чего-то пробовал уже. :)
А не разъясните, как эти языки можно использовать в пректе?
Писать прошику прямо на этих языках?
И какие преимущества это дает?

Автор:  ASM [ 16 окт 2011, 14:11 ]
Заголовок сообщения:  Re: Вопросы по компилятору avr-gcc (WinAVR).

Pingvin писал(а):
ASM писал(а):
Pingvin писал(а):
Спасибо, интересная информация. Хотя я и языки то эти не знаю, но теперь будет стимул поинтересоапться. :)


Рекомендую ударится в python, как наиболее перспективный на данный момент (его прикручивают везде).

С питоном даже чего-то пробовал уже. :)
А не разъясните, как эти языки можно использовать в пректе?
Писать прошику прямо на этих языках?
И какие преимущества это дает?


Это интерпретаторы. Прошивку можно писать только на C и C++.
Эти языки можно использовать в любых других целях. Например, для разработки эмулятора и
графического интерфейса для него. В общем в прошивки нет ему места.

Преимущества: вы можете написать программу значительно быстрее, так как имеете
много дополнительных плюшек (в ущерб производительности, которая часто бывает не критична):
* Очень мощный и выразительный язык;
* Сборщик мусора;
* Динамическую (утиную) типизацию;
* Метопрограммирование, инстроспекцию.

Автор:  Pingvin [ 16 окт 2011, 14:40 ]
Заголовок сообщения:  Re: Вопросы по компилятору avr-gcc (WinAVR).

А что народ думает по такому поводу:
Цитата:
BASINT
Интерпретатор языка Бейсик для AVR микроконтроллеров

В отличие от своего предшественника, тини бейсик контроллера, данный проект представляет собой программное обеспечение для AVR контроллеров ATMega 16/32/64. Сохранена концепция отсутствия специального программного обеспечения. При программировании контроллера с встроенным интерпретатором, достаточно гипертерминала и блокнота.

Поскольку, средой обитания BASINT является микроконтроллер, имеет смысл далее говорить не о программном продукте а об устройстве, которое пользователь должен подготовить, внести код интерпретатора. Для собственных нужд интерпретатор использует две ножки на этапе исполнения и ещё три ножки используется при загрузке пользовательской программы, остальные ножки могут быть использованы целевой задачей.

Самое близкое устройство по классу, по области применения - модули со встроенным интерпретатором BASIC STAMP фирмы Parallax

AVR контроллер, со встроенным интерпретатором BASINT предназначен для быстрой разработки (rapid development) устройств прежде всего непрофессионалами, людьми, которые представляют что нужно сделать, но не имеют возможности тратить время на профессиональный цикл разработки.


http://www.cqham.ru/tbcgroup/

Или это шагание по стопам Ардуно (или как там его...)?

Автор:  ASM [ 16 окт 2011, 14:55 ]
Заголовок сообщения:  Re: Вопросы по компилятору avr-gcc (WinAVR).

Pingvin писал(а):
http://www.cqham.ru/tbcgroup/

Или это шагание по стопам Ардуно (или как там его...)?


По моему хрень, на C/C++ куда проще и быстрее написать под AVR та, не говоря уже о том,
что для хорошей работы наверняка придётся часть на assember переписывать.

А если говорить о ядре по круче(на базе ARM, например), то туда можно lua запихать.

Автор:  Pingvin [ 15 ноя 2011, 20:25 ]
Заголовок сообщения:  Re: Вопросы по компилятору avr-gcc (WinAVR).

Или я чего то не так делаю, или avr-gcc неверно компилирует условия if else! :(
Код у меня почему то выполняется и в блоке if {...} и тут же лезет в else {...}! :shock:
Просто взрыв мозга! :x
Пришлоль вместо
Код:
if (a < 0 ) {бла... бла... бла...}
else {бла...бла..} // переменная а больше или равна 0


писать
Код:
if (a < 0 ) {бла... бла... бла...}
if (a>=0) {бла...бла..}

Никто ни сталкивался с такой проблемой?
Я один такой "везучий"? :?:

Автор:  tommy [ 15 ноя 2011, 22:51 ]
Заголовок сообщения:  Re: Вопросы по компилятору avr-gcc (WinAVR).

wtf?! и как это всё видится в ide через jtag? т.е. если пошагово выполнять, то заходит сначала в первые операторные скобки, а потом и во вторые? а так - эт либо это косяк компилятора, что маловероятно, тк в таком случае это будет видно в .lss файле, либо ошибка не там.

Автор:  Pingvin [ 16 ноя 2011, 05:55 ]
Заголовок сообщения:  Re: Вопросы по компилятору avr-gcc (WinAVR).

tommy писал(а):
wtf?! и как это всё видится в ide через jtag? т.е. если пошагово выполнять, то заходит сначала в первые операторные скобки, а потом и во вторые? а так - эт либо это косяк компилятора, что маловероятно, тк в таком случае это будет видно в .lss файле, либо ошибка не там.

Именно так!
Сначала выполняются операторы в первых скобках (if), а затем,с чистой совестью, контроллер выполняет операторы в скобках else! :( :o :shock:
Именно при пошаговой отладке и обнаружил сей баг!
Или я уже настолько забыл Си, что синтаксис нарушаю?! :(
Вот конкретный глючный кусок кода:
Код:
/**************************************************************************************
* Обработчик прерываний timer1A
***************************************************************************************/

ISR(TIMER1_COMPA_vect){
TIMSK &=~_BV(OCIE1A); 
sei();
if (bullets >0)//если патроны не кончились
{
   if (last_simple == 0)
   {
      fire_led_status=ON; //включаем вспышку
   //   if (fire_mode()==queues) fire_led_status=FQR_4HZ;
   //   else fire_led_status=ON; //включаем вспышку
   }

   if (last_simple < sizeof(pSnd))//3913
         {
            if (last_simple==(sizeof(pSnd)/100)*CUT_OFF_SOUNT)
            {
               if (fire_mode()==queues)
               {
                  if ((get_keyboard_status()==key_pressed)&&(life>0)) //курок нажат, то отсекаем звук
                  {
                     bullets--;//уменьшаем на 1 количество патронов
                     send_ir_package();   //Производим "выстрел"
                     last_simple=0;      //воспроизводим звук сначала
                     fire_led_status=FQR_4HZ;
                  }
                  else    fire_led_status=ON;                  
               }
            }
            
            OCR0 = pgm_read_byte(&(pSnd[last_simple++]));
         }
   else
         {
         //   last_simple = 0;
         //   PORTA &= ~(1 << 2);
            OCR0 = 128; //Скважность = 0,5
            fire_led_status=OFF;
            //FIRE_LED_OFF;
         }


}

else //патроны кончились
   {
      BULLETS_OUT_LED_ON; // включаем светодиод "Патроны кончились"
      if (last_simple < sizeof(pSnd)) OCR0 = pgm_read_byte(&(pSnd[last_simple++]));//дадим выстрелу прозвучать до конца
      else fire_led_status = OFF; //СЮДА ЛЕЗЕТ, ДАЖЕ ЕСЛИ bullets >0!!!!
   }




Пришлось переписать этот кусок так:
Код:
/**************************************************************************************
* Обработчик внещних прерываний timer1A
***************************************************************************************/

ISR(TIMER1_COMPA_vect){
TIMSK &= ~_BV(OCIE1A);  //запрещаем прерывания timer1, чтобы не было рекурсии
sei();

if (bullets >0)//если патроны не кончились
{
   if (last_simple == 0)
   {
      fire_led_status=ON; //включаем вспышку
   //   if (fire_mode()==queues) fire_led_status=FQR_4HZ;
   //   else fire_led_status=ON; //включаем вспышку
   }
   else;
   if (last_simple < sizeof(pSnd))//3913
         {
            if (last_simple==(sizeof(pSnd)/100)*CUT_OFF_SOUNT)
            {
               if (fire_mode()==queues)
               {
                  if ((get_keyboard_status()==key_pressed)&&(life>0)) //курок нажат, то отсекаем звук
                  {
                     bullets--;//уменьшаем на 1 количество патронов
                     send_ir_package();   //Производим "выстрел"
                     last_simple=0;      //воспроизводим звук сначала
                     fire_led_status=FQR_4HZ;
                  }
                  else    fire_led_status=ON;                  
               }
               else;
            }
            else;
            
            OCR0 = pgm_read_byte(&(pSnd[last_simple++]));
         }
   if (last_simple >= sizeof(pSnd)&&(last_simple)!=0xFFFF)//3913
         {
         //   last_simple = 0;
         //   PORTA &= ~(1 << 2);
            OCR0 = 128; //Скважность = 0,5
            fire_led_status=OFF;
            //FIRE_LED_OFF;
         };


}


if (bullets <= 0) //патроны кончились
   {
      BULLETS_OUT_LED_ON; // включаем светодиод "Патроны кончились"
      if (last_simple < sizeof(pSnd)) {OCR0 = pgm_read_byte(&(pSnd[last_simple++]));}//дадим выстрелу прозвучать до конца
      else fire_led_status = OFF;
   };




Или я просто запутался в if else? :( :?
Где ошибка?
Есть у меня подозрения, что это связано с тем, что я прерывания разрешаю и где то в других обработчиках меняется значение регистра статуса, но, разве компилятор не сохраняет регистры при вызове обработчика?
Да и тогда, когда я не разрешал прерывания, вроде то же самое было.
Надо перепроверить!

Автор:  timach [ 16 ноя 2011, 06:39 ]
Заголовок сообщения:  Re: Вопросы по компилятору avr-gcc (WinAVR).

а чо у тебя после фигурной скобки точка с запятой идут :shock: ну и код у тебя лапша, писал бы в одном стиле :roll: и еще лучше было бы работать с объектами

Страница 2 из 4 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/