Rash 0 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба День добрый. Столкнулся с проблемой оптимизации, при инкременте указателя когда 2 строчки подряд. Оптимизация макс. по скорости. IAR ARM 7.40.3. Мк STMF4 static void _setup_resp_ready(uint8_t** ppData_rx, bool allow_addr, uint8_t** ppData_tx) { if(allow_addr != false) *(*(volatile uint_setup_addr_t**)&(*ppData_tx))++ = setup_addr; // !!! если NOP нет, то код будет оптимизирован __ASM("NOP"); *((*ppData_tx)++) = *((*ppData_rx)++); return; } Прим. uint_setup_addr_t - задаётся тип, на данный момент uint16_t скрины ассемблера без оптимизации макс. оптимизация по скорости макс. оптимизация по скорости + NOP Вопрос, возможно ли сделать запись чтобы не оптимизировался инкремент указателя? NOP конечно не критичен, но костыль. Отключить оптимизацию только для ф-ции не рассматриваю, т.к. подобные записи оформил виде макросов и могут быть в разных участках кода Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба Многабукаффниасилил. Я не пойму, жалоба на некорректный код, так как исчез инкремент, который никак не должен исчезать? Если так, то такой вопрос: а вы уверены, что у вас исходник корректный? Что там, где надо, написано volatile и так далее? Потому что из приведённых отрывков этого совсем не видно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rash 0 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба да вроде не так много букв ). Проблема в том, что исчезает инкремент, второй скрин, если между строчками где идёт присваивание по одному и тому же указателю с инкрементом поставить NOP, то всё хорошо, скрин 3 (как и без оптимизации). volatile по типу поставил, хотя он не влияет. Жалобы нет, т.к. код мой. А вопрос как написать тоже, но без NOPа? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба А вопрос как написать тоже, но без NOPа? Зачем? Ведь нет жалобы: Жалобы нет То есть всё нормально. Честно, не понимаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rash 0 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба 1. Не нравятся костыли в любом виде, в данном случае NOP. 2. Нет гарантии, что в следующий раз я могу что то не учесть, подобной записью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба Вы не ответили на важный вопрос: "жалоба на некорректный код, так как исчез инкремент, который никак не должен исчезать?" Да или нет? От этого многое зависит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rash 0 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба жалоба на то, что исчез инкремент, который не должен исчезать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба жалоба на то, что исчез инкремент, который не должен исчезать Ну наконец-то. Дальше надо понять, где у вас ошибка в коде (что очень вероятно) или где глючит компилятор (что весьма маловероятно). Потому что какой-то левый NOP - это не исправление ошибки в коде, а танец с бубном. И без понимания происходящего нежелательный сценарий повторится снова в неожиданном месте. А вот понять, где ошибка, я точно не смогу, потому что приведён мелкий кусочек кода. Ну а если покажете мегапростыню кода, то не обещаю, что буду в ней разбираться :laughing: UPDATE: Забыл спросить. Жалоба только на то, что код в окне дизассемблера выглядит не так, как хотелось бы? Или реально программа работает не так, как задумано? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба да там наверное нездоровый упор на CSE. просто сделать через добавление локальных переменных - попустит дерево синтаксиса и станет код вменяемым Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба да там наверное нездоровый упор на CSE. просто сделать через добавление локальных переменных - попустит дерево синтаксиса и станет код вменяемым То есть уже установлено, что компилятор виноват. А если бы были судьёй, то всех расстреливали бы без следствия? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rash 0 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба Жалоба только на то, что код в окне дизассемблера выглядит не так, как хотелось бы? Или реально программа работает не так, как задумано? Программа работает как задумано, без оптимизации или при добавлении NOP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба Программа работает как задумано, без оптимизации или при добавлении NOP. Обычное дело, если не понимать, что такое volatile, и где его нужно применять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rash 0 1 октября, 2015 Опубликовано 1 октября, 2015 · Жалоба естественно, стоит при определении типа на указатель, куда уж не правильней Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
becopt 0 2 октября, 2015 Опубликовано 2 октября, 2015 · Жалоба Вам бы не полениться и сделать код читаемым, как например ввести дополнительные переменные. Оптимизация всё уберет, зато сам код и дизасм читать легче станет. Очень очень очень некрасивый код: *((*ppData_tx)++) = *((*ppData_rx)++); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 2 октября, 2015 Опубликовано 2 октября, 2015 · Жалоба естественно, стоит при определении типа на указатель, куда уж не правильней я так понимаю: указатель1->указатель2->данные и ваш volatile относится к данным, а не к указателям Но могу ошибаться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться