void decodeValue(int value); int power10(unsigned char power);
int main() { decodeValue(1234);
return 0; } //Декодируем void decodeValue(int value) { int Value[4];
for (unsigned char i = 0; i < 4; i++) { Value[i] = (value / power10(i)) % 10; } }
//Считаем степень десятки(можно стандартной функцией, но нужно привести к int) int power10(unsigned char power) { if (!power) return 1; else return 10 * power10(power - 1); }
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
mr4ester писал(а):он все равно не ругается на то что я не объявил Error: D:\cvavr\zamok\zamok 2.c(246): must declare first in block, и еще одна ошибка, скорее наверно что я плохо синтаксис языка знаю, есть функция опроса сенсоров, вообщем вот она чтоб не возникало недопонимания Код:
Вообще в си есть три этапа использования функции 1.объявление 2.описание 3.использование
Можно совместить объявление с описанием. Вы объявление функции не сделали, и уже вызываете её. Блок описания переместите выше, чем первый вызов функции и все будет ок. Либо все по правилам объявляйте.
Apparatchik писал(а):В CVAVR переменную нужно объявлять в начале функции или глобально, где вздумается некатит (по крайней мере в той версии, что я пользовался).
переменные можно объявлять в начале блока. причем, существуют рекомендации - максимально сужать область видимости переменных.
a_skr писал(а):переменные можно объявлять в начале блока. причем, существуют рекомендации - максимально сужать область видимости переменных.
Вот только что проверил CVAVR 1.25.9 если объявить переменную не в начале функции, а непосредственно перед циклом, компилятор дает ошибку must declare first in block. В GCC конечно таких проблем нету.
в начале блока = first in block. т.е. сразу после открывающей фигурной скобки и область видимости будет ограничена этим блоком { } ps. подправил свое сообщение для наглядности
Подскажите,как сделать поочередное чтение элементов массива через нажатие кнопки? Ну типа: нажал–отпустил––1й элемент; нажал–отпустил––2й элемент... и т.д.,затем все сначала.
1 индекс массива равен 0 2 считываем состояние кнопок, если нажата, делаем антидребезговую задержку 3 после задержки читаем состояние, если не изменилось ждем в цикле пока кнопка будет отпущена 4 читаем элемент массива 5 инкрементируем индекс массива 6 возврат к п.2
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Ребят,вопрос возник по CVAVR. Совсем отчаявшись запустить ds1307 собственноручно, я подумал попытаться переписать функции с CVAVR на IAR. Значит так, в DS1307.h используются DS1307.lib(где прописаны функции) и I2C.h. В DS1307.lib функции описаны на основе функций I2C, но в I2C.h только прототипы функций. Где же на самом деле описываются функции I2C?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Ничего у Вас не выйдет, они "зашиты" гдето в компиляторе, так что придется писать либо свои либо взять готовые открытые (могу поделится для Eclipse в личке).
P.S. а что именно у вас невыходит с CVAVR, там ведь все просто?
В процессе компиляции проекта CodeVisionAVR ругается, точнее выдает предупреждение: "Warning: _________: macro 'TWINT' was redefined" "Warning: _________: macro 'TWEA' was redefined" "Warning: _________: macro 'TWSTA' was redefined" "Warning: _________: macro 'TWSTO' was redefined" "Warning: _________: macro 'TWEN' was redefined"
Вот сам исходник:
#include <mega16.h> // Задаем параметры микроконтроллера #include <delay.h> // Это для задержек Delay_ms () #include <bcd.h> #include <stdio.h>//для sprintf //***************************************************************************** #asm .equ __i2c_port=0x15; PORTC // Кристал подключаем на PORT C к ножкам 6 и 7 .equ __sda_bit=1 .equ __scl_bit=0 #endasm #include <i2c.h> #include <ds1307.h> // Подцепили кристал
#define TWINT 7 //для доступа к виду типа TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) #define TWEA 6 #define TWSTA 5 #define TWSTO 4 #define TWEN 2
Вообще CVAVR по умолчанию не предопределяет биты, поэтому, видимо, автор сделал это определение. А в настройках можно их включить так: И тогда эти дефайны уже будут не нужны.