Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
30.01.2009, 19:26
|
#1
|
Вид на жительство
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
|
Большие отрицательные числа и АВР
Привет.
Как всегда сидю кодю.... ![Улыбка](images/smilies/icon_smile.gif)
Возникли проблемки в понимании природы отрицательного числа в АВР.
Насколько я знаю - при отрицательном результате поднимается флаг знака числа S.
Как же быть когда нада запхнуть данное число в память? Ибо флаг то не сохранишь вместе с числом в одну ячейку?
А задача таковая:
Есть числа большие на 16-24 бита.
В большинстве случаев (скорее всегда) я число будет занимать младших 20 бит. Старших 4-ри будут свободные. На их и надеюсь.
А идея вот какая (геморно немного):
После окончания операции определяем состояние флага S, обнуляем значение старших 4-х бит, устанавливаем значение 23 бита в соотвествие с значением данного флага. Пр ивызове же числа перед операцией считываем значение 23-го бита и в зависимости от того устанавливаем флаг S, после чего старших 4-ри бита обнуляем.
Верно ли предлагаю?
Возможен ли более простой подход?
|
|
|
|
30.01.2009, 19:54
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Сделайте то что вам нужно нормальной арифметикой на Си в компиляторе и скомпильте. Ответ на АСМ-е будет в листинге.
CVAVR скачать всего 2 Мб ! Решение рядом ...
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
30.01.2009, 20:01
|
#3
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
"Дополнительный код" в AVR реализован на командном уровне МК. Дерни в Книги "свежачок" Ю. Ревича "Практическое программирование МК Atmel AVR на языке ассемблера" расписано со стр. 158.
----------------------------------------------------
Лучшее средство от гемороя - свечка в Ж...
|
|
|
|
30.01.2009, 20:03
|
#4
|
Вид на жительство
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
|
Идея гуд, попробую.
|
|
|
|
31.01.2009, 00:24
|
#5
|
Вид на жительство
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
|
Мда, определение одной переменной типа флоат занимает ровным счётом 640байт....
Ужос прямо.
Хотя.. что я ждал другого. Самому написать - в напряг...
|
|
|
|
31.01.2009, 01:09
|
#6
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Сообщение от ua_gruzin
|
Мда, определение одной переменной типа флоат занимает ровным счётом 640байт....
|
Как это вы определили ?
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
31.01.2009, 01:43
|
#7
|
Вид на жительство
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
|
По коду.
Написал в Кодевижин.
Дало пустой код на 0.5% от амтеги640
Сделал операцию сложения и умножения двух чисел флоат - дало на выходе 1.3%
Может с погрешностью 640 написал, так 448, но всеравно не мало.
Хотя с другой стороны - в коде много стандартных функций. И повторный их вызов не требует повторной их записи в код.
Дублироване команд суммирования не приводит к такому резкому увеличению кода.
|
|
|
|
31.01.2009, 11:41
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Сообщение от ua_gruzin
|
Хотя с другой стороны - в коде много стандартных функций. И повторный их вызов не требует повторной их записи в код.
|
Вот именно !
Так и первый printf добавляет в прогу 1000 с лишним байт, но последующие вызов уже умерено расходуют память.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:25.
|
|