Технический форум по робототехнике.
Сергей » 28 июл 2008, 15:08
blindman писал(а):Может имеет смысл сначала сделать простую библиотеку базовых функций, и уже на ее основе делать курс или как-там-его-назвать?
Диапазон аргументов к функциям/макросам задержек расширить, другие базовые вещи сделать.
Вот это я и предлагал в своих первых постах когда предложил использовать функцию delay_s( ), кстати именно .._s() так как новичкам так будет понятнее
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: А про маски и битовые операции всеравно придется обьясныть
PSS: Talk is cheap. Show me the code. Linus
blindman » 28 июл 2008, 15:34
Конечно придется. Но это не зависит от используемого языка. А подобная базовая библиотека кстати удобна не только для начинающих.
rig » 28 июл 2008, 15:36
а планчик накидать для начала.
0 Си, и куда его писать. Описание языка, Как настроить WinAVR, простейшая программа ни чего не делающая(типа пустого цикла while(1) ).
1 мигаем диодом с помощью МК, для этого надо
(базовые знания устройство порта, схемка, детали, операторы Си... )
2 мигаем диодами с помощью МК, для этого надо
(битовые операции... )
3 мигаем диодами с помощью МК, реагируя на кнопку/ки, для этого надо и тд.
(...)
а то вы рванули помигать сразу с функциями и битовыми операциями.
Сергей » 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 );
}
rig » 28 июл 2008, 15:56
uint16_t - это стандартный для WinAVR тип пеерменной?
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;
Сергей » 28 июл 2008, 16:07
Лучше написать еще типа этого
- Код: Выделить всё • Развернуть
#ifndef true
#define true 1
#endif
#ifndef false
#define false 0
#endif
Добавлено спустя 1 минуту 53 секунды:В моем стиле - еще добавь авторов)
=DeaD= » 28 июл 2008, 16:15
Народ, вы чего? Какие еще библиотеки в первых примерах? Давайте без фокусов на первых порах. Никто из серьезных людей не начинают первые же исходники в курсе писать с использованием своей личной библиотеки. Давайте курс по стандартному языку отдельно и свои библиотеки отдельно. Как минимум этому человеку потом не только наши с вами исходники под WinAVR читать, так что давайте не будем его заставлять изучать наши личные способы установитьсбросить бит порта, ему штатных 25 хватит.
Добавлено спустя 4 минуты 46 секунд:
GetLowByte(x) - это вообще в паскале вроде принято имена с большой буквы начинать, в сях вроде наоборот с маленькой...
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 */
А вообще деад прав, первые примеры должны быть просты.
Сергей » 28 июл 2008, 16:36
Я это не к первым примерам, я это к общей библиотеке. Так что попрошу не наезжать
=DeaD= писал(а):GetLowByte(x) - это вообще в паскале вроде принято имена с большой буквы начинать, в сях вроде наоборот с маленькой...
Это я вырезал из С++ проекта, поэтому с большой. А в Си да, с маленькой.
=DeaD= » 28 июл 2008, 17:19
Сергей писал(а):Я это не к первым примерам, я это к общей библиотеке. Так что попрошу не наезжать
Курс отдельно, библиотека отдельно, кто за, кто против?
Сергей » 28 июл 2008, 17:26
=DeaD= писал(а):Сергей писал(а):Я это не к первым примерам, я это к общей библиотеке. Так что попрошу не наезжать
Курс отдельно, библиотека отдельно, кто за, кто против?
Ну ответ очевиден. Конечно отдельно. Только вот курс будет основываца на этой библиотеке или нет? Если нет - то и нет смысла в библиотеке
=DeaD= » 28 июл 2008, 18:47
По-моему очевидно курс не может основываться на библиотеке, потому что так никто из серьезных людей не делает. Надо учить человека разбираться в том, что он будет видеть в листингах чужих программ, а не в нашей библиотеке. Вот если потом будем адаптировать курс под курс начинающего программиста минибота на сях, тогда можно будет сделать либу под минибота и вообще с любыми своими функциями и это будет правильно.
Сергей » 28 июл 2008, 18:54
Ну тогда не делаем библиотеку и продолжаем писать примеры.