реклама на сайте
подробности

 
 
> Вопрос С
badik
сообщение Jun 24 2010, 18:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 29-11-06
Из: Екатеринбург
Пользователь №: 22 890



Здравствуйте, Вопрос к людям хорошо знающим С.
Понадобилась функция перевода целого числа в строку. Перерыл спрвочник и help - результат 0.
Банальная проблема. Увы. Обраных функций вагон.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Jun 26 2010, 10:24
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 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] = ' ';
}

Результат оказался несколько неожиданным smile.gif Ни в первом, ни во втором случае RealView MDK-ARM 4.10 не использует команды деления вообще. А код оказался равным по размеру (и по содержанию, похоже). Так что можно сделать вывод, что / и % компилятор все-же объединил.
А заняла функция деления примерно 80 команд (не машинных тактов, а именно строк в ассемблерном коде).

2 Непомнящий Евгений
На таком принципе основан мой код для PIC, который чуть выше в файле лежит. Только написан на ассемблере.

Цитата(zltigo @ Jun 26 2010, 12:18) *
Посему повторяю рекомендации откомпилировать и посмотреть на результат с / % для всех ранее помянутых ядер. Так-же напомню, что слово "гуано" относилось далеко не только к использованию / %.

Для всех ядер - это вы уж слишком многого от меня хотите. smile.gif У меня и компиляторов таких нет.
А для Cortex-M3 я написал и откомпилировал, и из ваших высказываний так и не понял, что бы такого можно было улучшить в моем коде. А примера, как надо делать, вы не привели.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 26 2010, 15:05
Сообщение #3


Гуру
******

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



QUOTE (ViKo @ Jun 26 2010, 13:24) *
Для всех ядер - это вы уж слишком многого от меня хотите. smile.gif У меня и компиляторов таких нет.

Тем не менее, Вы уже второй раз утверждаете, что писали с оглядкой на 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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - ViKo   Цитата(zltigo @ Jun 26 2010, 18:05) // За...   Jun 26 2010, 16:28
|- - zltigo   QUOTE (ViKo @ Jun 26 2010, 19:28) Sign - ...   Jun 26 2010, 16:40
|- - aaarrr   Цитата(ViKo @ Jun 26 2010, 20:28) 2 aaarr...   Jun 26 2010, 16:51
- - 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 страниц V   1 2 >


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 14:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01498 секунд с 7
ELECTRONIX ©2004-2016