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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

1 - 16-битная константа (тогда как 1L и 1UL - 32-битные), 1<<x посему будет давать 16-битный результат.

А вообще, если честно, непонятен смысл всех этих действий. Код чуть менее чем полностью - бред. Например, при nbt≥32 получится nn≥4 - выскакиваем за пределы индекса массива.

Попробуйте более внятно объяснить, что Вы хотите получить.
Реклама
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

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

Сообщение TICLIR »

Я хочу из 32 бит принятых с эфира( радиоуправление) получить 32 битное слово, для дальнейшей обработке.
Т.е. sostr|=(1<<31), к примеру, так не пойдёт?
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Нет. Нужно 1UL<<31. Потому то просто 1<<x при любых x больших 15 будет гарантировано обращаться в ноль, т.к. оба операнда (1 и x) - 16-битные, как и результат операции.

Что-то вроде

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

uint8_t i;
uint32_t result;
result = 0;
for (i = 0; i < 32; i++) {
  if (getBit()) {
    result |= (1UL << i); 
  }
}
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

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

Сообщение TICLIR »

Спасибо заработало как надо, вот про такие нюансы где можно прочитать??
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Вообще-то это базовые вещи, а не нюансы. Разрядность результата операции равна максимальной разрядности операндов. Так было всегда, и удивлять это не должно.

Поэтому 1<<x - разрядность int, а 1L<<x - разрядность long.
Реклама
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

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

Сообщение TICLIR »

WiseLord писал(а):Вообще-то это базовые вещи, а не нюансы.
Может это в высших учебных заведениях базовые вещи, а для простых самоучек это нюансы, так как я сейчас поискал по инету
и ни чего подобного не нашел.
Реклама
TechMike
Прорезались зубы
Сообщения: 247
Зарегистрирован: Сб дек 15, 2007 23:00:54
Откуда: Moscow
Контактная информация:

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

Сообщение TechMike »

Доброго дня.
Подскажите есть ли в winavr счетчик количества компиляций или как его можно реализовать без внешнего IDE или из avr studio 4?
Например нужно чтобы после каждой перекомпиляции проекта, счетчик инкрементировался на единицу и этот счетчик можно было вывести в программе в usart.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

TICLIR писал(а):поискал по инету и ни чего подобного не нашел
Вот, например, первая же табличка.Там же, про преобразования типов при вычислении выражений.
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

пользуйтесь структурами

for(i=0; i<4; i++) stFloat.Byte = bufByte(ofs++);
где
union{uint8_t Byte[4]; float DWord;}stFloat; //структура для слова Float
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

TechMike писал(а):Доброго дня.
Подскажите есть ли в winavr счетчик количества компиляций или как его можно реализовать без внешнего IDE или из avr studio 4?
Например нужно чтобы после каждой перекомпиляции проекта, счетчик инкрементировался на единицу и этот счетчик можно было вывести в программе в usart.
Зачем считать все компиляции? это просто ананизм какой-то,
делаются десятки компиляций в день, зачем знать что она 1276-я сегодня или вообще 16464235-я?
Заведите номер версии ПО (удобно в виде ascii массива или как сочтете нужным) и правьте руками младший байт если нужно знать что релиз изменился...
А запрос версии ПО одна из стандартных команд "уважающего себя" девайса...
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

TICLIR писал(а):про такие нюансы где можно прочитать??
Почитайте любой внятный учебник по Си, для начинающих лучше "Голубого Си" еще ничего не написали...
Последний раз редактировалось _dark Пн июл 27, 2015 09:38:53, всего редактировалось 1 раз.
TechMike
Прорезались зубы
Сообщения: 247
Зарегистрирован: Сб дек 15, 2007 23:00:54
Откуда: Moscow
Контактная информация:

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

Сообщение TechMike »

_dark писал(а):
TechMike писал(а):Доброго дня.
Подскажите есть ли в winavr счетчик количества компиляций или как его можно реализовать без внешнего IDE или из avr studio 4?
Например нужно чтобы после каждой перекомпиляции проекта, счетчик инкрементировался на единицу и этот счетчик можно было вывести в программе в usart.
Зачем считать все компиляции? это просто ананизм какой-то,
делаются десятки компиляций в день, зачем знать что она 1276-я сегодня или вообще 16464235-я?
Заведите номер версии ПО (удобно в виде ascii массива или как сочтете нужным) и правьте руками младший байт если нужно знать что релиз изменился...
А запрос версии ПО одна из стандартных команд "уважающего себя" девайса...
Мне так проще, чтобы не следить за версией во втором знаке. Компиляций у меня пару за день и то если было время заниматься разработкой.
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

Мне так проще, чтобы не следить за версией во втором знаке. Компиляций у меня пару за день и то если было время заниматься разработкой.
Тем паче нет никакой проблеммы кроме лени :))

ps
Дату и время компиляции в некоторых компиляторах можно вставлять автоматически (IAR например), а вот менять версию автоматически не встречал ни разу...
если кто это и реализовал, то навярняка в виде костылей...
TechMike
Прорезались зубы
Сообщения: 247
Зарегистрирован: Сб дек 15, 2007 23:00:54
Откуда: Moscow
Контактная информация:

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

Сообщение TechMike »

_dark писал(а):
Мне так проще, чтобы не следить за версией во втором знаке. Компиляций у меня пару за день и то если было время заниматься разработкой.
Тем паче нет никакой проблеммы кроме лени :))

ps
Дату и время компиляции в некоторых компиляторах можно вставлять автоматически (IAR например), а вот менять версию автоматически не встречал ни разу...
если кто это и реализовал, то навярняка в виде костылей...
Лень - двигатель прогресса (С)
winavr тоже может вставлять дату и время компиляции - __DATE__, __TIME__ или __TIMESTAMP__
Создавать переменную с кол-вом компиляций можно вроде через скрипт указанный в makefile, который по сути будет при компиляции создавать подлинкованый к проекту файл с тестом инкрементированной переменной (при компиляции проекта). В деталях пока не разобрался...
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

В деталях пока не разобрался...
Если разберетесь, черкните пару строк, думаю многим ленивым будет интересно :))
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

решение для windows может быть таким (для линуксоидов не привожу, ибо там все элементарно делается башем)
1. создается файл ver.h, в котором вводится начальный номер версии, например, 0. то есть только 1 символ '0'
2. этот файл инклюдится в вашем исходнике в нужном месте, например, так

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

int version =
#include "ver.h"
;
3. создается файл increment_version.bat следующего содержимого

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

@echo off
set /p version=<ver.h
set /a version=version+1
echo %version% >ver.h
4. если вы компилируете проект из IDE, то задаете этой IDE команду запускать increment_version.bat после успешной сборки проекта. если для компиляции используется makefile, то аналогично в нем заставляете исполнить этот батничек после успешной сборки проекта
5. радуетесь и ликуете, поднимая тосты за мое здоровье :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
_dark
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт апр 26, 2012 14:30:40
Откуда: под Москвой

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

Сообщение _dark »

ARV писал(а):.... радуетесь и ликуете, поднимая тосты за мое здоровье :)))
:beer: пьем валерьянку кружками за здоровье ARV!!! :))

Ну и поскольку сюда заглянул уважаемый ARV, то подниму старый вопрос, который вдруг возник опять...

Как корректно перенести массивы из резидентной RAM во внешнюю SRAM, (т.е. объявить линкеру, что располагать их нужно в SRAM)?
камень mega128A, 32 kB внешней SRAM
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

вот это http://www.simple-devices.ru/attachment ... 3_2011.pdf не проливает свет на ваш вопрос о внешнем ОЗУ?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Номер компиляции это круто. А можно также заливать рандомное число или текущее время?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
TechMike
Прорезались зубы
Сообщения: 247
Зарегистрирован: Сб дек 15, 2007 23:00:54
Откуда: Moscow
Контактная информация:

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

Сообщение TechMike »

Gudd-Head писал(а):Номер компиляции это круто. А можно также заливать рандомное число или текущее время?
Время компиляции уже есть в переменной __TIME__
Рандомное число можно, если из .bat сможете его сгенерировать.
Ответить

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