|
100 байт не хватает |
|
|
|
Dec 25 2008, 20:25
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
В общем, называется "приплыли", допрограммировались - бутлодырь перестал вмещаться в размер бутсекции, т.е. в 2k. Последним делом добавлено нечто такое: Код void Bus_transmit_packet(uint8 aStatus) { uint16 vCrc;
Bus_transmit_byte(Slp_packet_end); Bus_transmit_byte(Slp_packet_end); Bus_transmit_byte(Slp_sysdev_program | Slp_response_mask); // vCrc = vxl_get_crc16(Vxl_crc_ccitt_initial_value, Slp_sysdev_program | Slp_response_mask); Bus_staff_n_transmit_byte(aStatus); vCrc = vxl_get_crc16(0x7976, aStatus); Bus_staff_n_transmit_byte(vCrc >> 8); Bus_staff_n_transmit_byte(vCrc & 0xFF); Bus_transmit_byte(Slp_packet_end); } Что занимает примерно 60 байт. Предварительное заполнение массива и передача массива хоть и напрашивалась явно, но почти ничего не изменила или даже хуже. Однако, где бы наскрести еще сотню байт ? (таблица векторов еще не затронута, как и секции инициализации/финализации) Поделитесь, pls, примером оптимизации - сам я боюсь все порушить и грохнуть что-либо нужное. M88, GCC(WinAVR-20060421), cкрипты линкера от WinAVR-20081205
Сообщение отредактировал Огурцов - Dec 25 2008, 20:26
|
|
|
|
|
 |
Ответов
|
Dec 30 2008, 11:13
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата в С оверхед жуткий из-за приведения всего к 32бит. Где? Код RSEG CODE:CODE:NOROOT(1) // 3 unsigned long mmm(unsigned int a, unsigned int b) mmm: // 4 { // 5 return (unsigned long)a*b; CLR R2 MUL R17, R19 MOVW R23:R22, R1:R0 MUL R16, R18 MOVW R21:R20, R1:R0 MUL R17, R18 ADD R21, R0 ADC R22, R1 ADC R23, R2 MUL R19, R16 ADD R21, R0 ADC R22, R1 ADC R23, R2 MOVW R17:R16, R21:R20 MOVW R19:R18, R23:R22 RET // 6 }
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Dec 30 2008, 12:19
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Rst7 @ Dec 30 2008, 14:13)  Где? IAR в таких случаях действительно оптимизирует, gcc увы следует стандарту и умножает 32X32 Код 6a: 0c d0 rcall .+24 ; 0x84 <__mulsi3> ................................. 00000084 <__mulsi3>: 84: 62 9f mul r22, r18 86: d0 01 movw r26, r0 88: 73 9f mul r23, r19 8a: f0 01 movw r30, r0 8c: 82 9f mul r24, r18 8e: e0 0d add r30, r0 90: f1 1d adc r31, r1 92: 64 9f mul r22, r20 94: e0 0d add r30, r0 96: f1 1d adc r31, r1 98: 92 9f mul r25, r18 9a: f0 0d add r31, r0 9c: 83 9f mul r24, r19 9e: f0 0d add r31, r0 a0: 74 9f mul r23, r20 a2: f0 0d add r31, r0 a4: 65 9f mul r22, r21 a6: f0 0d add r31, r0 a8: 99 27 eor r25, r25 aa: 72 9f mul r23, r18 ac: b0 0d add r27, r0 ae: e1 1d adc r30, r1 b0: f9 1f adc r31, r25 b2: 63 9f mul r22, r19 b4: b0 0d add r27, r0 b6: e1 1d adc r30, r1 b8: f9 1f adc r31, r25 ba: bd 01 movw r22, r26 bc: cf 01 movw r24, r30 be: 11 24 eor r1, r1 c0: 08 95 ret
|
|
|
|
|
Dec 30 2008, 13:26
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(singlskv @ Dec 30 2008, 15:19)  gcc увы следует стандарту и умножает 32X32 Дело не в стандарте, просто в avr back-end нет инструкций для (s/u)16x(s/u)16=32-умножения. Я смотрел это, в принципе их несложно добавить. При их наличии может немного возрастать размер кода, но время выполнения уменьшиться. Анатолий. Цитата(Rst7 @ Dec 30 2008, 16:17)  А вообще, хотел ответить в духе "ну и пусть этот гнусь вместе со своими адептами подхода "жрите что дают" убъются апстену", ну будем считать, что сдержался  Жрите что дают, не нравиться готовте сами, не умеете платите деньги... Не сдержался..... Анатолий.
Сообщение отредактировал aesok - Dec 30 2008, 13:31
|
|
|
|
|
Dec 30 2008, 13:49
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(aesok @ Dec 30 2008, 16:26)  Дело не в стандарте, просто в avr back-end нет инструкций для (s/u)16x(s/u)16=32-умножения. Я смотрел это, в принципе их несложно добавить. про стандарт я имел в виду что gcc делает строго по стандарту, те "обязан" при таком обращении преобразовать к 32бит. На самом деле, ИМХО, стоило бы просто добавить в libc набор функций(частично инлайн)" 16x8=32 16x16=32 24x8=32 32/8=32 32/16=16 24/8=24 24/16=16 итд.
|
|
|
|
|
Dec 30 2008, 14:35
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(singlskv @ Dec 30 2008, 16:49)  про стандарт я имел в виду что gcc делает строго по стандарту, те "обязан" при таком обращении преобразовать к 32бит. В GCC имеется полный набор шаблонов инструкций для описания 32 битных операций умножения 'mulsi3', `ssmulsi3', `usmulsi3', где 'si' означеает single integer (или 32-бит) mode 's' и 'u' signed/unsigned. Также есть набор шаблонов для 16x16=32 бит умножения `mulhisi3', `umulhisi3', `usmulhisi3', где 'hi' half integer (16-бит) mode размерность операндов и 'si" mode размерность результата. Так как последние не реализованы для avr платформы, то компилятор всегда использует 32-битное умножение для 16- и 32-битных операндов, если необходим 32-битный результат. Добавить эти инструкции несложно, при этом добаляются функции __mulhisi3, __ssmulhisi3 __sumulhisi3, Но может оказаться так что в результирующем коде вместо 4 вызовов функции __mulsi3, будет по одному вызову __mulsi3, __mulhisi3, __ssmulhisi3 __sumulhisi3 при этом размер кода возрастет. Но все равно в большинстве случаях должен быть выигрыш и в размере кода тоже, не только в скорости. Анатолий.
Сообщение отредактировал aesok - Dec 30 2008, 14:36
|
|
|
|
Сообщений в этой теме
Огурцов 100 байт не хватает Dec 25 2008, 20:25 rezident Хоть и , но нелишне напомнить История одного бай... Dec 25 2008, 20:28 Огурцов Помню.
Фишка еще в том, что простое увеличение пам... Dec 25 2008, 20:34  ReAl Цитата(Огурцов @ Dec 25 2008, 22:34) Фишк... Dec 25 2008, 22:12   Огурцов Цитата(ReAl @ Dec 25 2008, 22:12) А почем... Dec 26 2008, 06:39 zltigo Цитата(rezident @ Dec 25 2008, 23:28) Хот... Dec 26 2008, 10:58  Огурцов Цитата(zltigo @ Dec 26 2008, 10:58) Да не... Dec 26 2008, 15:07   zltigo Цитата(Огурцов @ Dec 26 2008, 18:07) Ну з... Dec 26 2008, 16:06    singlskv Цитата(zltigo @ Dec 26 2008, 19:06) Решит... Dec 26 2008, 16:59     Огурцов Вообще, меня не уполномачивали публиковать исходни... Dec 26 2008, 17:40      zltigo Цитата(Огурцов @ Dec 26 2008, 20:40) Смия... Dec 26 2008, 17:54       Огурцов Цитата(zltigo @ Dec 26 2008, 17:54) И опя... Dec 26 2008, 18:11        zltigo Цитата(Огурцов @ Dec 26 2008, 21:11) Поче... Dec 26 2008, 18:22         Огурцов Цитата(zltigo @ Dec 26 2008, 18:22) Либо ... Dec 26 2008, 18:28          zltigo Цитата(Огурцов @ Dec 26 2008, 21:28) То ч... Dec 26 2008, 18:45          aesok Цитата(Огурцов @ Dec 26 2008, 21:28) Могу... Dec 26 2008, 18:45      singlskv Цитата(Огурцов @ Dec 26 2008, 20:40) Вооб... Dec 26 2008, 19:00       Огурцов http://www.atmel.com/dyn/resources/prod_documents/... Dec 26 2008, 19:27        zltigo Цитата(Огурцов @ Dec 26 2008, 22:12) http... Dec 26 2008, 19:29         Огурцов Дада, сделайте из этого 1.5-1.7 килобайта, чтобы о... Dec 26 2008, 19:57          zltigo Цитата(Огурцов @ Dec 26 2008, 22:57) Дада... Dec 26 2008, 21:45           Огурцов Цитата(zltigo @ Dec 26 2008, 21:45) Треп ... Dec 27 2008, 06:21            zltigo Цитата(Огурцов @ Dec 27 2008, 09:21) он в... Dec 27 2008, 10:37             Petka Цитата(zltigo @ Dec 27 2008, 13:37) Сейча... Dec 27 2008, 12:33              zltigo Цитата(Petka @ Dec 27 2008, 15:33) Оффтоп... Dec 27 2008, 13:17              Огурцов Цитата(Petka @ Dec 27 2008, 12:33) Которы... Dec 27 2008, 20:23               zltigo Цитата(Огурцов @ Dec 27 2008, 23:23) разд... Dec 27 2008, 22:49 SasaVitebsk Недавно в IAR выдушил 400 байт. Возможно мои реком... Dec 25 2008, 22:17 ReAl Тьху, у меги88 и 168 одинаковые размеры бут-секции... Dec 25 2008, 22:30 Огурцов Цитата(ReAl @ Dec 25 2008, 22:30) 2а) В G... Dec 26 2008, 07:02  aesok Цитата(Огурцов @ Dec 26 2008, 10:02) Как ... Dec 26 2008, 07:13   Огурцов Цитата(aesok @ Dec 26 2008, 07:13) Для эт... Dec 31 2008, 07:40    ReAl Цитата(Огурцов @ Dec 31 2008, 09:40) Пыта... Dec 31 2008, 08:27    _Pasha Цитата(Огурцов @ Dec 31 2008, 11:40) Если... Dec 31 2008, 11:11     Огурцов Цепляет, он там косвенно, через полдюжины #include... Dec 31 2008, 16:55 aesok Bus_transmit_byte и Bus_staff_n_transmit_byte это ... Dec 26 2008, 07:02 Огурцов Цитата(aesok @ Dec 26 2008, 07:02) avr-gc... Dec 26 2008, 07:17  Огурцов Добавил фичи, теперь не хватает 98 байт. Почти уга... Dec 26 2008, 10:06 _Pasha Цитата(rezident @ Dec 26 2008, 00:28) Ист... Dec 26 2008, 10:39 ReAl Цитата(_Pasha @ Dec 26 2008, 12:39) Опция... Dec 26 2008, 14:02 Diz Посмотрите, есть ли у в строке для компилятора клю... Dec 26 2008, 13:09 SasaVitebsk Спасибо. Поизучаем. Dec 26 2008, 23:20 zltigo Цитата(SasaVitebsk @ Dec 27 2008, 02:20) ... Dec 27 2008, 00:23 GetSmart Огурцов, из чистого любопытства спрашиваю, почему ... Dec 27 2008, 06:33 Огурцов Цитата(GetSmart @ Dec 27 2008, 06:33) Огу... Dec 27 2008, 06:46 SasaVitebsk Вот все мы не без изъяна. У каждого из нас есть св... Dec 27 2008, 21:43 zltigo Цитата(SasaVitebsk @ Dec 28 2008, 00:43) ... Dec 27 2008, 23:01  Огурцов Цитата(zltigo @ Dec 27 2008, 23:01) А, та... Dec 28 2008, 09:13   zltigo Цитата(Огурцов @ Dec 28 2008, 12:13) Я та... Dec 28 2008, 10:57    Petka Цитата(zltigo @ Dec 28 2008, 13:57) Ну си... Dec 28 2008, 11:04     zltigo Цитата(Petka @ Dec 28 2008, 14:04) в неоп... Dec 28 2008, 11:09      Petka Цитата(zltigo @ Dec 28 2008, 14:09) Тогда... Dec 28 2008, 11:16       zltigo Цитата(Petka @ Dec 28 2008, 14:16) хотя-б... Dec 28 2008, 11:20    Огурцов Цитата(zltigo @ Dec 28 2008, 10:57) Судя ... Dec 28 2008, 12:29     zltigo Цитата(Огурцов @ Dec 28 2008, 15:29) почи... Dec 28 2008, 14:15      Petka Цитата(zltigo @ Dec 28 2008, 17:15) Сколь... Dec 28 2008, 15:59       zltigo Цитата(Petka @ Dec 28 2008, 18:59) XTEA 9... Dec 28 2008, 16:05        Petka RE: 100 байт не хватает Dec 28 2008, 16:35         zltigo Цитата(Petka @ Dec 28 2008, 19:35) за что... Dec 28 2008, 16:39          Petka Цитата(zltigo @ Dec 28 2008, 19:39) 31 ве... Dec 28 2008, 17:19           zltigo Цитата(Petka @ Dec 28 2008, 20:19) IARом ... Dec 29 2008, 11:06            Petka Цитата(zltigo @ Dec 29 2008, 14:06) Что-т... Dec 29 2008, 13:39            singlskv Цитата(zltigo @ Dec 29 2008, 14:06) А вот... Dec 29 2008, 17:45      Огурцов Цитата(zltigo @ Dec 28 2008, 14:15) Уже о... Dec 28 2008, 16:01 defunct Огурцов:
A. Нет смысла переходить на инструмент, ... Dec 27 2008, 21:48 Огурцов Цитата(defunct @ Dec 27 2008, 21:48) asm ... Dec 27 2008, 22:04  defunct Цитата(Огурцов @ Dec 28 2008, 00:04) Если... Dec 27 2008, 22:14   Огурцов Цитата(defunct @ Dec 27 2008, 22:14) Что ... Dec 27 2008, 22:32    defunct Цитата(Огурцов @ Dec 28 2008, 00:32) Како... Dec 27 2008, 22:41     Огурцов Цитата(defunct @ Dec 27 2008, 22:41) DES ... Dec 27 2008, 22:56      defunct Цитата(Огурцов @ Dec 28 2008, 00:56) #def... Dec 27 2008, 22:57 Petka Ещё как идея: Попробуйте вместо буржуевского AES и... Dec 28 2008, 08:19 zltigo Цитата(Petka @ Dec 28 2008, 11:19) Наскол... Dec 28 2008, 08:53  Petka Цитата(zltigo @ Dec 28 2008, 11:53) Он от... Dec 28 2008, 09:34   zltigo Цитата(Petka @ Dec 28 2008, 12:34) Из 32б... Dec 28 2008, 10:10    Petka Цитата(zltigo @ Dec 28 2008, 13:10) ... П... Dec 28 2008, 10:19 _Pasha C vs ASM (AVR):
Вчера переписал на одном девайсе п... Dec 30 2008, 09:48 singlskv Цитата(_Pasha @ Dec 30 2008, 12:48) C vs ... Dec 30 2008, 10:25     singlskv Цитата(aesok @ Dec 30 2008, 17:35) Так ка... Dec 30 2008, 15:06 _Pasha Цитата(Rst7 @ Dec 30 2008, 15:13) Где?
Вы... Dec 30 2008, 12:24 Rst7 ЦитатаIAR в таких случаях действительно оптимизиру... Dec 30 2008, 13:17
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|