WinAvr в вопросах и ответах
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: WinAvr в вопросах и ответах
1 - 16-битная константа (тогда как 1L и 1UL - 32-битные), 1<<x посему будет давать 16-битный результат.
А вообще, если честно, непонятен смысл всех этих действий. Код чуть менее чем полностью - бред. Например, при nbt≥32 получится nn≥4 - выскакиваем за пределы индекса массива.
Попробуйте более внятно объяснить, что Вы хотите получить.
А вообще, если честно, непонятен смысл всех этих действий. Код чуть менее чем полностью - бред. Например, при nbt≥32 получится nn≥4 - выскакиваем за пределы индекса массива.
Попробуйте более внятно объяснить, что Вы хотите получить.
- Реклама
Re: WinAvr в вопросах и ответах
Я хочу из 32 бит принятых с эфира( радиоуправление) получить 32 битное слово, для дальнейшей обработке.
Т.е. sostr|=(1<<31), к примеру, так не пойдёт?
Т.е. sostr|=(1<<31), к примеру, так не пойдёт?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: WinAvr в вопросах и ответах
Нет. Нужно 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);
}
}Re: WinAvr в вопросах и ответах
Спасибо заработало как надо, вот про такие нюансы где можно прочитать??
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: WinAvr в вопросах и ответах
Вообще-то это базовые вещи, а не нюансы. Разрядность результата операции равна максимальной разрядности операндов. Так было всегда, и удивлять это не должно.
Поэтому 1<<x - разрядность int, а 1L<<x - разрядность long.
Поэтому 1<<x - разрядность int, а 1L<<x - разрядность long.
- Реклама
Re: WinAvr в вопросах и ответах
Может это в высших учебных заведениях базовые вещи, а для простых самоучек это нюансы, так как я сейчас поискал по инетуWiseLord писал(а):Вообще-то это базовые вещи, а не нюансы.
и ни чего подобного не нашел.
-
TechMike
- Прорезались зубы
- Сообщения: 247
- Зарегистрирован: Сб дек 15, 2007 23:00:54
- Откуда: Moscow
- Контактная информация:
Re: WinAvr в вопросах и ответах
Доброго дня.
Подскажите есть ли в winavr счетчик количества компиляций или как его можно реализовать без внешнего IDE или из avr studio 4?
Например нужно чтобы после каждой перекомпиляции проекта, счетчик инкрементировался на единицу и этот счетчик можно было вывести в программе в usart.
Подскажите есть ли в winavr счетчик количества компиляций или как его можно реализовать без внешнего IDE или из avr studio 4?
Например нужно чтобы после каждой перекомпиляции проекта, счетчик инкрементировался на единицу и этот счетчик можно было вывести в программе в usart.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: WinAvr в вопросах и ответах
Вот, например, первая же табличка.Там же, про преобразования типов при вычислении выражений.TICLIR писал(а):поискал по инету и ни чего подобного не нашел
Re: WinAvr в вопросах и ответах
пользуйтесь структурами
for(i=0; i<4; i++) stFloat.Byte = bufByte(ofs++);
где
union{uint8_t Byte[4]; float DWord;}stFloat; //структура для слова Float
for(i=0; i<4; i++) stFloat.Byte = bufByte(ofs++);
где
union{uint8_t Byte[4]; float DWord;}stFloat; //структура для слова Float
Re: WinAvr в вопросах и ответах
Зачем считать все компиляции? это просто ананизм какой-то,TechMike писал(а):Доброго дня.
Подскажите есть ли в winavr счетчик количества компиляций или как его можно реализовать без внешнего IDE или из avr studio 4?
Например нужно чтобы после каждой перекомпиляции проекта, счетчик инкрементировался на единицу и этот счетчик можно было вывести в программе в usart.
делаются десятки компиляций в день, зачем знать что она 1276-я сегодня или вообще 16464235-я?
Заведите номер версии ПО (удобно в виде ascii массива или как сочтете нужным) и правьте руками младший байт если нужно знать что релиз изменился...
А запрос версии ПО одна из стандартных команд "уважающего себя" девайса...
Re: WinAvr в вопросах и ответах
Почитайте любой внятный учебник по Си, для начинающих лучше "Голубого Си" еще ничего не написали...TICLIR писал(а):про такие нюансы где можно прочитать??
Последний раз редактировалось _dark Пн июл 27, 2015 09:38:53, всего редактировалось 1 раз.
-
TechMike
- Прорезались зубы
- Сообщения: 247
- Зарегистрирован: Сб дек 15, 2007 23:00:54
- Откуда: Moscow
- Контактная информация:
Re: WinAvr в вопросах и ответах
Мне так проще, чтобы не следить за версией во втором знаке. Компиляций у меня пару за день и то если было время заниматься разработкой._dark писал(а):Зачем считать все компиляции? это просто ананизм какой-то,TechMike писал(а):Доброго дня.
Подскажите есть ли в winavr счетчик количества компиляций или как его можно реализовать без внешнего IDE или из avr studio 4?
Например нужно чтобы после каждой перекомпиляции проекта, счетчик инкрементировался на единицу и этот счетчик можно было вывести в программе в usart.
делаются десятки компиляций в день, зачем знать что она 1276-я сегодня или вообще 16464235-я?
Заведите номер версии ПО (удобно в виде ascii массива или как сочтете нужным) и правьте руками младший байт если нужно знать что релиз изменился...
А запрос версии ПО одна из стандартных команд "уважающего себя" девайса...
Re: WinAvr в вопросах и ответах
Тем паче нет никакой проблеммы кроме лениМне так проще, чтобы не следить за версией во втором знаке. Компиляций у меня пару за день и то если было время заниматься разработкой.
ps
Дату и время компиляции в некоторых компиляторах можно вставлять автоматически (IAR например), а вот менять версию автоматически не встречал ни разу...
если кто это и реализовал, то навярняка в виде костылей...
-
TechMike
- Прорезались зубы
- Сообщения: 247
- Зарегистрирован: Сб дек 15, 2007 23:00:54
- Откуда: Moscow
- Контактная информация:
Re: WinAvr в вопросах и ответах
Лень - двигатель прогресса (С)_dark писал(а):Тем паче нет никакой проблеммы кроме лениМне так проще, чтобы не следить за версией во втором знаке. Компиляций у меня пару за день и то если было время заниматься разработкой.![]()
ps
Дату и время компиляции в некоторых компиляторах можно вставлять автоматически (IAR например), а вот менять версию автоматически не встречал ни разу...
если кто это и реализовал, то навярняка в виде костылей...
winavr тоже может вставлять дату и время компиляции - __DATE__, __TIME__ или __TIMESTAMP__
Создавать переменную с кол-вом компиляций можно вроде через скрипт указанный в makefile, который по сути будет при компиляции создавать подлинкованый к проекту файл с тестом инкрементированной переменной (при компиляции проекта). В деталях пока не разобрался...
Re: WinAvr в вопросах и ответах
Если разберетесь, черкните пару строк, думаю многим ленивым будет интересноВ деталях пока не разобрался...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
решение для windows может быть таким (для линуксоидов не привожу, ибо там все элементарно делается башем)
1. создается файл ver.h, в котором вводится начальный номер версии, например, 0. то есть только 1 символ '0'
2. этот файл инклюдится в вашем исходнике в нужном месте, например, так
3. создается файл increment_version.bat следующего содержимого
4. если вы компилируете проект из IDE, то задаете этой IDE команду запускать increment_version.bat после успешной сборки проекта. если для компиляции используется makefile, то аналогично в нем заставляете исполнить этот батничек после успешной сборки проекта
5. радуетесь и ликуете, поднимая тосты за мое здоровье
1. создается файл ver.h, в котором вводится начальный номер версии, например, 0. то есть только 1 символ '0'
2. этот файл инклюдится в вашем исходнике в нужном месте, например, так
Код: Выделить всё
int version =
#include "ver.h"
;Код: Выделить всё
@echo off
set /p version=<ver.h
set /a version=version+1
echo %version% >ver.h5. радуетесь и ликуете, поднимая тосты за мое здоровье
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: WinAvr в вопросах и ответах
ARV писал(а):.... радуетесь и ликуете, поднимая тосты за мое здоровье
Ну и поскольку сюда заглянул уважаемый ARV, то подниму старый вопрос, который вдруг возник опять...
Как корректно перенести массивы из резидентной RAM во внешнюю SRAM, (т.е. объявить линкеру, что располагать их нужно в SRAM)?
камень mega128A, 32 kB внешней SRAM
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
вот это http://www.simple-devices.ru/attachment ... 3_2011.pdf не проливает свет на ваш вопрос о внешнем ОЗУ?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: WinAvr в вопросах и ответах
Номер компиляции это круто. А можно также заливать рандомное число или текущее время?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
TechMike
- Прорезались зубы
- Сообщения: 247
- Зарегистрирован: Сб дек 15, 2007 23:00:54
- Откуда: Moscow
- Контактная информация:
Re: WinAvr в вопросах и ответах
Время компиляции уже есть в переменной __TIME__Gudd-Head писал(а):Номер компиляции это круто. А можно также заливать рандомное число или текущее время?
Рандомное число можно, если из .bat сможете его сгенерировать.


