Quantum1 0 6 июня Опубликовано 6 июня (изменено) · Жалоба On 6/6/2024 at 7:25 PM, jcxz said: Так в чём именно "не угадал"? PS: Кстати - судя по листингу это может быть и Cortex-M. Cortex-M вполне может выполнять такие команды. какие? mov, add да и b )))))))) так это любой арм выполнит.... хоть A72 )))) On 6/6/2024 at 7:28 PM, jcxz said: Сперва научитесь читать. Именно читать написанное. А не выумывать. Модель вашего проца я и не угадывал. cortex-m это что?? архитектура?? ну у вас этого навыка не было 4 страницы )))) ну так разобрались с volatile? Изменено 6 июня пользователем Quantum1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 10 6 июня Опубликовано 6 июня · Жалоба 16 minutes ago, jcxz said: Причём тут DSP? Судя по листингу - у ТС обычный ARM в 32-битном режиме. Смутил CodeComposerStudio и предложенное описание TI's optimizing C compiler for TMS32C28x. А в ассемблерный код я, признаться, и не всматривался (из зрительного зала это не особо нужно :-) ). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amaora 23 6 июня Опубликовано 6 июня · Жалоба 5 hours ago, Quantum1 said: Но компилятор тут слишком своевольничает, и довольно существенно меняет последовательность выполнения уже в скомпилированном asm. Т.е. может например загрузить в регистр, что то посчитанное на грубо говоря несколько С-строчек кода позднее, чем это написано. А это неприемлимо и все валит. Я принципиально не хочу играться с настройками оптимизации комплилятора. Так как это та часть кода, которая обязана всегда выполняться одинаково, не важно что там мы оптимизируем. Указывать компилятору когда загружать значение в регистр относительно строк исходного кода? Это некорректная постановка вопроса, компиляторы так не работают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 42 6 июня Опубликовано 6 июня · Жалоба 1 час назад, Raven сказал: Да, дайте же ему, наконец, ключи, которые отключат оптимизацию компиляции для кода Дак в среде CCS наверняка в настройках есть optimization level пусть поставит none да и все))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 160 6 июня Опубликовано 6 июня · Жалоба 2 минуты назад, mantech сказал: Дак в среде CCS наверняка в настройках есть optimization level пусть поставит none да и все))) Это ничего не гарантирует, да и корневая идея топика - троллинг) 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Quantum1 0 6 июня Опубликовано 6 июня · Жалоба On 6/6/2024 at 9:06 PM, mantech said: Дак в среде CCS наверняка в настройках есть optimization level пусть поставит none да и все))) в шапке топика написано черным по белому, русским языком, я хочу часть кода по сути отвязать от глобальных настроек компилятора. И это совершенно правильно. Допустим у вас часть кода это чисто вычисления, и там не важно что и когда, главное что бы допустим функция вернула верные значения. Т.е. пусть тут компилятор заоптимизирует хоть сам себя. Когда работаешь с процессами реального времени. Тебе критично важно что бы твой код выполнился ровно в тот момент времени, и ровно так как написано. В самых важных местах - переходишь на ассемблер. В менее критичных - добиваешься от компилятора желаемого. Что все так возбудились от по сути очевидной задачи... мне совершенно не понятно.... On 6/6/2024 at 8:16 PM, amaora said: Указывать компилятору когда загружать значение в регистр относительно строк исходного кода? Это некорректная постановка вопроса, компиляторы так не работают. Да ладно... ок, а что делать то тогда? Как работает миллионы систем реального времени, не эти которые с RTOS лампочки там дома включают, а настоящие которые поездами/самолетами рулят) On 6/6/2024 at 9:10 PM, Arlleex said: Это ничего не гарантирует, да и корневая идея топика - троллинг) вы хоть раз делали хотя бы цифровой многоканальный источник питания? ну или управление каким нить прибором научным - лазерной системой например? On 6/6/2024 at 7:15 PM, Stepanov said: Del. Да, надо уточнить какой именно МК и компилятор. За холиваром пропустил сообщение)) Cortex R5F TI ARM Assembler PC v20.2.6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 160 6 июня Опубликовано 6 июня · Жалоба 24 минуты назад, Quantum1 сказал: вы хоть раз делали хотя бы цифровой многоканальный источник питания? ну или управление каким нить прибором научным - лазерной системой например? Только лампочкой в цикле моргал. А что, сложно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 10 6 июня Опубликовано 6 июня · Жалоба 2TC: Вы уж, если не хотите светить свой целевой код, то хотя бы соорудите выжимку-пример (только полный, компилируемый), в котором будет задействован нужный вам вариант организации кода. И выложите для обсуждения и советов. Если у вас хватит выдержки довести процесс до конца и не разругаться с советчиками, думаю, вас удивит, как можно было достичь желаемого уже заявленными средствами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 6 июня Опубликовано 6 июня · Жалоба 6 часов назад, jcxz сказал: То что они глобальные - не панацея. Ведь компилятор вправе делать все оптимизации, которые не нарушают логику программы, описанную алгоритмом. А выделение в отдельную функцию не меняет логику выполнения. вот поэтому их надо перекладывать в другой объект, чтоб компилятор не мог заинлайнить. И по моей практике - не инлайнит он на АРМах, надо особенно его еще уговорить заинлайнить, особенно с ключом Os Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 7 июня Опубликовано 7 июня · Жалоба 6 часов назад, AlexRayne сказал: вот поэтому их надо перекладывать в другой объект А потом включаете LTO и... 12 часов назад, Quantum1 сказал: И как мы видим, в моем случае, компилятор творит дичь именно на выражениях.... Во-первых, мы этого не видим, код засекречен. Во-вторых, внимательно следим за руками. Вот тут компилятор выдаёт предупреждение: Ну ок, объясним компилятору КАК мы хотим: И он нас услышал //int main() //{ main: // int tmp_a = a; LDR.N R2,??DataTable1_1 LDR R1,[R2, #+0] // int tmp_b = b; LDR R0,[R2, #+4] // c = tmp_a + tmp_b; ADDS R1,R0,R1 STR R1,[R2, #+8] // for(;;); ??main_0: B.N ??main_0 //} ??DataTable1_1: DATA32 DC32 a Хотите наоборот? Легко. //int main() //{ main: // int tmp_b = b; LDR.N R2,??DataTable1_1 LDR R0,[R2, #+4] // int tmp_a = a; LDR R1,[R2, #+0] // c = tmp_a + tmp_b; ADDS R0,R0,R1 STR R0,[R2, #+8] // for(;;); ??main_0: B.N ??main_0 //} Обращаем особое внимание, что компилятор оставил только операции с volatile сущностями, остальное для него было лишь пояснение что и как я хочу сделать. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 7 июня Опубликовано 7 июня · Жалоба 9 часов назад, Quantum1 сказал: Тебе критично важно что бы твой код выполнился ровно в тот момент времени, и ровно так как написано. Критерий "ровно в тот момент времени" огласите? С точностью до такта? На ARM с конвейером, предвыборками, разными шинами, DMA и кэшами это в принципе невозможно даже на ассемблере. "Ровно как написано" в смысле последовательности чтений/записей делается на С правильной расстановкой volatile вне зависимости от режимов компиляции/оптимизации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anxigeros 1 7 июня Опубликовано 7 июня (изменено) · Жалоба Я конечно понимаю, что вместо обозначеного вопроса данный топик ушёл в сторону обсуждения, какой автор "баран", но почему никто из специалистов ничего не сказал про asm volatile("" ::: "memory");? Изменено 7 июня пользователем Anxigeros Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 7 июня Опубликовано 7 июня · Жалоба Ну вы сказали, и что изменилось? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 160 7 июня Опубликовано 7 июня · Жалоба 13 минут назад, Anxigeros сказал: Я конечно понимаю, что вместо обозначеного вопроса данный топик ушёл в сторону обсуждения, какой автор "баран", но почему никто из специалистов ничего не сказал про asm volatile("" ::: "memory");? Барьеры "не про это". 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 42 7 июня Опубликовано 7 июня · Жалоба 11 часов назад, Quantum1 сказал: в шапке топика написано черным по белому, русским языком, я хочу часть кода по сути отвязать от глобальных настроек компилятора. И это совершенно правильно. Это было написано ТОЛЬКО для проверки вашей гипотезы, что оптимизация может вносить изменения в результат, которые вам не подходят, если это уже было проверено, то извиняйте, не увидел... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться