Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
30.01.2012, 09:45
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Деление съедает ROM
Всем привет!
Понадобилось вычислить два разных отношения.
Память заполнилась на 82%, если закоментировать весь основной код.
А основной код, если закоментировать деление, заполняет память на 25%
В итоге перебор в семь процентов.
Основной код простой, даже оптимизировать нечего.
Кое где даже ассемблерные вставки сделал.
Но всё равно получил 105%
Можно ли как-то почистить получающийся ASM файл в области деления или там всё, прям до единой команды нужное?
Использую PIC12F629 и CCScompiler
|
|
|
|
30.01.2012, 09:50
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
Re: деление съедает ROM
Может быть почитать как люди делают деление и для своих целей использовать с небольшими переделками ?
Вы какие числа делите ? возможно не обязательно использовать процедуру деления из Си.
|
|
|
|
30.01.2012, 09:55
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: деление съедает ROM
в первом случае делю
7,28345 на 12,48745
а во втором
27812 на 65535
числа каждый раз разные, кроме последней константы
|
|
|
|
30.01.2012, 10:05
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
Re: деление съедает ROM
во втором случае я бы делил как в школе в столбик, умножаем 27812 на 10 и в цикле вычитаем из получившегося произведения 65535 (считаем сколько раз вычли пока не получили отрицательное число), ну и до нужной цифры после запятой домножаем на 10 делимое .. покуда не получим нужную точность.
а в первом случае я бы домножил числа до целого.. на 100000 в Вашем случае и так же вычитал бы.. не претендую на хорошее решение, но примерно так делал бы я... можно почитать как люди делят в таком случае..
Умножение делать сдвигом влево на "чётное" количество и потом сложением добивать до десятичного "круглого"
|
|
|
|
30.01.2012, 10:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: деление съедает ROM
Сообщение от yellow87
|
в первом случае делю
7,28345 на 12,48745
а во втором
27812 на 65535
числа каждый раз разные, кроме последней константы
|
Какая точность результата (кол-во знаков после запятой) нужна?
P.S. Как вариант избавиться от запятой и использовать соответствующие процедуры.
|
|
|
|
30.01.2012, 10:33
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: деление съедает ROM
нужно три знака после запятой(максимум четыре)
А ассемблер наверное до пятнадцатого знака всё вычисляет?
|
|
|
|
30.01.2012, 10:37
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
Re: деление съедает ROM
yellow87, сколько нужно после запятой, столько раз и надо на 10 домножать при вычитании. Хоть стопицот, покуда памяти для результата в контроллере хватит.
|
|
|
|
30.01.2012, 10:41
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: деление съедает ROM
Деление на 65536 равносильно сдвигу вправо на 16 разрядов. Это на много быстрее.
|
|
|
|
30.01.2012, 10:56
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
Re: деление съедает ROM
Совершенно верно.
|
|
|
|
30.01.2012, 10:58
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: деление съедает ROM
Easyrider83, если любое число меньшее 65536 сдвинуть на 16 разрядов вправо то получится нуль
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:24.
|
|