Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
25.07.2011, 12:49
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Hi-Tech Picc не хочет считать
PHP код:
|
#include ‹pic.h›
unsigned char K=0;
unsigned int C,C1=0;
C=C1*((1024+K-127)/1024); // при ((1024+K-127)/1024) ‹ 1 совсем виснет.
|
Как преобразовать типы чисел?
|
|
|
Сказали "Спасибо" Slava-martyn
|
|
|
25.07.2011, 13:36
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Ну правильно. Вместо деления на 1024 примените сдвиг вправо на 10 разрядов. И пемененная С у вас должна быть float (4 байта с точкой) - не знаю, как будет на С.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо Easyrider83 за это сообщение:
|
|
|
25.07.2011, 13:49
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Переменная C - unsigned int (0..65535), по другому не пойдёт.
Вот это: C1*((1024+K-127)/1024) надо округлить до целого и преобразовать к unsigned int.
С1 там тоже unsigned int, возможно его вначале придётся к float привести, а потом перемножить, а потом округлить и в переменной C сохранить.
Сообщение от Easyrider83
|
не знаю, как будет на С
|
И я тоже!
|
|
|
Сказали "Спасибо" Slava-martyn
|
|
|
25.07.2011, 14:29
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Если в действии C1*((1024+K-127) вы не выходите за пределы 0...65535 (DEC), то ничего страшного. При условии, что С1 - целая положительная переменная.
Тогда пишем так:
C1*((1024+K-127)››10
Должно работать.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
25.07.2011, 14:51
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Ну вот написал вот так:
#include ‹math.h›
float L=0.0;
L=ceil(3.343);
Говорит вроде как места нету.
PHP код:
|
Build F:\PICprog\1\1 for device 12F675
Using driver C:\Program Files\HI-TECH Software\PICC\9.70\bin\picc.exe
Make: The target "F:\PICprog\1\1.p1" is out of date.
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.70
Error [1358] F:\PICprog\AKB1\1.c; 47. no space for _tajm temps (2)
********** Build failed! **********
|
Потом так попробовал:
C=(C1*(1024+K-127))››10; - что-то не так
кстати C1 принимает значения от 0 до 1024.
С1 нужен большего размера.
Последний раз редактировалось Slava-martyn; 25.07.2011 в 15:27.
|
|
|
Сказали "Спасибо" Slava-martyn
|
|
|
25.07.2011, 15:25
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
#include ‹pic.h›
unsigned long int C,C1,C2=0;
C=(C1*(1024+K-127))››10;
Заработало!
Ещё вопрос.
МК PIC12F675 - 70 % Program space занято, 30 % хватит для подключения кнопки (для увеличения К на +1 при нажатии и сохранении в памяти)?
|
|
|
Сказали "Спасибо" Slava-martyn
|
|
|
25.07.2011, 15:28
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
На опрос кнопки - две инструкции. Инкременировать переменную - одна. Конечно хватит.
Вот за что я не люблю С - совершенно не понятно, на что ушла память. А асм потом перекапывать лениво.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
25.07.2011, 15:30
|
|
Прописка
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Сообщение от Slava-martyn
|
PHP код:
|
#include ‹pic.h›
unsigned char K=0;
unsigned int C,C1=0;
C=C1*((1024+K-127)/1024); // при ((1024+K-127)/1024) ‹ 1 совсем виснет.
|
Как преобразовать типы чисел?
|
Обычно типы переменных приводят так: C= (unsigned int)(C1*((1024+K-127)/1024)); Хотя например Keil автоматически приводит типы.
|
|
|
Сказали "Спасибо" heady69
|
|
|
25.07.2011, 18:44
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
Удивительно, но
PHP код:
|
unsigned int C,C1,C2=0;
C= (unsigned int)(C1*((1024+K-127)/1024));
|
не работает при K!=127 (при K›127 =› C=C1*1, а при K‹127 =› C=C1*0).
PHP код:
|
unsigned long int C,C1,C2=0;
C= (unsigned int)(C1*((1024+K-127)/1024));
|
Аналогично не работает.
PHP код:
|
unsigned int C,C1,C2=0;
C=(C1*(1024+K-127))››10;
|
Тоже не идёт.
PHP код:
|
unsigned long int C,C1,C2=0;
C=(C1*(1024+K-127))››10;
|
Вот эта комбинация нормально считает.
PHP код:
|
unsigned long int C1,C2=0;
unsigned int C=0;
C=(C1*(1024+K-127))››10;
|
Во! Это даже лучше, откуда ни возьмись освободилось 25 % памяти программ.
PHP код:
|
unsigned long int C1=0;
unsigned int C,C2=0;
C=(C1*(1024+K-127))››10;
|
А эта занимает на 0,5 % больше чем предыдущая дурдом! И что там происходит внутри? Где нить описание есть какие типы когда применять, как с ними математические операции происходят?
Последний раз редактировалось Slava-martyn; 25.07.2011 в 19:03.
|
|
|
Сказали "Спасибо" Slava-martyn
|
|
|
25.07.2011, 20:51
|
|
Прописка
Регистрация: 09.08.2006
Сообщений: 198
Сказал спасибо: 14
Сказали Спасибо 27 раз(а) в 20 сообщении(ях)
|
Re: Hi-Tech Picc не хочет считать
В целочисленной арифметике выражение:
(1024+K-127)/1024 при K ‹ 127 равно 0, и равно 1 при K ›= 127.
при 0‹=K‹=255. Непонятна идея аглоритма.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:12.
|
|