|
|
  |
Вопрос С |
|
|
|
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.
|
|
|
|
|
Jul 10 2010, 04:32
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(ViKo @ Jul 2 2010, 21:43)  Думаю, хуже не станет, если я доложу, что уменьшил количество тактов для преобразования -2147483647 в строку до 195. Жаль, что не байтов. Я думаю, вашу функцию можно еще чуть чуть уменьшить. Код void itoad(int32_t number, uint8_t *string) { *(uint32_t *)(string) = 0x20202020; *(uint32_t *)(string + 4) = 0x20202020; *(uint32_t *)(string + 8) = 0x00302020; if (!number) return; if (number < 0) { number = -number; *string = '-'; } else *string = '+'; string += 11; do { *--string = number % 10 + '0'; } while (number /= 10); } Или нет?
Сообщение отредактировал rezident - Jul 10 2010, 14:34
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|