|
Инкремент указателя и оптимизация |
|
|
|
Oct 1 2015, 13:29
|
Знающий
   
Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231

|
День добрый. Столкнулся с проблемой оптимизации, при инкременте указателя когда 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 конечно не критичен, но костыль. Отключить оптимизацию только для ф-ции не рассматриваю, т.к. подобные записи оформил виде макросов и могут быть в разных участках кода
|
|
|
|
|
Oct 1 2015, 16:53
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(Rash @ Oct 1 2015, 19:50)  А вопрос как написать тоже, но без NOPа? Зачем? Ведь нет жалобы: Цитата(Rash @ Oct 1 2015, 19:50)  Жалобы нет То есть всё нормально. Честно, не понимаю.
|
|
|
|
|
Oct 1 2015, 18:13
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(Rash @ Oct 1 2015, 20:51)  жалоба на то, что исчез инкремент, который не должен исчезать Ну наконец-то. Дальше надо понять, где у вас ошибка в коде (что очень вероятно) или где глючит компилятор (что весьма маловероятно). Потому что какой-то левый NOP - это не исправление ошибки в коде, а танец с бубном. И без понимания происходящего нежелательный сценарий повторится снова в неожиданном месте. А вот понять, где ошибка, я точно не смогу, потому что приведён мелкий кусочек кода. Ну а если покажете мегапростыню кода, то не обещаю, что буду в ней разбираться  UPDATE: Забыл спросить. Жалоба только на то, что код в окне дизассемблера выглядит не так, как хотелось бы? Или реально программа работает не так, как задумано?
|
|
|
|
|
Oct 2 2015, 06:52
|
Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 7-04-10
Из: Пушкино
Пользователь №: 56 462

|
Вам бы не полениться и сделать код читаемым, как например ввести дополнительные переменные. Оптимизация всё уберет, зато сам код и дизасм читать легче станет. Очень очень очень некрасивый код: Цитата *((*ppData_tx)++) = *((*ppData_rx)++);
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|