roboforum.ru

Технический форум по робототехнике.

AVR на C/C++ программирование - вводный курс

Ответить

Re: Вводный курс для программирования МК AVR на языке C/C++

=DeaD= » 28 июл 2008, 21:19

=DeaD= писал(а):в отпуск пора, сегодня поставил себе AVRStudio, WinAVR на недавно освеженный комп и не смог скомпилить пример, чего-то с makefile'ом намутил умудрился на ровном месте, хотя до этого раз 10 ставил всё и нормуль было :) ппц, переработал :)

Ппц. понял где грабли - русские буковки в пути к проекту :o бойтесь англоязычного софта! :)
Повесил предупреждение в курс.

Добавлено спустя 48 минут 25 секунд:
Нашел на странице доков к WinAVR http://www.nongnu.org/avr-libc/user-man ... delay.html вот такой текст:

Код: Выделить всёРазвернуть
void _delay_ms (double __ms)


Perform a delay of __ms milliseconds, using _delay_loop_2().

The macro F_CPU is supposed to be defined to a constant defining the CPU clock frequency (in Hertz).

The maximal possible delay is 262.14 ms / F_CPU in MHz.

When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of 1/10 ms, providing delays up to 6.5535 seconds (independent from CPU frequency). The user will not be informed about decreased resolution.

Короче оно якобы нормально до 6.5 секунд должно работать, у кого под руками МК живой есть со светодиодом, можете проверить? У меня эмулятор чего-то тупит встроеный в AVRStudio :(

Re: Вводный курс для программирования МК AVR на языке C/C++

blindman » 28 июл 2008, 21:38

Максимум 16.38375 мс на 16 МГц. 262.14 мс на 1МГц

Добавлено спустя 1 минуту 23 секунды:
А, ну да. 6.5 вроде. Щас проверю

Добавлено спустя 15 минут 6 секунд:
Получается, что это добавлено было в последних версиях avr-libc. У меня стоит 1.4.6, и там нет этого режима уменьшенного разрешения. Щас скачал 1.6.2 - там есть

Re: Вводный курс для программирования МК AVR на языке C/C++

=DeaD= » 28 июл 2008, 21:51

Итак противники си трепещите :ROFL:

Исходный пример (мигаем всем портом B с частотой 2Гц) упростился до:
Код: Выделить всёРазвернуть
#include <avr/io.h> //подключаем библиотеку для работы с портами
#include <util/delay.h> //подключаем библиотеку для задержек работы программы на нужное время

int main(void) //объявление главной функции в которую входим при запуске программы
{
   DDRB = 0xFF; //Открываем порт B как выход
   while(1) //В бесконечном цикле
   {
      PORTB = 0x00; //Устанавливаем нули на порт B
      _delay_ms(250); //Ждем 1/4 секунды
      PORTB = 0xFF; //Устанавливаем единички на порт B
      _delay_ms(250); //Ждем еще 1/4 секунды
   };
   return 0;
}

убрал циклы из пауз и PORTB = 0x00 из инициализации, ну и инициализацию переменной "i" для циклов и библиотеку Int-типов.

Re: Вводный курс для программирования МК AVR на языке C/C++

blindman » 28 июл 2008, 22:06

Из всего этого вывод : не забываем вовремя обновлять компилятор

Re: Вводный курс для программирования МК AVR на языке C/C++

Сергей » 28 июл 2008, 22:09

Ага, ну маладцы прям, а если новичек решит сам сделать мигание на основе вашего примера? Он возьмет и сосчитает _delay_ms(1000) и ничего работать у него не будет.

Re: Вводный курс для программирования МК AVR на языке C/C++

blindman » 28 июл 2008, 22:10

Это еще почему?

Re: Вводный курс для программирования МК AVR на языке C/C++

=DeaD= » 28 июл 2008, 22:15

Сергей еще не понял, что это у тебя старый компилятор, а новичек будет скачивать последнюю версию и ему обновляться не надо.

Re: Вводный курс для программирования МК AVR на языке C/C++

Сергей » 29 июл 2008, 00:44

Я к тому, что новичок не полезет читать максимальное количество мс которое можно задать _delay_ms( ), он может задать и больше максимального. Или у новых компиляторов ограничение снято?

Re: Вводный курс для программирования МК AVR на языке C/C++

blindman » 29 июл 2008, 05:15

Написано же - 6.5 с. Точнее, 65535 * 100мкс. И достаточно об этом упомянуть в тексте.

Re: Вводный курс для программирования МК AVR на языке C/C++

=DeaD= » 29 июл 2008, 07:28

Сергей писал(а):Я к тому, что новичок не полезет читать максимальное количество мс которое можно задать _delay_ms( ), он может задать и больше максимального. Или у новых компиляторов ограничение снято?

Я не понял, мы тут собрались кого-то си\си++ учить или пионеров опекать? Новичек с регистрами МК такого вообще может натворить не читая документации, а уж если еще и в фьюзы полезет не разобравшись... тогда просто сразу "ой", короче как страшно жить... :crazy:

Re: Вводный курс для программирования МК AVR на языке C/C++

Сергей » 29 июл 2008, 13:33

Ну раз решили учить МК, так давайте делать так, чтобы новички не допускали ошибок глупых :crazy:

Re: Вводный курс для программирования МК AVR на языке C/C++

=DeaD= » 29 июл 2008, 13:59

Сергей писал(а):Ну раз решили учить МК, так давайте делать так, чтобы новички не допускали ошибок глупых :crazy:

Это как можно обеспечить? Подарить им тьютора каждому, чтобы за спиной стоял и смотрел чего не так новичек куда пишет? Или к каждой команде справку по ней сразу справа писать?

Re: Вводный курс для программирования МК AVR на языке C/C++

rig » 29 июл 2008, 14:15

что остановились?
один пример есть, теперь думайте как двумя диодам помигать, это уже побитовые операции.
а то понапридумываете черти что, я даж сомневатьсч стал знаю ли я Си.
Шаг вправо шаг влево это творчество, ошибки делают все. на них и учимся.

Re: Вводный курс для программирования МК AVR на языке C/C++

Vooon » 29 июл 2008, 14:24

Блин, вроде недавно же смотрел, в интерпиде была таже версия что и в харди, ан нет, уже новая :)
*обновился*

Re: Вводный курс для программирования МК AVR на языке C/C++

Сергей » 29 июл 2008, 14:47

=DeaD= писал(а):
Сергей писал(а):Ну раз решили учить МК, так давайте делать так, чтобы новички не допускали ошибок глупых :crazy:

Это как можно обеспечить? Подарить им тьютора каждому, чтобы за спиной стоял и смотрел чего не так новичек куда пишет? Или к каждой команде справку по ней сразу справа писать?

Вот насчет справки к каждой команде - это уже близко :D


Rambler\'s Top100 Mail.ru counter