|
Сопоставление проектов С и АСМ, Немного цифр |
|
|
|
 |
Ответов
|
Feb 21 2008, 07:34
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(AHTOXA @ Feb 21 2008, 10:20)  WINAVR как раз в этом очень сильно тормозит. Работа с флешом в нём сделана мегакриво. ... И похоже, что по политическим соображениям никогда не исправится. Насчет кривизны: Из предыдущего утомительного примера: Код static Cm_Xref_t Cm_Xref[Max_cmd+1]= { {cm_Brief,0,0}, // version crc {cm_NetLocate,&Net_ID,EE_Fit+1}, {cm_Set_Selector,&Selector,EE_Fit+1}, /*****************************************/ }; /******************************************/ uint8_t M; M = Cm_Xref[2].ojsize; Так constant propagation оно просчитывает. А стоит появиться адресному выражению - кирдык. Цитата Попробуйте писАть на С, а не на asm сишными словами... Блин, вот зацепил...до сих пор помню.
|
|
|
|
|
Feb 21 2008, 11:52
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(_Pasha @ Feb 21 2008, 09:34)  Блин, вот зацепил...до сих пор помню. С одной стороны это гут, т.к. хотел обратить Ваше внимание на то, что стиль кода Вашего примера не Сишный, и рад что вышло. Все тоже самое в Сишном стиле можно сделать красивее и быстрее чем на асм, и уже глядя на код нельзя будет его назвать "байдой". Цитата Проблемы-то начинаются с обращения к памяти программ за данными. Этот процесс нигде не автоматизирован, отсюда сложности. да и на асм он не автоматизирован, ровно в той же степени.
|
|
|
|
|
Feb 21 2008, 16:57
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Вернемся к нашей баранине. "Не умеешь-научим, не хочешь-заставим." Заставили. Дописал функцию записи в ЕЕПРОМ, в аккурат по шаблону eeprom_write_block() . Код void EE_Proof_Write_Block(const void *pointer_ram, void *pointer_eeprom, size_t n) { size_t j; uint8_t *src,*dst;
src = (uint8_t*)pointer_ram; dst = (uint8_t*)pointer_eeprom;
for (j=0;j<n;j++) { if (eeprom_read_byte(dst) != *src) eeprom_write_byte(dst,(uint8_t)*src); dst++; src++; } return; } ИТОГО такое: +56 байт. Имея ввиду, что была исходная eeprom_write_block(), вычтем, скажем, байт 16. В добавок, это все можно обрезать, задаваясь размером блока не size_t a uint8_t, если уж очень хотца. Это еще минус байта 4-6. Короче, +32..36 байт. Оптимайзер рулит!!! Может, мы доживем до тех времен, когда свопинг лишний чистится будет... Кстати, кто-нибудь знает, почему многопроходовая оптимизация в GCC не в фаворе? Цитата(defunct @ Feb 21 2008, 14:52)  Все тоже самое в Сишном стиле можно сделать красивее и быстрее чем на асм, и уже глядя на код нельзя будет его назвать "байдой". Боюсь, что не получится. Команд будет поболее - до 30 в полновесном варианте. И надо, чтобы в идеале доступ был не по индексу, а по LookUp, т.к. коды команд могут меняться. Так что от таблицы никуда не денешься. Впрочем, если Вы пальцем ткнете, я пойму, что имеется ввиду...
|
|
|
|
|
Feb 21 2008, 17:49
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(_Pasha @ Feb 21 2008, 19:57)  Код void EE_Proof_Write_Block(const void *pointer_ram, void *pointer_eeprom, size_t n) { size_t j; uint8_t *src,*dst;
src = (uint8_t*)pointer_ram; dst = (uint8_t*)pointer_eeprom;
for (j=0;j<n;j++) { if (eeprom_read_byte(dst) != *src) eeprom_write_byte(dst,(uint8_t)*src); dst++; src++; } return; } Несколько моментов про Ваш код: - вместо цикла for лучше использовать do..while c проверкой size_t n == 0 только в самом начале.. - написав отдельно src++ и вызывая стандартные функции Вы сами себя лишили возможности пользоваться автоинкрементом при доступе к данным в RAM - каждая из функций eeprom_xxx будет ждать флага освобождения EEPROM - каждая из функций eeprom_xxx будет прописывать один и тот же адрес в EEAR попробуйте это отрихтовать и удивитесь лаконичности полученого кода...
|
|
|
|
Сообщений в этой теме
SasaVitebsk Сопоставление проектов С и АСМ Feb 17 2008, 20:18 _Pasha Для меня лично есть одно НО:
вот я использую мульт... Feb 18 2008, 07:58 Dog Pawlowa Цитата(_Pasha @ Feb 18 2008, 11:58) Для м... Feb 19 2008, 06:54  _Pasha Цитата(Dog Pawlowa @ Feb 19 2008, 09:54) ... Feb 19 2008, 07:59   Dog Pawlowa Цитата(_Pasha @ Feb 19 2008, 11:59) Продо... Feb 19 2008, 10:42    _Pasha Цитата(Dog Pawlowa @ Feb 19 2008, 13:42) ... Feb 19 2008, 10:57 KRS Это все не показатель.
Если код на С заточить напр... Feb 18 2008, 08:32 SasaVitebsk 2 _pasha.
Да с наработками не хочется расставаться... Feb 18 2008, 15:45 Qwertty Цитата(SasaVitebsk @ Feb 18 2008, 18:45) ... Feb 18 2008, 18:33  SasaVitebsk Цитата(Qwertty @ Feb 18 2008, 22:33) Изви... Feb 18 2008, 20:17 Rst7 Цитатаи использовать его фичи:#pragma inline=force... Feb 18 2008, 16:19 Т.Достоевский ИМХО. Написать С код соизмеримый с асмом можно, но... Feb 18 2008, 23:25 IgorKossak Цитата(Т.Достоевский @ Feb 19 2008, 01:25... Feb 19 2008, 06:37 SasaVitebsk Цитата(Т.Достоевский @ Feb 19 2008, 03:25... Feb 19 2008, 11:42  _Pasha Цитата(SasaVitebsk @ Feb 19 2008, 14:42) ... Feb 19 2008, 12:04 Igor26 ЦитатаНаписать С код соизмеримый с асмом можно, но... Feb 19 2008, 06:45 Rst7 ЦитатаА вот интеретно, использовали ли Вы такие пр... Feb 19 2008, 06:50 forever failure Цитата(SasaVitebsk @ Feb 19 2008, 16:42) ... Feb 19 2008, 13:13 SasaVitebsk Цитата(forever failure @ Feb 19 2008, 17... Feb 19 2008, 17:00 _Pasha Теперь немного о другом. Рискую утомить читателя, ... Feb 20 2008, 08:15 defunct Цитата(_Pasha @ Feb 20 2008, 10:15) Могу ... Feb 20 2008, 14:51 SasaVitebsk Не могу сказать, что я точно понял смысл, но попро... Feb 20 2008, 16:25 _Pasha Цитата(defunct @ Feb 20 2008, 17:51) Стил... Feb 20 2008, 18:49 SasaVitebsk Цитата(_Pasha @ Feb 20 2008, 22:49) Пробл... Feb 20 2008, 21:06 ReAl Цитата(_Pasha @ Feb 21 2008, 03:19) Вот э... Feb 21 2008, 08:43  singlskv Цитата(ReAl @ Feb 21 2008, 11:43) Ну изви... Feb 21 2008, 22:37   Petka Цитата(singlskv @ Feb 22 2008, 01:37) Воп... Feb 22 2008, 07:25    singlskv Цитата(Petka @ Feb 22 2008, 10:25) Велоси... Feb 22 2008, 09:45 _Pasha Цитата(defunct @ Feb 21 2008, 14:52) стил... Feb 21 2008, 19:09 Artak Ребята, может бить мой вопрос покажетса смехотwорн... Feb 21 2008, 23:25 ReAl Цитата(Artak @ Feb 22 2008, 01:25) На C п... Feb 22 2008, 15:27 Rst7 ЦитатаА есть вообще грамотный способ решения таких... Feb 22 2008, 06:29 Artak Цитата(Rst7 @ Feb 22 2008, 10:29) В IAR... Feb 26 2008, 20:26 _Pasha Теперь про асм.
В контексте многопоточного програм... Feb 22 2008, 10:47 _Pasha В общем, наигрался я с "С". Память закан... Feb 22 2008, 23:10 defunct Цитата(_Pasha @ Feb 23 2008, 01:10) В общ... Feb 22 2008, 23:37 singlskv Цитата(_Pasha @ Feb 23 2008, 02:10) В общ... Feb 22 2008, 23:55  Alex B._ Цитата(singlskv @ Feb 23 2008, 02:55) я н... Feb 23 2008, 00:03   singlskv Цитата(Alex B._ @ Feb 23 2008, 03:03) хм,... Feb 23 2008, 00:08  defunct Цитата(singlskv @ Feb 23 2008, 01:55) Вот... Feb 23 2008, 00:10   singlskv Цитата(defunct @ Feb 23 2008, 03:10) А чт... Feb 23 2008, 00:43    defunct Цитата(singlskv @ Feb 23 2008, 02:43) Как... Feb 23 2008, 01:10     singlskv Цитата(defunct @ Feb 23 2008, 04:10) Я ко... Feb 24 2008, 18:47      SasaVitebsk Цитата(singlskv @ Feb 24 2008, 22:47) Ска... Feb 24 2008, 19:50       singlskv Цитата(SasaVitebsk @ Feb 24 2008, 22:50) ... Feb 24 2008, 22:23        SasaVitebsk Цитата(singlskv @ Feb 25 2008, 02:23) Уве... Feb 25 2008, 13:23      defunct Цитата(singlskv @ Feb 24 2008, 20:47) Ска... Feb 24 2008, 21:03 SasaVitebsk А мне просто супер нравится С. По-моему, для МК эт... Feb 23 2008, 00:58 SasaVitebsk Из приведенного мной первого поста видно, что прои... Feb 23 2008, 11:09 Rst7 ЦитатаpChan->vAverage = (pChan->vSum + 4) ... Feb 23 2008, 20:18 defunct Цитата(Rst7 @ Feb 23 2008, 22:18) Мне дру... Feb 24 2008, 04:54 Rst7 Все... Туплю. Уже и ответ пространный написал, хор... Feb 24 2008, 10:40 Непомнящий Евгений По-моему, с heap основная проблема в том, как расс... Feb 26 2008, 09:29 singlskv Цитата(Непомнящий Евгений @ Feb 26 2008, 12... Feb 26 2008, 10:39  SasaVitebsk Цитата(singlskv @ Feb 26 2008, 14:39) Про... Feb 26 2008, 11:50 defunct Цитата(Непомнящий Евгений @ Feb 26 2008, 11... Feb 26 2008, 11:21
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|