Добрый вечер, помогите разобраться. Из 32 бит пытаюсь собрать что нибудь, вот массив складывается из 4 байт, пытаюсь собрать собрать 32
битное слово, получается ерунда. Где я не прав?
1 - 16-битная константа (тогда как 1L и 1UL - 32-битные), 1<<x посему будет давать 16-битный результат.
А вообще, если честно, непонятен смысл всех этих действий. Код чуть менее чем полностью - бред. Например, при nbt≥32 получится nn≥4 - выскакиваем за пределы индекса массива.
Попробуйте более внятно объяснить, что Вы хотите получить.
Нет. Нужно 1UL<<31. Потому то просто 1<<x при любых x больших 15 будет гарантировано обращаться в ноль, т.к. оба операнда (1 и x) - 16-битные, как и результат операции.
Вообще-то это базовые вещи, а не нюансы. Разрядность результата операции равна максимальной разрядности операндов. Так было всегда, и удивлять это не должно.
Поэтому 1<<x - разрядность int, а 1L<<x - разрядность long.
Доброго дня.
Подскажите есть ли в winavr счетчик количества компиляций или как его можно реализовать без внешнего IDE или из avr studio 4?
Например нужно чтобы после каждой перекомпиляции проекта, счетчик инкрементировался на единицу и этот счетчик можно было вывести в программе в usart.
TechMike писал(а):Доброго дня.
Подскажите есть ли в winavr счетчик количества компиляций или как его можно реализовать без внешнего IDE или из avr studio 4?
Например нужно чтобы после каждой перекомпиляции проекта, счетчик инкрементировался на единицу и этот счетчик можно было вывести в программе в usart.
Зачем считать все компиляции? это просто ананизм какой-то,
делаются десятки компиляций в день, зачем знать что она 1276-я сегодня или вообще 16464235-я?
Заведите номер версии ПО (удобно в виде ascii массива или как сочтете нужным) и правьте руками младший байт если нужно знать что релиз изменился...
А запрос версии ПО одна из стандартных команд "уважающего себя" девайса...
TechMike писал(а):Доброго дня.
Подскажите есть ли в winavr счетчик количества компиляций или как его можно реализовать без внешнего IDE или из avr studio 4?
Например нужно чтобы после каждой перекомпиляции проекта, счетчик инкрементировался на единицу и этот счетчик можно было вывести в программе в usart.
Зачем считать все компиляции? это просто ананизм какой-то,
делаются десятки компиляций в день, зачем знать что она 1276-я сегодня или вообще 16464235-я?
Заведите номер версии ПО (удобно в виде ascii массива или как сочтете нужным) и правьте руками младший байт если нужно знать что релиз изменился...
А запрос версии ПО одна из стандартных команд "уважающего себя" девайса...
Мне так проще, чтобы не следить за версией во втором знаке. Компиляций у меня пару за день и то если было время заниматься разработкой.
Мне так проще, чтобы не следить за версией во втором знаке. Компиляций у меня пару за день и то если было время заниматься разработкой.
Тем паче нет никакой проблеммы кроме лени
ps
Дату и время компиляции в некоторых компиляторах можно вставлять автоматически (IAR например), а вот менять версию автоматически не встречал ни разу...
если кто это и реализовал, то навярняка в виде костылей...
Мне так проще, чтобы не следить за версией во втором знаке. Компиляций у меня пару за день и то если было время заниматься разработкой.
Тем паче нет никакой проблеммы кроме лени
ps
Дату и время компиляции в некоторых компиляторах можно вставлять автоматически (IAR например), а вот менять версию автоматически не встречал ни разу...
если кто это и реализовал, то навярняка в виде костылей...
Лень - двигатель прогресса (С)
winavr тоже может вставлять дату и время компиляции - __DATE__, __TIME__ или __TIMESTAMP__
Создавать переменную с кол-вом компиляций можно вроде через скрипт указанный в makefile, который по сути будет при компиляции создавать подлинкованый к проекту файл с тестом инкрементированной переменной (при компиляции проекта). В деталях пока не разобрался...
решение для windows может быть таким (для линуксоидов не привожу, ибо там все элементарно делается башем)
1. создается файл ver.h, в котором вводится начальный номер версии, например, 0. то есть только 1 символ '0'
2. этот файл инклюдится в вашем исходнике в нужном месте, например, так
@echo off
set /p version=<ver.h
set /a version=version+1
echo %version% >ver.h
4. если вы компилируете проект из IDE, то задаете этой IDE команду запускать increment_version.bat после успешной сборки проекта. если для компиляции используется makefile, то аналогично в нем заставляете исполнить этот батничек после успешной сборки проекта
5. радуетесь и ликуете, поднимая тосты за мое здоровье
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
ARV писал(а):.... радуетесь и ликуете, поднимая тосты за мое здоровье
пьем валерьянку кружками за здоровье ARV!!!
Ну и поскольку сюда заглянул уважаемый ARV, то подниму старый вопрос, который вдруг возник опять...
Как корректно перенести массивы из резидентной RAM во внешнюю SRAM, (т.е. объявить линкеру, что располагать их нужно в SRAM)?
камень mega128A, 32 kB внешней SRAM