Страница 1 из 2
Операция деления на кратные значения
Добавлено: Сб мар 19, 2016 16:36:10
virus33
Компилятор HITECH PICC.
Каким образом наиболее благоприятно можно выполнить операцию деления числа на 10, 100, 1000?
и особый вопрос деления единицы на число. Единицу необходимо поделить на 16ти битную переменную.
Можно конечно взять и просто написать - VALUE = VALUE/100; - но это будет весьма неуклюжее решение.
Re: Операция деления на кратные значения
Добавлено: Вс мар 20, 2016 06:41:05
Ser60
Посмотрите ответы на оба вопроса в моих сообщениях здесь:
http://radiokot.ru/forum/viewtopic.php?f=62&t=78185
Re: Операция деления на кратные значения
Добавлено: Пн мар 21, 2016 16:59:35
КРАМ
virus33 писал(а):но это будет весьма неуклюжее решение.
Неуклюжим оно будет только если Вы неправильно выберете формат представления операндов.
Вариантов тут не слишком много. Либо кондовый float. Либо целое с фиксированной точкой необходимой для вычислений разрядностью.
Ничего об этом Вы не сообщили.
Предлагаю не шифроваться, а прямо сказать о КОНЕЧНОЙ ЦЕЛИ таких вычислений.
Собственно я догадываюсь, но давайте все таки соблюдать приличия.
Re: Операция деления на кратные значения
Добавлено: Пн мар 28, 2016 17:04: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.
Для вывода полученного трехзначного значения на семисегментные индикаторы.
Re: Операция деления на кратные значения
Добавлено: Пн мар 28, 2016 17:40:26
driver_gv
А чем BIN2BCD не устраивает? Вход 16 бит целое, выход 0 - 65535 BCD
Re: Операция деления на кратные значения
Добавлено: Пн мар 28, 2016 20:53:11
botchin
Если BIN2BCD не устраивает (в виду малой размерности) есть такие функции для 32 битовъх чисел
http://www.piclist.com/techref/member/BB-LTL-/index.htm - Q_bcd2b
http://www.piclist.com/techref/microchi ... 32b10d.htm - b2bcd
Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 07:51:23
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")
Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 10:54:18
L.O.D
AndrF писал(а):А я на дешевенький OLED-индикатор вот так вывожу ...
На C++ штоле?
Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 11:38:14
ARV
L.O.D писал(а):На C++ штоле?
скорее на паскале
Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 11:39:27
Аlex
На дурине.
AndrF, вы хотябы приблизительно представляете, во что выливаются вот эти ваши строки и сколько они выполняются по времени ?
Так быдлокодить могут только далёкие от программирования люди. Особенно, если программирование касается микроконтроллеров.
Выпендрёшь не в зачёт.
Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 11:49:59
ARV
Аlex писал(а):вы хотябы приблизительно представляете
думаю, принципиально не намного хуже, чем printf/sprintf.
выпад ваш слабо обоснован...

Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 12:06:16
Аlex
не намного хуже, чем printf/sprintf
На много, даже прилично.
Тут используются классы, работающие со строками. Если преобразования, типа
DecToStr можно приблизительно приравнять к
sprintf (и то, это далеко не тоже самое), то всяческие сложения строк требуют очень больших ресурсов и времени, из-за динамического выделения памяти для каждого нового экземпляра, при каждой операции. Плюс потом конкатенация в цикле (ну или вызов strcat, тут от "библиотекарей" зависит). Плюс удаление из памяти лишних экземпляров, с вызовом деструкторов. И т.д.. и т.п...
По всей видимости, Вы с трудом представляете иерархию подобных действий и что в них происходит.
выпад ваш слабо обоснован...
Вполне обоснован.
Плюс ко всему выше сказанному, человек запостил совершенно не по теме. Речь шла о конкретном компиляторе и о операциях деления.
Как раз, наоборот, именно его выпад я считаю бестолковым. К чему был его пост, совершенно не понятно. Я его посчитал обычным вы@боном, типа смотрите как я умею - всего то 2 строчки, поставив за него незачёт.
Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 12:17:35
botchin
L.O.D писал(а):На C++ штоле?
Думаю Basic - ESP8266 BASIC - первъй раз слъшу!!!!
Ето с кокого то форума - не вникал
Код: Выделить всё
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)
Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 12:19:43
AndrF
Аlex писал(а):На дурине.
Я с PIC-ами работаю, вообще-то. Так что дурина отпадает.
Аlex писал(а):
AndrF, вы хотябы приблизительно представляете, во что выливаются вот эти ваши строки и сколько они выполняются по времени ?
И во сколько, интересно? В моем случае остается времени - вагон и маленькая тележка.
Аlex писал(а):
Так быдлокодить могут только далёкие от программирования люди. Особенно, если программирование касается микроконтроллеров.
Выпендрёшь не в зачёт.с
Специально для вас:
http://www.youtube.com/watch?v=hIJ8T1Fa7qU
Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 12:25:27
ARV
возможно, возможно... но сомнения остаются. я обычно молчу, если не имею доказательств. собственно, и аргументов в пользу моей т.з. у меня нет... видимо, зря я выступил

Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 12:27:56
Аlex
Я с PIC-ами работаю, вообще-то. Так что дурина отпадает.
Компилятор свой назовите, на котором делаете подобные манипуляции.
Что Вы мне тут картинки показываете ? Я сам таких могу показать вагон и маленькую тележку
AndrF писал(а):И во сколько, интересно?
- Кто вас, евреев, научил отвечать вопросом на вопрос ?
- А кто вам такое сказал ?
Это я Вам задал вопрос - Вы, хотябы примерно, представляете ? И не "во сколько", а "во что".
То, что у вас остаётся вагон ресурсов - не ваша заслуга.
ARV писал(а):видимо, зря я выступил

Ну почему ? Общаемся, далогируем, всё хорошо...

Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 12:55:12
AndrF
Аlex писал(а):Что Вы мне тут картинки показываете ? Я сам таких могу показать вагон и маленькую тележку

Тормозов при выводе графики нет. Точнее есть, но они в основном зависят от скорости шины - в данном случае I2C.
Аlex писал(а):
Это я Вам задал вопрос - Вы, хотя бы примерно, представляете ? И не "во сколько", а "во что".
Так расскажите "во что". А то я не разберу - все прекрасно работает (в том числе и на производстве, а не только дома), ни во что не утыкаюсь.
Аlex писал(а):
То, что у вас остаётся вагон ресурсов - не ваша заслуга.
Я и не утверждал что контроллеры разрабатывал я. Но и не вы ведь.
Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 13:05:00
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.
Re: Операция деления на кратные значения
Добавлено: Вт мар 29, 2016 13:27:20
Аlex
Дак это ещё и бейсик
К чему все ваши посты тут, совершенно не понятно. Влезли в тему, вые@нулись куском кода и картинками, и всё...

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