|
|
 |
Ответов
|
Jun 29 2010, 13:48
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 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 тактов.
|
|
|
|
|
Jun 29 2010, 14:18
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Jul 1 2010, 08:55
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 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"
|
|
|
|
|
Jul 1 2010, 11:57
|

Гуру
     
Группа: Свой
Сообщений: 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
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 1 2010, 13:59
|

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

|
Цитата(zltigo @ Jul 1 2010, 15:55)  Посчитайте на пальцах. На пальцах до 200? У меня столько пальцев нет  Я лучше на бумаге  и калькуляторе. А SDIV r0,r0,r3 выполняется за 11 тактов... upd. Не всегда! - обнаружил и 10 тактов, и 9 тактов, похоже, от чисел зависит. О! чем меньше делимое, тем меньше тактов. Видел 4 такта. ... а MLS r2,r3,r0,r2 всего за 2. Так что на пальцах, извините, никак не посчитать. Максимальное количество тактов для SDIV заметил 12. Где про такты написано? 2 zltigoНу если упорно не хотите нормальное сравнение сделать...
|
|
|
|
|
Jul 1 2010, 15:24
|

Любитель
    
Группа: Свой
Сообщений: 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 ManualDivide: 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.
|
|
|
|
Сообщений в этой теме
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 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|