-
- div_t x = div(cnt, coeff); return x.quot * 1000 + x.rem * 1000 /
coeff; maleon(69 знак., 18.01.2021 11:37)
- Как-то так с округлением (без плавучки) maleon(223 знак., 19.01.2021 18:27)
- Например так: Пaлыч(203 знак., 15.01.2021 11:29 - 16.01.2021 10:19)
- Что это чудо-код выдать должен? У меня выдаёт какую-то неведомую
хрень >>> - SciFi(16.01.2021 09:18, ссылка)
- Плюсик лишний - поправил. - Пaлыч(16.01.2021 10:23)
- Вроде бы теперь что-то вменяемое выдаёт >>> - SciFi(16.01.2021 10:26, ссылка)
- Плюсик лишний - поправил. - Пaлыч(16.01.2021 10:23)
- На первом же делении сильно потеряешь точность, поэтому ТС сначала
пытается умножать - MBedder(15.01.2021 11:58)
- Пошутил? Или не разобрался в предложенном? Пaлыч(239 знак., 15.01.2021 12:55)
- Я про твое x= tmp/coeff вместо (cnt*1000)/coeff у ТС - MBedder(15.01.2021 22:54)
- А! Я плюсик пропустил! Строки ниже этого деления точность восстанавливают. - Пaлыч(16.01.2021 09:03)
- Я про твое x= tmp/coeff вместо (cnt*1000)/coeff у ТС - MBedder(15.01.2021 22:54)
- Пошутил? Или не разобрался в предложенном? Пaлыч(239 знак., 15.01.2021 12:55)
- Что это чудо-код выдать должен? У меня выдаёт какую-то неведомую
хрень >>> - SciFi(16.01.2021 09:18, ссылка)
- 1000*ЦЕЛОЕ(cnt/coeff) + (1000*ОСТАТОК(cnt/coeff))/coeff . - PS если
coeff>1000, то переполнения гарантированно не будет - argus98(15.01.2021 21:43)
- Гарантию зря дали. Пaлыч(154 знак., 17.01.2021 10:25)
- От тыщи до мульёна, стало быть. На том и порешим. - SciFi(17.01.2021 10:51)
- Гарантию зря дали. Пaлыч(154 знак., 17.01.2021 10:25)
- Вдогонку. К PICC18 не PRO-версии, а STD, в своё время прилагались исходники libc. И в них есть конечно ассемблерные реализации деления умножения для long. Не сложно взять и дописать для long long по образу и подобию. - fk0(15.01.2021 11:20)
- а так ? cnt = cnt1+cnt2...+cntN+cntRemainder где cnt1...N кратно коэффициенту ну а далее cnt1*1000/coeff+... - abivan(15.01.2021 10:49)
- Всего то нужен пятый байт. Сложно написать поддержку через инкремент? - VLLV(15.01.2021 08:56)
- А вот я хотел спросить, а можно что-то намутить с этим счётчиком, чтоб импульсы взад пошли? Например, чтоб счётчик переполнился и с нуля начал. - fk0(14.01.2021 23:40)
- 1) посчитать с плавающей точкой... 2) написать 64-битную арифметику
самостоятельно (это сделано в C-библиотеках многих процессоров на
самом-то деле -- подсмотреть можно в libgcc), 3) взять библиотеку
вроде BigNum (в RSA для pic18 такая какая-то и использовалась!) и
посчитать с неограниченной разрядностью. По пункту 2 на самом деле
проблема с делением. Лучше извернуть до cnt*other_coeff
>> N. А уж умножить совсем не проблема,
условно-поразрядно: fk0(1388 знак., 14.01.2021 23:39, ссылка, ссылка)
- Только не с плавающей, если тарифный учет, то сумма должна
соответствовать тарифным накопителям. - VLLV(15.01.2021 08:52)
- Знаю швейцарцев. Коммерческое взвешивание. Данные в 32-бит
плавающей точки. Оборудование сертифицировано OMIL. Nikolay_Po(302 знак., 15.01.2021 09:11)
- Насколько я знаю, не прокатит. - VLLV(15.01.2021 12:14)
- +1. Только к продукции интела нужно относиться осмотрительно... - fk0(15.01.2021 11:26, ссылка)
- Знаю швейцарцев. Коммерческое взвешивание. Данные в 32-бит
плавающей точки. Оборудование сертифицировано OMIL. Nikolay_Po(302 знак., 15.01.2021 09:11)
- Только не с плавающей, если тарифный учет, то сумма должна
соответствовать тарифным накопителям. - VLLV(15.01.2021 08:52)
- в аналогичной ситуации, правда для AVR-а , я написал 64 бит арифметику на асме. - m16(14.01.2021 23:21)
- я не в курсе про "XC8 для PIC18". Однако почему не считать в двух счетчиках ? один на 3200 (на один кВт*ч) и другой в целое значение кВт*ч ? Арифметику производить для значений от 0 до 3199 (по формуле (cnt * 1000) / coeff). Zoro(40 знак., 14.01.2021 23:08)
- Есть там int64_t и uint64_t. Только какие-то моменты были с printf
- не сильно разбирался и заменил на вариант от Chan-а - Vit(14.01.2021 22:55)
- Нет там 64-битных типов. Точнее, есть только при использовании C99,
а у меня сейчас C90. - FDA(14.01.2021 22:59)
- принципиально нужно
С90C89 (fk0 углядел)? - Vit(14.01.2021 23:01 - 15.01.2021 00:13)- Проект большой, сейчас не получится поменять. Была бы тысяча строк,
вопросов бы не было. - FDA(14.01.2021 23:02)
- Извиняюсь, а что за проблемы при этом могут быть? Просто кроме
глупостей от IAR для MSP430 не встречал проблем - Vit(14.01.2021 23:05)
- Много изменений вносить надо. Просто так проект не пересобирается. - FDA(14.01.2021 23:08)
- Тоже не верю. Ругань компилятора в студию. - SciFi(15.01.2021 08:14)
- Вот таких ошибок тысячи. Что-то связано со строками. Как я понял,
для них надо использовать тип char, а в проекте везде типы uint8_t,
uint16_t и т.д. Плотно пока не разбирался. FDA(1 знак., 15.01.2021 08:56, ссылка)
- Нормальные предупреждения, абсолютно по делу. По сути режим C89
просто отключает эти предупреждения. Если вам нравится прятать
голову в песок, отключите их и в режиме C99, делов-то. - SciFi(15.01.2021 09:07)
- Не могу понять как вот эти предупреждения отключить: FDA(193 знак., 15.01.2021 11:12)
- Кстати советую запомнить, я, например, длительное время не знал,
пока не обделался на этом, что в языке C есть три типа char: signed char, unsigned char и char. И это три разных типа. fk0(29 знак., 15.01.2021 11:37)
- Да, тут ты совершенно прав! При переходе на C99 проблемы были как раз с типами. В итоге за пару дней я всё таки смог проект перевести. Пришлось всю работу со строками заменить на char. Плюс добавить очень много прямых преобразований типов. Например, компилятор ругался при присвоении типу uint16_t типа uint32_t. В итоге всё заработало. Всем спасибо за помощь! - FDA(19.01.2021 15:18)
- Я знал. Что С - для извращенцев. Очередное подтверждение. - Kpoк(18.01.2021 13:17)
- Куда же бедному крестьянину податься? Кодить в хексе подобно
настоящим мущщинам? - SciFi(18.01.2021 13:25)
- Паскаль искать. Терра когда-то продавала - Kpoк(18.01.2021 18:58)
- Что там Терра продавала - то предания старины далекой, а вот
FreePascal обещает поддержку ARM/AVR/PIC32 - LightElf(18.01.2021 19:20, ссылка)
- Это гораздо интересней! - Kpoк(19.01.2021 09:07)
- А есть еще Turbo51, для особых эстетов :) - LightElf(19.01.2021 19:25)
- Это гораздо интересней! - Kpoк(19.01.2021 09:07)
- Что там Терра продавала - то предания старины далекой, а вот
FreePascal обещает поддержку ARM/AVR/PIC32 - LightElf(18.01.2021 19:20, ссылка)
- Паскаль искать. Терра когда-то продавала - Kpoк(18.01.2021 18:58)
- Куда же бедному крестьянину податься? Кодить в хексе подобно
настоящим мущщинам? - SciFi(18.01.2021 13:25)
- А вот и статью нашёл - Dingo(18.01.2021 12:25, ссылка)
- Не уверен, что правильно помню, но вроде версии signed / unsigned не менее 8 бит, а просто char привязан к машинному слову. На хабре человек разбирал на примере, когда char 9 бит, а signed/unsigned 8 бит. Dingo(31 знак., 18.01.2021 12:23)
- На сколько мне известно, char равен signed char или unsigned char, в зависимости от ключей компилятора. Обычно, по умолчанию, char === signed char - AlexBi(15.01.2021 11:54)
- Я char не знал - а что это по сравнению с собратьями? - MBedder(15.01.2021 11:39)
- Принципиально на большинстве компиляторов не отличается от signed
char, у некоторых unsigned char (watcom, picc18 std, вроде, или там
ключ нужен для того). В смысле, сгенерированный код не отличается.
Но с точки зрения компилятора типы все три -- разные. И во-первых
будут ошибки и варнинги если не тот тип подсовывать, во-вторых в
C++ если есть зависимость от типа, то нужно рассматривать все три
варианта, чтоб не воспринять char как некую абстрактную структуру. fk0(1253 знак., 15.01.2021 12:04)
- Спасибо, жуть :)) - MBedder(15.01.2021 12:07)
- В IAR в настройках проекта можно выбрать signed/unsigned. А в RAD
еще и wchar. - BlackMorda(15.01.2021 13:06)
- У богатых свои причуды, а вот я все никак не могу осилить на
нахуй мне ненужныеIAR/RAD накопить :(( - MBedder(16.01.2021 15:29)
- У богатых свои причуды, а вот я все никак не могу осилить на
- В IAR в настройках проекта можно выбрать signed/unsigned. А в RAD
еще и wchar. - BlackMorda(15.01.2021 13:06)
- Спасибо, жуть :)) - MBedder(15.01.2021 12:07)
- Принципиально на большинстве компиляторов не отличается от signed
char, у некоторых unsigned char (watcom, picc18 std, вроде, или там
ключ нужен для того). В смысле, сгенерированный код не отличается.
Но с точки зрения компилятора типы все три -- разные. И во-первых
будут ошибки и варнинги если не тот тип подсовывать, во-вторых в
C++ если есть зависимость от типа, то нужно рассматривать все три
варианта, чтоб не воспринять char как некую абстрактную структуру. fk0(1253 знак., 15.01.2021 12:04)
- Их нужно не отключить, я однажды исправить. Там исправления такого уровня, что делаются чуть ли не регэкспом, во всяком случае любой дурак по-шаблону справится. Исправления код не изменят. Т.е. легко проверить, что после исправлений собирается такой же бинарник. Суть исправлений: руками привести типы насильно (через каст к void*: "func((const void*)var)"). Хотя вообще за частью таких варнингов запросто могут стоять ошибки, со строками наверное одно из немногих исключений, fk0(79 знак., 15.01.2021 11:34)
- Use the command line option "-nw= n". Where n is the warning message you want to suppress. - m16(15.01.2021 11:31)
- Это, наверное, только у PRO версии? - fk0(15.01.2021 11:35)
- С18, пардон. для ХС8 иначе: m16(298 знак., 15.01.2021 11:54)
- Это, наверное, только у PRO версии? - fk0(15.01.2021 11:35)
- У PICC18 отдельные предупреждения не отключаются, только уровень настраивается. Но есть другой путь: предупреждения лежат в каком-то .txt файлике в составе компилятора и там в каждой строчке номер, буква и строка ошибки. Буква определяет это warning, error, и уровень варнинга. Как-то так. Давно было дело, я уже не помню. У меня в проекте этот файлик свой был и там нужные варнинги были понижены в уровне и отключены. - fk0(15.01.2021 11:28)
- Не разбираюсь в мелкочиповских компиляторах. По форуму сложилось впечатление, что они кривые. Как у них отключаются предупреждения и отключаются ли вообще — не в курсе, увы :-( - SciFi(15.01.2021 11:18)
- Кстати советую запомнить, я, например, длительное время не знал,
пока не обделался на этом, что в языке C есть три типа char: signed char, unsigned char и char. И это три разных типа. fk0(29 знак., 15.01.2021 11:37)
- Не могу понять как вот эти предупреждения отключить: FDA(193 знак., 15.01.2021 11:12)
- Нормальные предупреждения, абсолютно по делу. По сути режим C89
просто отключает эти предупреждения. Если вам нравится прятать
голову в песок, отключите их и в режиме C99, делов-то. - SciFi(15.01.2021 09:07)
- Вот таких ошибок тысячи. Что-то связано со строками. Как я понял,
для них надо использовать тип char, а в проекте везде типы uint8_t,
uint16_t и т.д. Плотно пока не разбирался. FDA(1 знак., 15.01.2021 08:56, ссылка)
- Не верю. В C99 нет или почти нет изменений не совместимых с C89. - fk0(14.01.2021 23:43)
- Тоже не верю. Ругань компилятора в студию. - SciFi(15.01.2021 08:14)
- Много изменений вносить надо. Просто так проект не пересобирается. - FDA(14.01.2021 23:08)
- Извиняюсь, а что за проблемы при этом могут быть? Просто кроме
глупостей от IAR для MSP430 не встречал проблем - Vit(14.01.2021 23:05)
- Проект большой, сейчас не получится поменять. Была бы тысяча строк,
вопросов бы не было. - FDA(14.01.2021 23:02)
- принципиально нужно
- Нет там 64-битных типов. Точнее, есть только при использовании C99,
а у меня сейчас C90. - FDA(14.01.2021 22:59)
- div_t x = div(cnt, coeff); return x.quot * 1000 + x.rem * 1000 /
coeff; maleon(69 знак., 18.01.2021 11:37)