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

 
 
> Вопрос С
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 29 2010, 13:48
Сообщение #2


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

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



Код
void  itoad(int number, uint8_t *string)
{
  uint8_t  sign;
  *(int32_t *) string =       ' ' | ' ' << 8 | ' ' << 16 | ' ' << 24;
  *(int32_t *)(string + 4) =  ' ' | ' ' << 8 | ' ' << 16 | ' ' << 24;  
  *(int32_t *)(string += 8) = ' ' | ' ' << 8 | '0' << 16 | '\0'<< 24;
  if (!number) return;
  if (number > 0) sign = '+';
  else {
    number = -number;
    sign = '-';
  }
  string += 2;
  do {
    *string-- = number % 10 + '0';
  } while (number /= 10);
  *string = sign;
}

Работает с 32-битовыми числами со знаком.
string должна быть 12 байтов для 32-битового числа.
60 байтов (+ 4 байта хранят константу "_ _ 0").
~207 тактов.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 29 2010, 14:18
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(ViKo @ Jun 29 2010, 16:48) *
Код
*(int32_t *) string =
Знатная грабля. Исключение при первой же string, начало которой не попадает на границу 4 байт. Или просто порушенные соседние данные.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 1 2010, 08:55
Сообщение #4


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

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



Цитата(Сергей Борщ @ Jun 29 2010, 17:18) *
Знатная грабля. Исключение при первой же string, начало которой не попадает на границу 4 байт. Или просто порушенные соседние данные.

Грабли можно избежать, если определить строку в виде объединения байтов и 4-байтовых слов.
2 all:
Как сделать в Keil то же, что и в IAR?

Цитата(zltigo @ Jul 1 2010, 00:14) *
IAR Компилятор сделал все корректно и на 6 байт короче.

Только в таблице у него 8 байтов, а у Keil-а 4. Итого, с учетом таблицы, 60 байтов против 62 байтов.

P.S. А тема-то, действительно, начинает соответствовать своему названию - "Вопрос C" smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 1 2010, 11:57
Сообщение #5


Гуру
******

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



QUOTE (ViKo @ Jul 1 2010, 10:55) *
Только в таблице у него 8 байтов

Это дело даже не второе, а третье, ибо байты кода это еще команды которые еще исполняются, а некоторые, типа PUSH/POP нескольких регистров, еще и не за один такт.


QUOTE (ViKo @ Jul 1 2010, 10:55) *
Как сделать в Keil то же, что и в IAR?

Написать на ASM smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 1 2010, 12:34
Сообщение #6


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

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



Цитата(zltigo @ Jul 1 2010, 14:57) *
Это дело даже не второе, а третье, ибо байты кода это еще команды которые еще исполняются, а некоторые, типа PUSH/POP нескольких регистров, еще и не за один такт.

Давайте проверим. Число -2147483647 (т.е. -(2^31 - 1), максимально допустимое для функции) Keil преобразовал за 207 тактов (сравнивал счетчик тактов перед вызовом itoad и после нее). Сколько у IAR?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 1 2010, 12:38
Сообщение #7


Гуру
******

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



QUOTE (ViKo @ Jul 1 2010, 14:34) *
Давайте проверим.

smile.gif Думаете дополнительные команды ускорят процесс?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 1 2010, 12:52
Сообщение #8


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

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



Цитата(zltigo @ Jul 1 2010, 15:38) *
smile.gif Думаете дополнительные команды ускорят процесс?

Хочу знать, насколько замедлят.
MOV r2,#0x20202020 выполняется за 1 такт.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 1 2010, 12:55
Сообщение #9


Гуру
******

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



QUOTE (ViKo @ Jul 1 2010, 14:52) *
Хочу знать, насколько замедлят.

Посчитайте на пальцах.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 1 2010, 13:59
Сообщение #10


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

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



Цитата(zltigo @ Jul 1 2010, 15:55) *
Посчитайте на пальцах.

На пальцах до 200? У меня столько пальцев нет smile.gif
Я лучше на бумаге smile.gif и калькуляторе.
А SDIV r0,r0,r3 выполняется за 11 тактов... upd. Не всегда! - обнаружил и 10 тактов, и 9 тактов, похоже, от чисел зависит. О! чем меньше делимое, тем меньше тактов. Видел 4 такта.
... а MLS r2,r3,r0,r2 всего за 2.

Так что на пальцах, извините, никак не посчитать.
Максимальное количество тактов для SDIV заметил 12. Где про такты написано?

2 zltigo
Ну если упорно не хотите нормальное сравнение сделать... smile.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jul 1 2010, 15:24
Сообщение #11


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(ViKo @ Jul 1 2010, 17:59) *
А SDIV r0,r0,r3 выполняется за 11 тактов... upd. Не всегда! - обнаружил и 10 тактов, и 9 тактов, похоже, от чисел зависит. О! чем меньше делимое, тем меньше тактов. Видел 4 такта.
...
Максимальное количество тактов для SDIV заметил 12. Где про такты написано?

Cortex-M3 Technical Reference Manual
Divide: 2-12 Cycles
DIV timings depend on dividend and divisor. DIV is interruptible (abandoned/restarted), with worst case latency of one cycle.
When dividend and divisor are similar in size, divide terminates quickly. Minimum time is for cases of divisor larger than
dividend and divisor of zero. A divisor of zero returns zero (not a fault), although a debug trap is available to catch this case.
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
- - ViKo   Следуя рекомендациям, слегка модернизировал код. К...   Jun 26 2010, 10:24
|- - ssvSerge   Цитата(ViKo @ Jun 26 2010, 14:24) Следуя ...   Jun 26 2010, 11:31
|- - zltigo   QUOTE (ViKo @ Jun 26 2010, 13:24) Для все...   Jun 26 2010, 15:05
|- - 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   Цитата(Сергей Борщ @ 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
|- - zltigo   QUOTE (ViKo @ Jul 1 2010, 15:59) 2 zltigo...   Jul 1 2010, 14:11
- - 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 Текстовая версия Сейчас: 3rd September 2025 - 09:37
Рейтинг@Mail.ru


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