roboforum.ru

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

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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

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

Сообщение Сергей » 28 июл 2008, 15:08

blindman писал(а):Может имеет смысл сначала сделать простую библиотеку базовых функций, и уже на ее основе делать курс или как-там-его-назвать?
Диапазон аргументов к функциям/макросам задержек расширить, другие базовые вещи сделать.

Вот это я и предлагал в своих первых постах когда предложил использовать функцию delay_s( ), кстати именно .._s() так как новичкам так будет понятнее
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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

Сообщение Vooon » 28 июл 2008, 15:26

Код: Выделить всёРазвернуть
/**
* @file common.h
* @brief common macros & functions
*/

#ifndef COMMON_H_
#define COMMON_H_

#define bit_set(reg, bit)    reg |= (1<<bit)
#define bit_clear(reg, bit)  reg &= ~(1<<bit)
#define bit_invert(reg, bit) reg ^= (1<<bit)

/**
* Delay in seconds
*/
void delay_s(double s);

#endif /*COMMON_H_*/


PS: А про маски и битовые операции всеравно придется обьясныть :wink:
PSS: Talk is cheap. Show me the code. Linus :)
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

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

Сообщение blindman » 28 июл 2008, 15:34

Конечно придется. Но это не зависит от используемого языка. А подобная базовая библиотека кстати удобна не только для начинающих.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение rig » 28 июл 2008, 15:36

а планчик накидать для начала.
0 Си, и куда его писать. Описание языка, Как настроить WinAVR, простейшая программа ни чего не делающая(типа пустого цикла while(1) ).
1 мигаем диодом с помощью МК, для этого надо
(базовые знания устройство порта, схемка, детали, операторы Си... )
2 мигаем диодами с помощью МК, для этого надо
(битовые операции... )
3 мигаем диодами с помощью МК, реагируя на кнопку/ки, для этого надо и тд.
(...)
а то вы рванули помигать сразу с функциями и битовыми операциями.
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

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

Сообщение Сергей » 28 июл 2008, 15:46

Чтобы не забыть, сразу кидаю работу со старшими и младшими байтами
Код: Выделить всёРазвернуть
#include <stdint.h>

/**
* @def GetLowByte(x)
* @brief Извлечение из слова младшего байта
*/
#define GetLowByte(x) ((char)(x))

/**
* @def GetHighByte(x)
* @brief Извлечение из слова старшего байта
*/
#define GetHighByte(x) ((x)>>8)

/**
* Получаем слово, путем соединение старшего и младшего байтов
* @param HighByte Старший байт
* @param LowByte Младший байт
* @return Слово(16-бит)
*/
uint16_t GetWord( uint8_t HighByte, uint8_t LowByte )
{
   return ( ( HighByte & 0xFF ) << 8 ) | ( LowByte & 0xFF );
}
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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

Сообщение rig » 28 июл 2008, 15:56

uint16_t - это стандартный для WinAVR тип пеерменной?
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

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

Сообщение Vooon » 28 июл 2008, 15:58

Код: Выделить всёРазвернуть
/**
* @file common.h
* @brief common macros & functions
*/

#ifndef COMMON_H_
#define COMMON_H_

#include <stdint.h>
// проверьте, есть ли оно в winavr?
#include <stdbool.h>

#define bit_set(reg, bit)    reg |=  (1<<(bit))
#define bit_clear(reg, bit)  reg &= ~(1<<(bit))
#define bit_invert(reg, bit) reg ^=  (1<<(bit))

/// Delay in seconds
void delay_s(double s);

/// Извлечение из слова младшего байта
#define get_low_byte(x) ((unsigned char)(x))

/// Извлечение из слова старшего байта
#define get_high_byte(x) ((unsigned char)((x)>>8))

/**
* Получаем слово, путем соединение старшего и младшего байтов
* @param HighByte Старший байт
* @param LowByte Младший байт
* @return Слово(16-бит)
*/
inline uint16_t get_word(uint8_t HighByte, uint8_t LowByte )
{
   return ( ( HighByte & 0xFF ) << 8 ) | ( LowByte & 0xFF );
}

#endif /*COMMON_H_*/



uint16_t стандартный для GCC, для авр определен как
Код: Выделить всёРазвернуть
typedef unsigned int uint16_t;
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

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

Сообщение Сергей » 28 июл 2008, 16:07

Лучше написать еще типа этого
Код: Выделить всёРазвернуть
#ifndef true
#define true 1
#endif
#ifndef false
#define false 0
#endif


Добавлено спустя 1 минуту 53 секунды:
В моем стиле - еще добавь авторов)
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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

Сообщение =DeaD= » 28 июл 2008, 16:15

Народ, вы чего? Какие еще библиотеки в первых примерах? Давайте без фокусов на первых порах. Никто из серьезных людей не начинают первые же исходники в курсе писать с использованием своей личной библиотеки. Давайте курс по стандартному языку отдельно и свои библиотеки отдельно. Как минимум этому человеку потом не только наши с вами исходники под WinAVR читать, так что давайте не будем его заставлять изучать наши личные способы установитьсбросить бит порта, ему штатных 25 хватит.

Добавлено спустя 4 минуты 46 секунд:
GetLowByte(x) - это вообще в паскале вроде принято имена с большой буквы начинать, в сях вроде наоборот с маленькой...
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение Vooon » 28 июл 2008, 16:31

2 Сергей, это есть в stdbool.h:
Код: Выделить всёРазвернуть
/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING.  If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.  */

/* As a special exception, if you include this header file into source
   files compiled by GCC, this header file does not by itself cause
   the resulting executable to be covered by the GNU General Public
   License.  This exception does not however invalidate any other
   reasons why the executable file might be covered by the GNU General
   Public License.  */

/*
* ISO C Standard:  7.16  Boolean type and values  <stdbool.h>
*/

#ifndef _STDBOOL_H
#define _STDBOOL_H

#ifndef __cplusplus

#define bool   _Bool
#define true   1
#define false   0

#else /* __cplusplus */

/* Supporting <stdbool.h> in C++ is a GCC extension.  */
#define _Bool   bool
#define bool   bool
#define false   false
#define true   true

#endif /* __cplusplus */

/* Signal that all the definitions are present.  */
#define __bool_true_false_are_defined   1

#endif   /* stdbool.h */


А вообще деад прав, первые примеры должны быть просты.
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

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

Сообщение Сергей » 28 июл 2008, 16:36

Я это не к первым примерам, я это к общей библиотеке. Так что попрошу не наезжать 8)
=DeaD= писал(а):GetLowByte(x) - это вообще в паскале вроде принято имена с большой буквы начинать, в сях вроде наоборот с маленькой...

Это я вырезал из С++ проекта, поэтому с большой. А в Си да, с маленькой.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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

Сообщение =DeaD= » 28 июл 2008, 17:19

Сергей писал(а):Я это не к первым примерам, я это к общей библиотеке. Так что попрошу не наезжать 8)

Курс отдельно, библиотека отдельно, кто за, кто против?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение Сергей » 28 июл 2008, 17:26

=DeaD= писал(а):
Сергей писал(а):Я это не к первым примерам, я это к общей библиотеке. Так что попрошу не наезжать 8)

Курс отдельно, библиотека отдельно, кто за, кто против?
Ну ответ очевиден. Конечно отдельно. Только вот курс будет основываца на этой библиотеке или нет? Если нет - то и нет смысла в библиотеке
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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

Сообщение =DeaD= » 28 июл 2008, 18:47

По-моему очевидно курс не может основываться на библиотеке, потому что так никто из серьезных людей не делает. Надо учить человека разбираться в том, что он будет видеть в листингах чужих программ, а не в нашей библиотеке. Вот если потом будем адаптировать курс под курс начинающего программиста минибота на сях, тогда можно будет сделать либу под минибота и вообще с любыми своими функциями и это будет правильно.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение Сергей » 28 июл 2008, 18:54

Ну тогда не делаем библиотеку и продолжаем писать примеры.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 25