Операция деления на кратные значения

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 175
Зарегистрирован: Пт июн 29, 2012 23:48:11

Сообщение virus33 »

Компилятор HITECH PICC.
Каким образом наиболее благоприятно можно выполнить операцию деления числа на 10, 100, 1000?
и особый вопрос деления единицы на число. Единицу необходимо поделить на 16ти битную переменную.
Можно конечно взять и просто написать - VALUE = VALUE/100; - но это будет весьма неуклюжее решение.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Посмотрите ответы на оба вопроса в моих сообщениях здесь:
http://radiokot.ru/forum/viewtopic.php?f=62&t=78185
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25401
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

virus33 писал(а):но это будет весьма неуклюжее решение.
Неуклюжим оно будет только если Вы неправильно выберете формат представления операндов.
Вариантов тут не слишком много. Либо кондовый float. Либо целое с фиксированной точкой необходимой для вычислений разрядностью.
Ничего об этом Вы не сообщили.
Предлагаю не шифроваться, а прямо сказать о КОНЕЧНОЙ ЦЕЛИ таких вычислений.
Собственно я догадываюсь, но давайте все таки соблюдать приличия.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 175
Зарегистрирован: Пт июн 29, 2012 23:48:11

Сообщение virus33 »

КРАМ писал(а):
virus33 писал(а):но это будет весьма неуклюжее решение.
Неуклюжим оно будет только если Вы неправильно выберете формат представления операндов.
Вариантов тут не слишком много. Либо кондовый float. Либо целое с фиксированной точкой необходимой для вычислений разрядностью.
Ничего об этом Вы не сообщили.
Предлагаю не шифроваться, а прямо сказать о КОНЕЧНОЙ ЦЕЛИ таких вычислений.
Собственно я догадываюсь, но давайте все таки соблюдать приличия.
Да не вопрос. Переписать вот это в надлежащий вид:

Код: Выделить всё

void write_7seg(void){
	//volts
	v1 = 10;
	vltg = (vltg+2)*V;
	vltg = vltg/1000;			//делитель - 1000
	v2=vltg/100;				//2е знакоместо
	vltg=vltg%100;
	v3=vltg/10;					//3е знакоместо
	v4=vltg%10;					//4e знакоместо
  
	//ampers

	v5 = 10;
	amps = (amps+2)*A;
	amps= amps/1000;			//делитель - 1000
	v6=amps/100;				//6е знакоместо
	amps=amps%100;
	v7=amps/10;					//7е знакоместо
	v8=amps%10;					//8e знакоместо
}
v1..v8 - тип int, amps и vltg - unsigned long int.
Для вывода полученного трехзначного значения на семисегментные индикаторы.
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Сообщения: 399
Зарегистрирован: Сб авг 08, 2009 23:02:57
Откуда: Ростов-на-Дону

Сообщение driver_gv »

А чем BIN2BCD не устраивает? Вход 16 бит целое, выход 0 - 65535 BCD
__________________
Все, что нельзя запрограммировать на ассемблере, приходится паять
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2029
Зарегистрирован: Чт дек 27, 2012 20:46:09
Откуда: Болгария, г. Лом

Сообщение botchin »

Если BIN2BCD не устраивает (в виду малой размерности) есть такие функции для 32 битовъх чисел
http://www.piclist.com/techref/member/BB-LTL-/index.htm - Q_bcd2b
http://www.piclist.com/techref/microchi ... 32b10d.htm - b2bcd
Лом - ето город в Болгарии, а не инструмент юстировки електроники.
Реклама
Открыл глаза
Сообщения: 56
Зарегистрирован: Чт янв 29, 2015 07:57:21

Сообщение AndrF »

А я на дешевенький OLED-индикатор вот так вывожу (время и температура):

Код: Выделить всё

RTCRead(iDate, iTime, iTemp)

OledPrint( 0, 7, DecToStr( m_lwTime.Byte2, 2, "0") + ":" + DecToStr( m_lwTime.Byte1, 2, "0") + ":" + DecToStr( m_lwTime.Byte0, 2, "0"))
OledPrint(64, 7, FloatToStr(  iTemp, 1) + "їC")
Встал на лапы
Сообщения: 139
Зарегистрирован: Чт фев 11, 2016 18:35:37

Сообщение L.O.D »

AndrF писал(а):А я на дешевенький OLED-индикатор вот так вывожу ...
На C++ штоле?
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

L.O.D писал(а):На C++ штоле?
скорее на паскале
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

На дурине.
AndrF, вы хотябы приблизительно представляете, во что выливаются вот эти ваши строки и сколько они выполняются по времени ? :facepalm:
Так быдлокодить могут только далёкие от программирования люди. Особенно, если программирование касается микроконтроллеров.

Выпендрёшь не в зачёт.
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Аlex писал(а):вы хотябы приблизительно представляете
думаю, принципиально не намного хуже, чем printf/sprintf.
выпад ваш слабо обоснован... :(
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

не намного хуже, чем printf/sprintf
На много, даже прилично.
Тут используются классы, работающие со строками. Если преобразования, типа DecToStr можно приблизительно приравнять к sprintf (и то, это далеко не тоже самое), то всяческие сложения строк требуют очень больших ресурсов и времени, из-за динамического выделения памяти для каждого нового экземпляра, при каждой операции. Плюс потом конкатенация в цикле (ну или вызов strcat, тут от "библиотекарей" зависит). Плюс удаление из памяти лишних экземпляров, с вызовом деструкторов. И т.д.. и т.п...
По всей видимости, Вы с трудом представляете иерархию подобных действий и что в них происходит.
выпад ваш слабо обоснован...
Вполне обоснован.
Плюс ко всему выше сказанному, человек запостил совершенно не по теме. Речь шла о конкретном компиляторе и о операциях деления.
Как раз, наоборот, именно его выпад я считаю бестолковым. К чему был его пост, совершенно не понятно. Я его посчитал обычным вы@боном, типа смотрите как я умею - всего то 2 строчки, поставив за него незачёт.
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2029
Зарегистрирован: Чт дек 27, 2012 20:46:09
Откуда: Болгария, г. Лом

Сообщение botchin »

L.O.D писал(а):На C++ штоле?
Думаю Basic - ESP8266 BASIC - первъй раз слъшу!!!! :facepalm:
Ето с кокого то форума - не вникал

Код: Выделить всё

DataString = DataString +"&ip=" + DecToStr(IPAddr.Val(3)) + "." + DecToStr(IPAddr.Val(2)) + "." + DecToStr(IPAddr.Val(1)) + "." + DecToStr(IPAddr.Val(0))
            DataString = DataString +"&count=" + DecToStr(Upcount)
Кстати и синтаксис похож на VBA (Visual Basic for Application)
Последний раз редактировалось botchin Вт мар 29, 2016 12:23:59, всего редактировалось 2 раза.
Лом - ето город в Болгарии, а не инструмент юстировки електроники.
Открыл глаза
Сообщения: 56
Зарегистрирован: Чт янв 29, 2015 07:57:21

Сообщение AndrF »

Аlex писал(а):На дурине.
Я с PIC-ами работаю, вообще-то. Так что дурина отпадает.
Аlex писал(а): AndrF, вы хотябы приблизительно представляете, во что выливаются вот эти ваши строки и сколько они выполняются по времени ? :facepalm:
И во сколько, интересно? В моем случае остается времени - вагон и маленькая тележка.
Аlex писал(а): Так быдлокодить могут только далёкие от программирования люди. Особенно, если программирование касается микроконтроллеров.
Выпендрёшь не в зачёт.с
Специально для вас: http://www.youtube.com/watch?v=hIJ8T1Fa7qU
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

возможно, возможно... но сомнения остаются. я обычно молчу, если не имею доказательств. собственно, и аргументов в пользу моей т.з. у меня нет... видимо, зря я выступил :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Я с PIC-ами работаю, вообще-то. Так что дурина отпадает.
Компилятор свой назовите, на котором делаете подобные манипуляции.
AndrF писал(а):Специально для вас: http://www.youtube.com/watch?v=hIJ8T1Fa7qU
Что Вы мне тут картинки показываете ? Я сам таких могу показать вагон и маленькую тележку :)))
AndrF писал(а):И во сколько, интересно?
- Кто вас, евреев, научил отвечать вопросом на вопрос ?
- А кто вам такое сказал ?
:)))

Это я Вам задал вопрос - Вы, хотябы примерно, представляете ? И не "во сколько", а "во что".
То, что у вас остаётся вагон ресурсов - не ваша заслуга.

ARV писал(а):видимо, зря я выступил :)))
Ну почему ? Общаемся, далогируем, всё хорошо... :)))
Контактная информация:
Открыл глаза
Сообщения: 56
Зарегистрирован: Чт янв 29, 2015 07:57:21

Сообщение AndrF »

Аlex писал(а):Что Вы мне тут картинки показываете ? Я сам таких могу показать вагон и маленькую тележку :)))
Тормозов при выводе графики нет. Точнее есть, но они в основном зависят от скорости шины - в данном случае I2C.
Аlex писал(а): Это я Вам задал вопрос - Вы, хотя бы примерно, представляете ? И не "во сколько", а "во что".
Так расскажите "во что". А то я не разберу - все прекрасно работает (в том числе и на производстве, а не только дома), ни во что не утыкаюсь.
Аlex писал(а): То, что у вас остаётся вагон ресурсов - не ваша заслуга.
Я и не утверждал что контроллеры разрабатывал я. Но и не вы ведь.
Открыл глаза
Сообщения: 56
Зарегистрирован: Чт янв 29, 2015 07:57:21

Сообщение AndrF »

botchin писал(а): Кстати и синтаксис похож на VBA (Visual Basic for Application)
Угу - похожесть есть и немаленькая, например, можно писать так:

Код: Выделить всё

Sub Print(str As String, Optional terminator As Char = 13)
   Console.Write(str, terminator)
End Sub
Или так:

Код: Выделить всё

Sub MySub()
   Static index As Byte = 0
   index += 1
   Console.Write("Index = ", CStr(index),13,10)
End Sub
А вообще - название языка было в видео - это Swordfish или Firewing.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Дак это ещё и бейсик :)))
К чему все ваши посты тут, совершенно не понятно. Влезли в тему, вые@нулись куском кода и картинками, и всё... :facepalm:
Контактная информация:
Открыл глаза
Сообщения: 56
Зарегистрирован: Чт янв 29, 2015 07:57:21

Сообщение AndrF »

Аlex писал(а):Дак это ещё и бейсик :)))
А не по фиг? Все одно компилится. Интерпретатором даже VB6 не является. По сути это лишь синтаксис, а это дело вкуса. Ну и кто к чему больше привык.
Ответить

Вернуться в «PIC»