roboforum.ru

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

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

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

Сергей » 28 июл 2008, 15:08

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

Вот это я и предлагал в своих первых постах когда предложил использовать функцию delay_s( ), кстати именно .._s() так как новичкам так будет понятнее

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 :)

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

blindman » 28 июл 2008, 15:34

Конечно придется. Но это не зависит от используемого языка. А подобная базовая библиотека кстати удобна не только для начинающих.

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

rig » 28 июл 2008, 15:36

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

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 );
}

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

rig » 28 июл 2008, 15:56

uint16_t - это стандартный для WinAVR тип пеерменной?

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;

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

Сергей » 28 июл 2008, 16:07

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


Добавлено спустя 1 минуту 53 секунды:
В моем стиле - еще добавь авторов)

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

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

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

Добавлено спустя 4 минуты 46 секунд:
GetLowByte(x) - это вообще в паскале вроде принято имена с большой буквы начинать, в сях вроде наоборот с маленькой...

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 */


А вообще деад прав, первые примеры должны быть просты.

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

Сергей » 28 июл 2008, 16:36

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

Это я вырезал из С++ проекта, поэтому с большой. А в Си да, с маленькой.

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

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

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

Курс отдельно, библиотека отдельно, кто за, кто против?

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

Сергей » 28 июл 2008, 17:26

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

Курс отдельно, библиотека отдельно, кто за, кто против?
Ну ответ очевиден. Конечно отдельно. Только вот курс будет основываца на этой библиотеке или нет? Если нет - то и нет смысла в библиотеке

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

=DeaD= » 28 июл 2008, 18:47

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

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

Сергей » 28 июл 2008, 18:54

Ну тогда не делаем библиотеку и продолжаем писать примеры.


Rambler\'s Top100 Mail.ru counter