Аргумент, с которым не поспоришь... Не учла...ARV писал(а):в результате программа теряет основное качество хорошо написанной программы: портируемость.
WinAvr в вопросах и ответах
- VasaShmidt
- Родился
- Сообщения: 16
- Зарегистрирован: Ср май 26, 2010 13:48:40
Re: WinAvr в вопросах и ответах
- Реклама
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: WinAvr в вопросах и ответах
Ну я там кое-чего нацарапал на тему секций в GCC.
Если кому непонятен текст, то смотрите исходники в приложении, там всё должно быть понятно
Если кому непонятен текст, то смотрите исходники в приложении, там всё должно быть понятно
Последний раз редактировалось avreal Вс май 22, 2011 22:55:07, всего редактировалось 1 раз.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- Zwanzig
- Нашел транзистор. Понюхал.
- Сообщения: 190
- Зарегистрирован: Вт янв 26, 2010 21:49:41
- Откуда: モスクワ
Re: WinAvr в вопросах и ответах
Решил пересесть с асма на Си, и вылезла тут непонятная ошибка
Подключаю я util/delay.h, а компилятор ругается и выдаёт сразу три варнинга:
Что такое? В delay.h посмотрел, там всё правильно в плане синтаксиса, да и неужто в заголовочном файле ошибки будут?
Код: Выделить всё
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:113: error: expected expression before '=' token
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:123: error: expected expression before '=' token
c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:151: error: expected expression before '=' token
Что такое? В delay.h посмотрел, там всё правильно в плане синтаксиса, да и неужто в заголовочном файле ошибки будут?
- Zwanzig
- Нашел транзистор. Понюхал.
- Сообщения: 190
- Зарегистрирован: Вт янв 26, 2010 21:49:41
- Откуда: モスクワ
Re: WinAvr в вопросах и ответах
Ахах, вопрос закрыт, я идиот
Написал #define F_CPU = 8000000L
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
Re: WinAvr в вопросах и ответах
Подскажите, что за ворны вылезают на функцию strncat(buff,temp_buff,4);
../main.c:254: warning: implicit declaration of function 'strncat'
../main.c:254: warning: incompatible implicit declaration of built-in function 'strncat'
buff и temp_buff объявлены так:
char buff[10],temp_buff[10];
PS: всё работает как надо: к строке buff присоединяются первые 4 символа temp_buff.
../main.c:254: warning: implicit declaration of function 'strncat'
../main.c:254: warning: incompatible implicit declaration of built-in function 'strncat'
buff и temp_buff объявлены так:
char buff[10],temp_buff[10];
PS: всё работает как надо: к строке buff присоединяются первые 4 символа temp_buff.
- Реклама
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
#include <string.h> присутствует?AI_Disable писал(а):Подскажите, что за ворны вылезают на функцию strncat(buff,temp_buff,4);
../main.c:254: warning: implicit declaration of function 'strncat'
../main.c:254: warning: incompatible implicit declaration of built-in function 'strncat'
buff и temp_buff объявлены так:
char buff[10],temp_buff[10];
PS: всё работает как надо: к строке buff присоединяются первые 4 символа temp_buff.
битва с дураками проиграна, победители торжествуют. слава победителям!
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
Re: WinAvr в вопросах и ответах
Мастер Ломастер, вы правы, данный инклюд отсутствовал, благодарю. Как же оно тогда работало...

-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
линкер по умолчанию подключает системные библиотеки, поэтому файлы собираются без проблем. а вот компилятору не нравится, что в проекте нет определений функций - вот и варнингAI_Disable писал(а):Мастер Ломастер, вы правы, данный инклюд отсутствовал, благодарю. Как же оно тогда работало...![]()
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: WinAvr в вопросах и ответах
Здравствуйте! Пишу на GCC, интегрированном в AVR Studio.
Есть функция:
Она выводит в два последовательно соединенные сдвиговые регистры ИР8 byte0 и byte1. Таким образом, сначала отсылается byte0, а затем byte1, и в конце выполнения функции в последнем регистре оказывается byte0, а в первом(в том, который и подключен к контроллеру) byte1. Функция работает нормально только если седьмой бит byte1 равен лог.1. Иначе, если седьмой бит byte1 равен лог.0, то в первом регистре ИР8 везде будут нули, независимо от состояния byte0. В общем, как-то так:
Пожалуйста, помогите.
Есть функция:
Код: Выделить всё
#define IR8_data 1
#define IR8_clk 0
#define IR8_PORT PORTC
#define IR8_DDR DDRC
...
void ir8wword(unsigned char byte0,unsigned char byte1)
{
ir8_byte0=byte0;
ir8_byte1=byte1;
unsigned char a,b,c;
b=byte0;
for(a=2;a>0;a--)
{
for(c=8;c>0;c--)
{
if((b & (0b10000000))==0) {IR8_PORT&=~(1<<IR8_data);}
else {IR8_PORT|=1<<IR8_data;}//копирование 0 бита b в PORTC
IR8_PORT|=1<<IR8_clk;//подача тактового импульса
asm(
"nop\n\t"
"nop\n\t"
"nop\n\t");
IR8_PORT&=~(1<<IR8_clk);
b<<=1;//сдвиг b влево на 1
}
b=byte1;
}
}- Левый столбик - то, как вызвана функция, правый столбик - результат на выходе регистров
ir8wword(0xXX,0b1YYYYYYY); 0b1YYYYYYY 0xXX
ir8wword(0xXX,0b0YYYYYYY); 0b0YYYYYYY 0x00
Пожалуйста, помогите.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
вот тут ARV давал совет про SPI: http://radiokot.ru/forum/viewtopic.php?p=643101#p643101
тоже последовательный вывод 1 байта. а вывод двух байтов делается повторным обращением к функции:
а вы что-то намудрили...
тоже последовательный вывод 1 байта. а вывод двух байтов делается повторным обращением к функции:
Код: Выделить всё
void sendword(unsigned int w){
sendbyte(w & 0xFF); // младший байт
sendbyte(w >> 8); // старший байт
}битва с дураками проиграна, победители торжествуют. слава победителям!
Re: WinAvr в вопросах и ответах
У меня написано тоже самое, только в одну функцию объединен вывод сразу двух байт, и WinAvr, видимо, не поддерживает точный синтаксис обращения к какому-то разряду байта.
Ошибка оказалась самая идиотская: забыл провести дорожку питания в 14-й ноге микросхемы (+ питания). Как она вообще функционировала?... Причем там полигон питания +5Вольт находился ну прям в миллиметре от этой ножки микросхемы, просто я забыл добавить эту дорожку при редактировании печатной платы.
А ведь печатная плата была изготовлена месяц назад и прошла проверку...
Вывод: пора переходить со SprintLayout на что-то посерьезнее.
Ошибка оказалась самая идиотская: забыл провести дорожку питания в 14-й ноге микросхемы (+ питания). Как она вообще функционировала?... Причем там полигон питания +5Вольт находился ну прям в миллиметре от этой ножки микросхемы, просто я забыл добавить эту дорожку при редактировании печатной платы.
Вывод: пора переходить со SprintLayout на что-то посерьезнее.
Re: WinAvr в вопросах и ответах
Всем доброго времени суток!
Возник такой вопрос...
Разбирал я по обучалке Динамический опрос клавиатуры, но вот приспичило мне изучить в данном направлении не ассемблер, а С
Собственно, я пробовал приведенный там пример переписать на С, но столкнулся с проблемой - как можно из переменной типа char прочитать конкретный бит???
Есть ли для этого какие-то готовые функции языка? Или как вообще это можно сделать??
З.Ы. нашел в инете такой вариант:
Возник такой вопрос...
Разбирал я по обучалке Динамический опрос клавиатуры, но вот приспичило мне изучить в данном направлении не ассемблер, а С
Собственно, я пробовал приведенный там пример переписать на С, но столкнулся с проблемой - как можно из переменной типа char прочитать конкретный бит???
Есть ли для этого какие-то готовые функции языка? Или как вообще это можно сделать??
З.Ы. нашел в инете такой вариант:
Хоть и для С++, но это не столь важно. Другая проблема в том, что как по мне, то для МК этот код как-то слишком уж обьемный... А попроще можно ли это реализовать?struct BITS
{
bool b1 :1;
bool b2 :1;
bool b3 :1;
bool b4 :1;
bool b5 :1;
bool b6 :1;
bool b7 :1;
bool b8 :1;
};
void myfunction()
{
char cByteRead;
BITS b;
cByteRead = 'a';
cout << "The full byte has a meaning of...: " << cByteRead << endl;
cout << "...which is in int:" << (int)cByteRead << endl;
b = *(BITS*)(&cByteRead);
cout << b.b1 << endl;
cout << b.b2 << endl;
cout << b.b3 << endl;
cout << b.b4 << endl;
cout << b.b5 << endl;
cout << b.b6 << endl;
cout << b.b7 << endl;
cout << b.b8 << endl;
}
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
круто... битовые поля, С++ - это вы знаете, а простейшие битовые операции операции - не знаете...
проверка 3-го бита (начиная с 0-го!) в байте if(byte & (1 << 3)){...} об этом писалось уже мульён раз
проверка 3-го бита (начиная с 0-го!) в байте if(byte & (1 << 3)){...} об этом писалось уже мульён раз
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: WinAvr в вопросах и ответах
Обалдеть... Ну да, протупилМастер Ломастер писал(а):круто... битовые поля, С++ - это вы знаете, а простейшие битовые операции операции - не знаете...
проверка 3-го бита (начиная с 0-го!) в байте if(byte & (1 << 3)){...} об этом писалось уже мульён раз
Просто подобная конструкция описана для проверки битов непосредственно в регистре порта, но я не подумал что таким же образом можно проверить и просто байт...
Спасибо за помощь!
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
а в чем разница-то? порт или байт: это все равно для Си - просто переменные...Bismark писал(а):Просто подобная конструкция описана для проверки битов непосредственно в регистре порта, но я не подумал что таким же образом можно проверить и просто байт...
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: WinAvr в вопросах и ответах
Ну вот этого как раз я и не учел...Мастер Ломастер писал(а):а в чем разница-то? порт или байт: это все равно для Си - просто переменные...
Думал что регистр для WinAVR - это что-то особенное, а не просто однобайтовая переменная
Еще раз спасибо!
Re: WinAvr в вопросах и ответах
День добрый, я здесь новый.
Есть вопрос по программированию в WinAVR, gcc-avr (?) компилятор.
Есть например функция
uint8_t UART0_PrintString( uint8_t * string)
Однако при компиляции строки UART0_PrintString("Preved") выдается warning
pointer targets in passing argument 1 of 'UART0_PrintString' differ in signedness
Если объявить как
uint8_t UART0_PrintString( const char * string)
то ругаться начинает на UART0_PrintString( var_preved ), константная строка понятно проходит
Что мне теперь 2 дублирующие функции объявлять что-ли?
Параметры компилятора
vr-gcc -c -mmcu=atmega64 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./fat32.lst -std=gnu99 -MMD -MP -MF .dep/fat32.o.d fat32.c -o fat32.o fat32.c
Есть вопрос по программированию в WinAVR, gcc-avr (?) компилятор.
Есть например функция
uint8_t UART0_PrintString( uint8_t * string)
Однако при компиляции строки UART0_PrintString("Preved") выдается warning
pointer targets in passing argument 1 of 'UART0_PrintString' differ in signedness
Если объявить как
uint8_t UART0_PrintString( const char * string)
то ругаться начинает на UART0_PrintString( var_preved ), константная строка понятно проходит
Что мне теперь 2 дублирующие функции объявлять что-ли?
Параметры компилятора
vr-gcc -c -mmcu=atmega64 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./fat32.lst -std=gnu99 -MMD -MP -MF .dep/fat32.o.d fat32.c -o fat32.o fat32.c
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
формально char это не uint8_t вот и все. мне кажется, объявив с параметром char* вы избавитесь от варнинга. и следует уточнить. как у вас определена переменная var_preved - возможно, проблема именно в ней.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: WinAvr в вопросах и ответах
объявил.
константная строка проходит без ошибки, вариант с переменной выдает предупреждение
переменная объявлена допустим как uint8_t aux_name[10]
при объявлении ее как char aux_name[10] компиляция проходит без предупреждений, однако придется поковырять пару функций, где она еще используется.
Короче, похоже можно все сделать без ошибок, но все как то переусложнено.
Речь ведь идет просто про byte. Надеюсь программа после этого не перестанет работать.
константная строка проходит без ошибки, вариант с переменной выдает предупреждение
переменная объявлена допустим как uint8_t aux_name[10]
при объявлении ее как char aux_name[10] компиляция проходит без предупреждений, однако придется поковырять пару функций, где она еще используется.
Короче, похоже можно все сделать без ошибок, но все как то переусложнено.
Речь ведь идет просто про byte. Надеюсь программа после этого не перестанет работать.
-
Ar-Gen-Tum
- Прорезались зубы
- Сообщения: 221
- Зарегистрирован: Вс янв 23, 2011 21:51:12
Re: WinAvr в вопросах и ответах
Смотрите: сюдыmaxmihan писал(а): ...
Речь ведь идет просто про byte. Надеюсь программа после этого не перестанет работать.
Нетути в С типа byte. (Можно лишь определить #typedef unsigned char byte)


