|
|
 |
Ответов
|
May 17 2016, 11:10
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(Alechek @ May 17 2016, 14:00)  И не больше. Ну, ну. Я как-то на Си осмелился пописать под AVR. На меге8 килобайты флеш закончились настолько быстро, что захотелось узнать куда. Листинг показал, что компилятор сохраняет в стек все регистры при вызове функций, даже неиспользуемые. Отдельным приключением было сделать программный UART на Си - по тактам реализация очень неустойчива - на том краю планеты бабочка махнет рукой (добавим, например, переменную в проект), а у нас пару лишних тактов в цикле задержки. Что касается регистров, тактов и байтов - компилятор очень непредсказуемая штука.
|
|
|
|
|
May 17 2016, 11:34
|
Частый гость
 
Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134

|
Цитата(adnega @ May 17 2016, 14:10)  Листинг показал, что компилятор сохраняет в стек все регистры при вызове функций, даже неиспользуемые. Компилятор IAR так поступает при выключенной оптимизации (или невысоком уровне).
|
|
|
|
|
May 17 2016, 11:51
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(Копейкин @ May 17 2016, 14:34)  Компилятор IAR так поступает при выключенной оптимизации (или невысоком уровне). Тут советовали головой думать, но моя не может придумать - "зачем"? Зачем неиспользуемые регистры складывать в стек?? Хотелось, чтобы основные "просьбы" к компилятору были в исходнике, а не различных ключах. Именно поэтому есть задачки, не решаемые на С гарантированно, рассчитывать на здравый смысл компилятора я бы не стал. Цитата(Alechek @ May 17 2016, 14:40)  Да, и определитесь, что у вас закончилось, стек или флеш.... не вяжется как-то. Прошу без эмоций определить, что быстрее заканчивается при таком подходе Код 11e: 1f 92 push r1 120: 0f 92 push r0 122: 0f b6 in r0, 0x3f; 63 124: 0f 92 push r0 126: 11 24 eor r1, r1 128: 2f 93 push r18 12a: 3f 93 push r19 12c: 4f 93 push r20 12e: 5f 93 push r21 130: 6f 93 push r22 132: 7f 93 push r23 134: 8f 93 push r24 136: 9f 93 push r25 138: af 93 push r26 13a: bf 93 push r27 13c: ef 93 push r30 13e: ff 93 push r31 Это еще годный код, т.к. не все регистры убираются в стек, а только используемые. Я описывал ситуацию, когда банальная установка переменной оборачивалась push-ами и pop-ами для всех регистров. В моем случае резко закончилась флеш, хотя и к глубине стека требования резко возрастают. Перед использованием С этот же проект был реализован на asm. При 10% asm-функционала на С закончился флеш.
|
|
|
|
|
May 17 2016, 11:57
|
Профессионал
    
Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882

|
Цитата(adnega @ May 17 2016, 16:41)  Зачем неиспользуемые регистры складывать в стек?? Затем что оптимизации НЕТ. Делаем так, чтобы 110% все работало и отладка была удобной. Определитесь для начала, какой результат хотите: быстрый, мало памяти занимал, или для отладки. Программа не работала? Так какие претензии к компилятору? Цитата(adnega @ May 17 2016, 16:51)  Прошу без эмоций определить, что быстрее заканчивается при таком подходе Так да. Закончится и то, и другое. На AVR почти не писал. А в ARM,как тут уже приводили, - одна инструкция хооть для всех регистров.
|
|
|
|
Сообщений в этой теме
hardgame Чтение внутренних регистров STM32 May 16 2016, 14:10 Forger Цитата(hardgame @ May 16 2016, 17:10) Ест... May 16 2016, 14:31 prottoss Цитата(Forger @ May 16 2016, 20:31) Я бы ... May 16 2016, 14:35  Forger Цитата(prottoss @ May 16 2016, 17:35) А е... May 16 2016, 14:44   prottoss Цитата(Forger @ May 16 2016, 20:44) Вот п... May 16 2016, 16:17 scifi Цитата(Forger @ May 16 2016, 17:31) Я бы ... May 16 2016, 15:05 Alechek Единственное, для чего мне это понадобилось, это с... May 16 2016, 16:09 adnega Цитата(Alechek @ May 16 2016, 19:09) Един... May 16 2016, 16:20  aaarrr Цитата(adnega @ May 16 2016, 19:20) Зачем... May 16 2016, 19:42   adnega Цитата(aaarrr @ May 16 2016, 22:42) А R4-... May 16 2016, 19:59    aaarrr Цитата(adnega @ May 16 2016, 22:59) Меня ... May 16 2016, 20:27     adnega Цитата(aaarrr @ May 16 2016, 23:27) У мен... May 16 2016, 20:38      aaarrr Цитата(adnega @ May 16 2016, 23:38) А на ... May 16 2016, 21:24 jcxz Цитата(Alechek @ May 16 2016, 22:09) Един... May 17 2016, 02:00  Alechek Цитата(jcxz @ May 17 2016, 07:00) И где г... May 17 2016, 05:22   jcxz Цитата(Alechek @ May 17 2016, 11:22) __st... May 17 2016, 08:48    scifi Цитата(jcxz @ May 17 2016, 11:48) Ещё раз... May 17 2016, 09:01     jcxz Цитата(scifi @ May 17 2016, 15:01) Как гд... May 17 2016, 10:33 prottoss ИМХО - лучше всего сделать отдельный ассемблерный ... May 16 2016, 16:21 hardgame Всем Спасибо за комментарии. Регистры были необход... May 16 2016, 17:35 jcxz Цитата(Alechek @ May 17 2016, 17:00) jcxz... May 18 2016, 05:05 Alechek adnega, речь немного не про такой случай.
Использо... May 17 2016, 11:40 Alechek jcxz, сравнивать неопределеность, исходящую от ком... May 18 2016, 06:00
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|