WinAvr в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
lix
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 17, 2010 15:32:19
Откуда: Курган

Re: WinAvr в вопросах и ответах

Сообщение lix »

надо добавлять исходник в дерево проекта, а существующий там удалять. как-то так.
QQQ
Нашел транзистор. Понюхал.
Сообщения: 168
Зарегистрирован: Пт сен 18, 2009 11:42:24
Откуда: г. Тверь

Re: WinAvr в вопросах и ответах

Сообщение QQQ »

сделал так: создал новый проект, добавил в него sourse файл. В sours файл вставил содержимое программы. Выдаёт такую ошибку при компиляции:
Вложения
Архив WinRAR.rar
(10.7 КБ) 236 скачиваний
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

QQQ писал(а):сделал так: создал новый проект, добавил в него sourse файл. В sours файл вставил содержимое программы. Выдаёт такую ошибку при компиляции:
вы пытаетесь работать с WinAVR, но почему-то впихиваете проект в Code Vision. вас это не смущает?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
QQQ
Нашел транзистор. Понюхал.
Сообщения: 168
Зарегистрирован: Пт сен 18, 2009 11:42:24
Откуда: г. Тверь

Re: WinAvr в вопросах и ответах

Сообщение QQQ »

:shock: смущает, я не заметил :oops: . Спасибо за замечание буду юзать WinAvr
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Re: WinAvr в вопросах и ответах

Сообщение dt_andrew »

Я никогда не говорил что я крутой программист
Си вроде знаю неплохо, но поучиться у более опытных и знающих никогда не стеснялся
недавно здесь обсуждалось про оптимизацию

и вот сижу я значит отлаживаю очередную прошивку
кода написал уже не мало

компилятор мне выдает что обьем памяти МК использован на 42%
а сделать надо еще не мало

решил перечитать еще раз эту ветку форума и в одном из постов от уважаемого ARV читаю фразу "никогда не используйте функцию _delay_ms() и _delay_us() c параметром в виде переменной - только константа"
сначала не обратил на это внимания но при очередном ползанью по своему коду наткнулся на одну из функций где как раз использовалась эти функции в качестве параметра выступала как раз переменная
их было там всего 2

решил убрать и поставил константы
компилирую...
компилятор мне выдал что обьем памяти МК использован на 22%

Я в ШОКЕ :o :shock:
не верю своим глазам
снова ставлю переменную = 42% ставлю константу = 22%
в 2 раза код уменьшился

Хочу выразить свою благодарность ARV а начинающим почаще заглядывать в эту ветку и перечитывать
учиться учиться и еще раз учиться
Аватара пользователя
skef
Родился
Сообщения: 9
Зарегистрирован: Сб июл 17, 2010 14:16:00

Re: WinAvr в вопросах и ответах

Сообщение skef »

программа вывода чисел на семисигментный индикатор через сдвиговый регистр HC595.
и там такой кусочек:

data = ~(maska[1]);//инвертировать для вывода
//в сдвиговый регистр, вывести число "1"
send_data(data); //передать символ

вот как вот здесь сделать чтобы можно было выводить числа
от 0 до 9 на индикатор. (не maska[1] а например значением
переменной (допустим значение переменной от 0 до 9))
Вложения
7_сег_индикатор.txt
(1.67 КБ) 235 скачиваний
на любой элемент найдется мощность, которая его сожжет.
alexval2006
Прорезались зубы
Сообщения: 225
Зарегистрирован: Сб мар 10, 2007 20:05:39
Откуда: валуйки
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение alexval2006 »

Доброй ночи всем. Переписую код с IAR на WinAVR. Увидел в коде незнакомую строку extern bool b; я так понимаю это нечто типа volatile переменые эти используютса внутри обработчика прирывания по уарт.
И еще изврат нашол true и false присваиваютса переменным как значения нигде необявлены в пром контролерах это серавно что присвоит переменой 1 или сбросить ее в 0 тут также?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

с точки зрения поведения оптимизатора extern и volatile приводят к почти одинаковым результатам, однако, это не одно и то же! extern означает, что переменная определена и существует в "чужом модуле", т.е. не там, где используется, в то время как volatile обозначает, что переменная может поменять свое значение в любой момент из-за действия "внешних неизвестных сил". даже extern-переменные должны объявляться volatile, если используются в прерываниях!

что касается true, false и bool, то это константы и типы, которых по стандарту Си нет, то есть это введенные пользователем константы и типы. часто можно видеть такое определение этого (можно использовать и вам, но лучше докопаться до определения этих вещей в вашем проекте):

Код: Выделить всё

typedef int bool;
#define true (1 == 1)
#define false !true
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение avreal »

В C99 есть тип _Bool
6.2.5 Types
2 An object declared as type _Bool is large enough to store the values 0 and 1.
и заголовочный файл stdbool.h предопределённого вида

Код: Выделить всё

#define bool   _Bool
#define true   1
#define false   0
Я не проверял специально, но кажется, что gcc поддерживает тип _Bool независимо от ключа -std и stdbool.h всегда даёт нужный результат.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
alexval2006
Прорезались зубы
Сообщения: 225
Зарегистрирован: Сб мар 10, 2007 20:05:39
Откуда: валуйки
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение alexval2006 »

в том то и дело что таково #define true (1 == 1) дефайна в коде я не нашёл наверно извраты IAR ну да ладно пропишу либо свои дефайны либо перепишу на нули и 1 бол по идеи тип данных в один бит если я правильно понял а раз в вин арвр он не предусмотрен значит объявим в один байт
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

alexval2006 писал(а):в том то и дело что таково #define true (1 == 1) дефайна в коде я не нашёл наверно извраты IAR ну да ладно пропишу либо свои дефайны либо перепишу на нули и 1 бол по идеи тип данных в один бит если я правильно понял а раз в вин арвр он не предусмотрен значит объявим в один байт
тип данных в 1 бит вообще не существует в Си. более того, тип bool или BOOL или их аналоги в базовом Си так же не существуют. следуя логике Си можно предположить, что все-таки под введенный в С99 тип _Bool выделен int, который является базовым типом для всего Си.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
alexval2006
Прорезались зубы
Сообщения: 225
Зарегистрирован: Сб мар 10, 2007 20:05:39
Откуда: валуйки
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение alexval2006 »

там используется какая то библиотека #include "stdbool.h"
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение avreal »

stdbool.h — это и есть С99 заголовочный файл для ипользования типа _Bool как bool через прокладку из #define, фрагмент этого файла я привёл выше.
ARV писал(а):можно предположить, что все-таки под введенный в С99 тип _Bool выделен int, который является базовым типом для всего Си.
Стандарт отдаёт это на откуп реализации. Требует только одного — чтобы выделенного места хватало для хранения значений 0 и 1. И, кстати, отдельно говорит, что ранг типа _Bool ниже ранга любого целочисленного (впрочем, это следует из того, что диапазон изменения значения типа _Bool простирается аж от 0 до 1).
Это, конечно, не означает, что компилятор может выделять память размером в один бит, так как минимальной адресуемой единицей является char. Но он и не обязан выделять int.
gcc что для avr, что для x86_64, использует байт.

А вот требование «места должно хватать для хранения 0 и 1» означает, что оставшиеся семь бит в байте могут быть мусором, не анализируемым компилятором (padding bits согласно терминологии стандарта). Но это неудобно с точки зрения совместимости с обычнм подходом С, когда значение логических операторов имеет тип int и значения 0 и 1 и для преобразований _Bool к другим целочисленным типам. Так что не думаю, что на обычных архитектурах кто-либо будет так делать.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
alexval2006
Прорезались зубы
Сообщения: 225
Зарегистрирован: Сб мар 10, 2007 20:05:39
Откуда: валуйки
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение alexval2006 »

спасибо за пояснение :)
PILS1396
Родился
Сообщения: 5
Зарегистрирован: Вт ноя 16, 2010 13:37:28
Контактная информация:

Помогите разобратьса с UARTом

Сообщение PILS1396 »

Я в микроконтролерном деле новачок, но у меня курсовая по которой нужно сделать устройство ЧПУ.
И проблема в том что когда я отправляю с терминала (COM Port Toolkit 3.9) координату положения 150 то по программе устройство ищет заданное положение, но у меня в программе есть условие:
if (rx_buffer [0]> 2) {
[Группа операторов]
};
и это условие выполняется, хотя по идеи не должно, и соответственно устройство работает неправильно.
Подскажите пожалуйста в чем ошибка. Заранее спасибо.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

1. при чем тут WinAVR? здесь элементарное незнание Си или собственной аппаратуры.
2. вы не сказали, что у вас в rx_buffer[0] хранится, что вообще туда попадает и т.д.
3. в каком формате вы отправляете задание: в символьном или бинарном?

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

Мой уютный бложик... заходите!
Аватара пользователя
AlexFisher
Мучитель микросхем
Сообщения: 493
Зарегистрирован: Вт апр 21, 2009 13:31:27
Откуда: Санкт-Петербург
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение AlexFisher »

Он же в микроконтроллерах новачок и не знает про волшебное слово имулатор 8)
[i]Да здравствует всё то, благодаря чему мы не смотря ни на что![/i]
PILS1396
Родился
Сообщения: 5
Зарегистрирован: Вт ноя 16, 2010 13:37:28
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение PILS1396 »

ARV писал(а):1. при чем тут WinAVR? здесь элементарное незнание Си или собственной аппаратуры.
2. вы не сказали, что у вас в rx_buffer[0] хранится, что вообще туда попадает и т.д.
3. в каком формате вы отправляете задание: в символьном или бинарном?

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

Извиняюсь, ошибся темой пишу в cvavr. Но в прерывании (при переполнении буфера приема) каждый байт записывается в массиве rx_buffer [], а нумерации начинается с нуля.
То есть как я понимаю переданы 150 записываются в массиве как:
rx_buffer [0] = 1
rx_buffer [1] = 5
rx_buffer [2] = 0
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

PILS1396 писал(а):Извиняюсь, ошибся темой пишу в cvavr. Но в прерывании (при переполнении буфера приема) каждый байт записывается в массиве rx_buffer [], а нумерации начинается с нуля.
То есть как я понимаю переданы 150 записываются в массиве как:
rx_buffer [0] = 1
rx_buffer [1] = 5
rx_buffer [2] = 0
так вот хренушки! если вы послали "150" из терминальной программы, то у вас будет
rx_buffer [0] = '1'
rx_buffer [1] = '5'
rx_buffer [2] = '0'

а это совершенно не то!
с другой стороны, я не знаю, что у вас за терминалка, но ежели она вдруг посылает именно ЧИСЛО 150, то у вас будет еще лучше:
rx_buffer [0] = 150
rx_buffer [1] = неизвестно что
rx_buffer [2] = неизвестно что


собственно, о чем я и писал: вы не знаете Си и своих собственных инструментов. бегом читать букварь! :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
AlexFisher
Мучитель микросхем
Сообщения: 493
Зарегистрирован: Вт апр 21, 2009 13:31:27
Откуда: Санкт-Петербург
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение AlexFisher »

Ошибок может быть по крайней мере 2:
1. Группа операторов начнет работать, когда передан всего один символ из трех (то есть уже не правильно)
2. Группа операторов не вычищает за собой вышеозначенный буфер, то есть не заносит туда 0х00
[i]Да здравствует всё то, благодаря чему мы не смотря ни на что![/i]
Ответить

Вернуться в «AVR»