|
|
 |
Ответов
|
Jun 26 2010, 10:24
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Следуя рекомендациям, слегка модернизировал код. Код void itoa(int16_t Number, uint8_t *String) { uint8_t Sign = ' '; if (Number > 0) Sign = '+'; if (Number < 0) { Sign = '-'; Number = - Number; } String[6] = '\0'; int8_t i = 5; div_t QR = {Number, 0}; do { QR = div(QR.quot, 10); String[i--] = QR.rem + '0'; } while (QR.quot); String[i] = Sign; for (i--; i >= 0; i--) String[i] = ' '; } Результат оказался несколько неожиданным  Ни в первом, ни во втором случае RealView MDK-ARM 4.10 не использует команды деления вообще. А код оказался равным по размеру (и по содержанию, похоже). Так что можно сделать вывод, что / и % компилятор все-же объединил. А заняла функция деления примерно 80 команд (не машинных тактов, а именно строк в ассемблерном коде). 2 Непомнящий Евгений
На таком принципе основан мой код для PIC, который чуть выше в файле лежит. Только написан на ассемблере. Цитата(zltigo @ Jun 26 2010, 12:18)  Посему повторяю рекомендации откомпилировать и посмотреть на результат с / % для всех ранее помянутых ядер. Так-же напомню, что слово "гуано" относилось далеко не только к использованию / %. Для всех ядер - это вы уж слишком многого от меня хотите.  У меня и компиляторов таких нет. А для Cortex-M3 я написал и откомпилировал, и из ваших высказываний так и не понял, что бы такого можно было улучшить в моем коде. А примера, как надо делать, вы не привели.
|
|
|
|
|
Jun 26 2010, 15:05
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (ViKo @ Jun 26 2010, 13:24)  Для всех ядер - это вы уж слишком многого от меня хотите.  У меня и компиляторов таких нет. Тем не менее, Вы уже второй раз утверждаете, что писали с оглядкой на Cortex? Лично я воспринял это, как то, что Вы знаете, что творите. QUOTE из ваших высказываний так и не понял, что бы такого можно было улучшить в моем коде. Хорошо,не затрагивая, так сказать основ, только то, что сразу режет глаз. CODE void si16toad (int16_t Number, char * StrBuf) { char Sign = ' '; // Зачем-то завели малополезную переменную 'Sign' if (Number > 0) Sign = '+'; if (Number < 0) { Sign = '-'; Number = -Number; } StrBuf[6] = '\0'; signed char i = 5; // Cortex говорите? Тогда за не 32 bit переменные, где в этом нет // небходимости по рукам надо давать. Да и сама переменная лишняя - только команд push/pop добавляет // А за использование "массивов" вместо указателей - еще один раз do { StrBuf[i--] = Number % 10 + '0'; Number /= 10; // 32 bit контроллер? Тогда зачем его беднягу опять без всякой надобности // заставлять с 16bit 'Number' работать? Сразу несколько лишних команд в цикле } while (Number); StrBuf[i] = Sign; // Цикл заполнения пробелами не более, чем 4x ,байтиков. А как это на 32битниках, тем более на // Cortex это можно сделать одной командой?( ну ладно двумя - одна регистр пробелами заполняет) for (i--; i >= 0; i--) StrBuf[i] = ' '; }
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 26 2010, 16:28
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(zltigo @ Jun 26 2010, 18:05)  // Зачем-то завели малополезную переменную 'Sign' // Cortex говорите? Тогда за не 32 bit переменные, где в этом нет // небходимости по рукам надо давать. Да и сама переменная лишняя - только команд ush/pop добавляет // А за использование "массивов" вместо указателей - еще один раз // 32 bit контроллер? Тогда зачем его беднягу опять без всякой надобности // заставлять с 16bit 'Number' работать? Сразу несколько лишних команд в цикле // Цикл заполнения пробелами не более, чем 4x ,байтиков. А как это на 32битниках, тем более на // Cortex это можно сделать одной командой?( ну ладно двумя - одна регистр пробелами заполняет) Sign - а как же без него, он же потом используется, в пока не известном месте. 32 бита - согласен. Согласен понести наказание (вернее, уже понес  ) push/pop - разве они там есть? Массивы вместо указателей - не уверен, не исключаю что в данном случае это одно и то же. Заполнение пробелами - их может быть разное количество, здесь 32-битовые слова не помогут. Над этим подумаю... Докладываю - создал тестовый проект, в котором только itoa, компилятор задействовал SDIV. Возрадуемся, братья!  2 aaarrr
Про формат 4.28 - что это, где почитать?
|
|
|
|
Сообщений в этой теме
badik Вопрос С Jun 24 2010, 18:29 DRUID3 atoi()/itoa(); Или что-то отсюда... Jun 24 2010, 18:43 Genadi Zawidowski Тут или пользоваться sprintf (или её вариантами - ... Jun 24 2010, 18:57 ViKo В свое время я задавал такой же вопрос. Получил не... Jun 25 2010, 11:29 zltigo QUOTE (ViKo @ Jun 25 2010, 14:29) Сам нап... Jun 25 2010, 11:38  sonycman Цитата(zltigo @ Jun 25 2010, 15:38) Совет... Jun 25 2010, 12:15  ViKo Цитата(zltigo @ Jun 25 2010, 14:38) Совет... Jun 25 2010, 12:21 jorikdima Цитата(ViKo @ Jun 25 2010, 15:29) В свое ... Jun 25 2010, 12:17 defunct Цитата(ViKo @ Jun 25 2010, 14:29) Сам нап... Jun 25 2010, 16:48  ssvSerge Цитата(defunct @ Jun 25 2010, 19:48) Друг... Jun 25 2010, 17:26 zltigo QUOTE (sonycman @ Jun 25 2010, 15:15) Что... Jun 25 2010, 12:24 ViKo Цитата(zltigo @ Jun 25 2010, 15:24) ...ли... Jun 25 2010, 12:31  sonycman Цитата(ViKo @ Jun 25 2010, 16:31) Оставил... Jun 25 2010, 12:38   zltigo QUOTE (sonycman @ Jun 25 2010, 15:38) Осо... Jun 25 2010, 12:57    ViKo Цитата(zltigo @ Jun 25 2010, 15:57) В дан... Jun 25 2010, 13:06    sonycman Цитата(zltigo @ Jun 25 2010, 16:57) Ну дл... Jun 25 2010, 13:13     aaarrr Цитата(sonycman @ Jun 25 2010, 17:13) Нер... Jun 25 2010, 13:14 ViKo Цитата(zltigo @ Jun 25 2010, 15:24) лучше... Jun 25 2010, 12:50  zltigo QUOTE (ViKo @ Jun 25 2010, 15:50) У вас е... Jun 25 2010, 13:28   ViKo Цитата(zltigo @ Jun 25 2010, 16:28) как и... Jun 25 2010, 13:34    zltigo QUOTE (ViKo @ Jun 25 2010, 16:34) нужно п... Jun 25 2010, 13:39     ViKo Цитата(zltigo @ Jun 25 2010, 16:39) Про ... Jun 25 2010, 13:43      aaarrr Цитата(ViKo @ Jun 25 2010, 17:43) И к код... Jun 25 2010, 14:49 aaarrr Просто как пример:
Кодunsigned int short2str(c... Jun 25 2010, 12:41 zltigo QUOTE (ViKo @ Jun 25 2010, 16:43) Это у в... Jun 25 2010, 13:56 ViKo Цитата(zltigo @ Jun 25 2010, 16:56) Ну эт... Jun 25 2010, 14:04  zltigo QUOTE (ViKo @ Jun 25 2010, 17:04) О! ... Jun 25 2010, 14:10   ViKo Цитата(zltigo @ Jun 25 2010, 17:10) Ну, н... Jun 25 2010, 16:15    Genadi Zawidowski Цитата(ViKo @ Jun 25 2010, 20:15) А разве... Jun 25 2010, 20:33     ViKo Цитата(Genadi Zawidowski @ Jun 25 2010, 23... Jun 25 2010, 21:29     ReAl Цитата(Genadi Zawidowski @ Jun 25 2010, 23... Jun 26 2010, 09:04      sonycman Цитата(ReAl @ Jun 26 2010, 13:04) Оптимиз... Jun 26 2010, 09:23      demiurg_spb Цитата(ReAl @ Jun 26 2010, 13:04) Так что... Jun 27 2010, 18:51 sonycman Цитата(zltigo @ Jun 25 2010, 17:56) А то,... Jun 25 2010, 14:55  zltigo QUOTE (sonycman @ Jun 25 2010, 17:55) Буд... Jun 25 2010, 16:30 Goodefine Когда то для дисплея (отсюда фиксированное число ц... Jun 25 2010, 16:19 ViKo Цитата(Goodefine @ Jun 25 2010, 19:19) vo... Jun 25 2010, 17:16 ViKo Пролистал K&R второе издание от корки до корки... Jun 25 2010, 19:15 aaarrr Цитата(ViKo @ Jun 25 2010, 23:15) Найти б... Jun 25 2010, 19:20 dimka76 Цитата(ViKo @ Jun 25 2010, 23:15) Пролист... Jun 26 2010, 04:36 zltigo QUOTE (ViKo @ Jun 25 2010, 22:15) Пролист... Jun 26 2010, 08:11  ViKo Цитата(zltigo @ Jun 26 2010, 11:11) Не об... Jun 26 2010, 09:08   zltigo QUOTE (ViKo @ Jun 26 2010, 12:08) А я для... Jun 26 2010, 09:18 sigmaN K&R не Ымбеддеры. А zltigo дело говорит вам. К... Jun 25 2010, 19:27 ViKo Покопался в своих проектах, нашел преобразование д... Jun 25 2010, 19:52 Непомнящий Евгений В свое время написал такое:
CODE
/**
* "Указ... Jun 26 2010, 09:16 ssvSerge Цитата(ViKo @ Jun 26 2010, 14:24) Следуя ... Jun 26 2010, 11:31   zltigo QUOTE (ViKo @ Jun 26 2010, 19:28) Sign - ... Jun 26 2010, 16:40 ViKo 2 ssvSerge
В ваших алгоритмах число записывается з... Jun 26 2010, 13:55 ssvSerge Цитата(ViKo @ Jun 26 2010, 16:55) В алгор... Jun 26 2010, 14:19  ViKo Цитата(ssvSerge @ Jun 26 2010, 17:19) ну ... Jun 26 2010, 14:42   ssvSerge Цитата(ViKo @ Jun 26 2010, 18:42) для мен... Jun 26 2010, 15:12   aaarrr Цитата(ViKo @ Jun 26 2010, 18:42) В данны... Jun 26 2010, 15:14 ViKo Спасибо всем! На сегодня и завтра - умолкаю. ... Jun 26 2010, 17:00 sonycman Цитата(ViKo @ Jun 26 2010, 21:00) Возраду... Jun 27 2010, 17:02 badik Господа всем огромный привет, ни как не думал, что... Jun 28 2010, 17:43 ViKo Прежде, чем писать новое, изучил в отладчике работ... Jun 28 2010, 21:09 zltigo QUOTE (ViKo @ Jun 29 2010, 00:09) Заносит... Jun 28 2010, 21:33  ViKo Цитата(zltigo @ Jun 29 2010, 00:33) Их у ... Jun 28 2010, 21:57   zltigo QUOTE (ViKo @ Jun 29 2010, 00:57) Перед ... Jun 28 2010, 22:03    ViKo 2 zltigo
Непременно.
Выставил две "галки... Jun 29 2010, 08:29 ViKo Кодvoid itoad(int number, uint8_t *string... Jun 29 2010, 13:48 Сергей Борщ Цитата(ViKo @ Jun 29 2010, 16:48) Код *... Jun 29 2010, 14:18  ViKo Цитата(Сергей Борщ @ Jun 29 2010, 17:18) ... Jun 29 2010, 14:29  zltigo QUOTE (Сергей Борщ @ Jun 29 2010, 17:18) ... Jun 29 2010, 14:34   ViKo Цитата(zltigo @ Jun 29 2010, 17:34) *(uin... Jun 29 2010, 14:39    zltigo QUOTE (ViKo @ Jun 29 2010, 17:39) Кавычки... Jun 29 2010, 14:45   ViKo Цитата(zltigo @ Jun 29 2010, 17:34) Код ... Jun 29 2010, 17:23    zltigo QUOTE (ViKo @ Jun 29 2010, 20:23) Так - н... Jun 29 2010, 17:40     ViKo Цитата(zltigo @ Jun 29 2010, 20:40) Код ... Jun 29 2010, 18:29      zltigo QUOTE (ViKo @ Jun 29 2010, 21:29) В смысл... Jun 29 2010, 18:38       ViKo Цитата(zltigo @ Jun 29 2010, 21:38) Вот к... Jun 29 2010, 19:52        zltigo QUOTE (ViKo @ Jun 29 2010, 22:52) Во всех... Jun 29 2010, 21:13  ViKo Цитата(Сергей Борщ @ Jun 29 2010, 17:18) ... Jul 1 2010, 08:55   zltigo QUOTE (ViKo @ Jul 1 2010, 10:55) Только в... Jul 1 2010, 11:57    ViKo Цитата(zltigo @ Jul 1 2010, 14:57) Это де... Jul 1 2010, 12:34     zltigo QUOTE (ViKo @ Jul 1 2010, 14:34) Давайте ... Jul 1 2010, 12:38      ViKo Цитата(zltigo @ Jul 1 2010, 15:38) Думае... Jul 1 2010, 12:52       zltigo QUOTE (ViKo @ Jul 1 2010, 14:52) Хочу зна... Jul 1 2010, 12:55        ViKo Цитата(zltigo @ Jul 1 2010, 15:55) Посчит... Jul 1 2010, 13:59         zltigo QUOTE (ViKo @ Jul 1 2010, 15:59) 2 zltigo... Jul 1 2010, 14:11         sonycman Цитата(ViKo @ Jul 1 2010, 17:59) А SDIV r... Jul 1 2010, 15:24 ViKo Выкладываю ваш вариант.
Последнее, что вы написали... Jun 30 2010, 08:00 ViKo "Шеф, все пропало!..."
По команде ... Jun 30 2010, 09:22 zltigo QUOTE (ViKo @ Jun 30 2010, 11:22) На всяк... Jun 30 2010, 19:02  ViKo Цитата(zltigo @ Jun 30 2010, 22:02) Ну ес... Jun 30 2010, 20:29   zltigo QUOTE (ViKo @ Jun 30 2010, 22:29) У вас в... Jun 30 2010, 21:14 ViKo 16-битовая версия (на основе 32-битовой)
Кодvoid ... Jun 30 2010, 11:26 MrYuran Вот никак не могу понять, почему никто до сих пор ... Jun 30 2010, 11:31 ViKo Цитата(MrYuran @ Jun 30 2010, 14:31) Вот ... Jun 30 2010, 11:35 ViKo Напоследок - проверил вариант с преобразованием в ... Jun 30 2010, 13:12 aaarrr Цитата(ViKo @ Jun 30 2010, 17:12) Получил... Jun 30 2010, 13:34  ViKo Цитата(aaarrr @ Jun 30 2010, 15:34) Ну, э... Jun 30 2010, 13:44 _Pasha Цитата(MrYuran @ Jun 30 2010, 14:31) Тяжё... Jun 30 2010, 21:42 ViKo Перепробовал все "извращения" со сравнен... Jul 2 2010, 09:07 ViKo Думаю, хуже не станет, если я доложу, что уменьшил... Jul 2 2010, 18:43
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|