IF_P 1 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба Я перевел несколько Си-шных файлов из директории проекта в один файл с main и подключил их через "include". Но теперь листинг этих программ только на ассеблере, без си-команд. Есть ли возможность видеть полный листинг, как при раздельной компиляции? Может есть какие-то настройки компилятора? Я пока ничего не нашел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба 50 минут назад, IF_P сказал: Я перевел несколько Си-шных файлов из директории проекта в один файл с main и подключил их через "include". Но теперь листинг этих программ только на ассеблере, без си-команд. Пожалуйста, напишите вопрос вразумительно. 1. Что такое "один файл с main"? 2. "подключил их" - кого "их"? Каким образом вы этих "их" подключили куда-то, если вели речь о том что, cодержимое одних файлов вставили в какой-то другой файл (некий main.c или в котором функция main())? 3. Каких "этих программ"? У вас несколько программ (проектов)? Или о чём речь? 4. А на каком ещё языке должен быть листинг если не на ассемблере? Неужели бывают листинги на других языках??? Не знал.... Просветите! 5. Что такое "си-команды"? Пишу на си уже 20+ лет, а до сих пор не знаю ни одной таковой... 50 минут назад, IF_P сказал: Есть ли возможность видеть полный листинг, как при раздельной компиляции? Может есть какие-то настройки компилятора? Я пока ничего не нашел. IAR-ов много разных в природе. Какой у вас - спросим видимо у телепатов, когда они вернутся с карантина. А в моём IAR for ARM v7.80.4 генерация листингов включается галкой "Output list file" в разделе "C/C++ Compiler". PS: Слышал в новостях, что во время действия режима самоизоляции в РФ резко выросли продажи спиртного, но не думал что на столько сильно.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба 1 час назад, IF_P сказал: Я перевел несколько Си-шных файлов из директории проекта в один файл с main и подключил их через "include". Но теперь листинг этих программ только на ассеблере, без си-команд. Есть ли возможность видеть полный листинг, как при раздельной компиляции? Может есть какие-то настройки компилятора? Я пока ничего не нашел. Действительно, на IAR ARM v7 такой эффект наблюдается. Может не стоит идти такими левыми путями и сделать стандартно, как было? И не включать ххх.с файлы через "include" ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба 11 минут назад, Baser сказал: Действительно, на IAR ARM v7 такой эффект наблюдается. Может не стоит идти такими левыми путями и сделать стандартно, как было? И не включать ххх.с файлы через "include" ? Если автор включил содержимое каких-то си-файлов в другой си-файл с помощью #include, то естественно листинг будет этого результирующего файла. Это не "эффект" какого-то компилятора, а так и должно быть в любом компиляторе, так как листинг генерится компилятором после препроцессинга. Ну если только в компиляторе нет каких-то особых спец.средств на такой случай, что сомнительно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IF_P 1 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба 50 minutes ago, jcxz said: PS: Слышал в новостях, что во время действия режима самоизоляции в РФ резко выросли продажи спиртного, но не думал что на столько сильно.... Не покупаю. Употребляю свое домашнее вино (умеренно). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба 2 hours ago, IF_P said: Я перевел несколько Си-шных файлов из директории проекта в один файл с main и подключил их через "include". Но теперь листинг этих программ только на ассеблере, без си-команд. Есть ли возможность видеть полный листинг, как при раздельной компиляции? Может есть какие-то настройки компилятора? Я пока ничего не нашел. При появлении в исходном исполнимом коде "#include" (в смысле, не в части декларирования), возникает шизофрения с номерацией строк исходного кода. Ни разу так не делал, даже не представляю как оно поведет себя при отладке. (как поведет себя при "шаге" F10 на(?) #include) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IF_P 1 15 мая, 2020 Опубликовано 15 мая, 2020 (изменено) · Жалоба 1 hour ago, jcxz said: Пожалуйста, напишите вопрос вразумительно. 1. Что такое "один файл с main"? 2. "подключил их" - кого "их"? Каким образом вы этих "их" подключили куда-то, если вели речь о том что, cодержимое одних файлов вставили в какой-то другой файл (некий main.c или в котором функция main())? 3. Каких "этих программ"? У вас несколько программ (проектов)? Или о чём речь? 4. А на каком ещё языке должен быть листинг если не на ассемблере? Неужели бывают листинги на других языках??? Не знал.... Просветите! Я думал, что для специалистов будет понятно. IAR AVR 6.80.1 Вначале файлы были в директории самого проекта ("проект 1.jpg" ). Файлы - это набор п/п, например для работы с com-портом или FRAM-памятью ит.д. А потом я перенес их в общий файл с ф-цией main() и подключил по "include". Например, вот так #include <ioavr.h> #include <inavr.h> #include <pgmspace.h> #include "main.h" #include "TWI_Master.h" #include "delay.c" #include "klaviatp.c" /*******************************************************************************/ #pragma vector=TIMER1_OVF_vect __interrupt void Timer1_Interrupt(void ) { static uint8_t counter_T1; counter_T1++; if (counter_T1 == 56 && flag_t1_end != 1) { TCNT1 = 0xBFFF; counter_T1 = 0; flag_t1_end = 1; return; } if (flag_t1_end == 1) { counter_T1 = 0; flag_t1_end = 0; counter_sec++; } if (counter_sec == 2) { counter_sec = 0; flag_second = 1; second++; } if (second >= 60) { second = 0; flag_minute = 1; } } /*******************************************************************************/ uint8_t TWI_Act_On_Failure_In_Last_Transmission ( uint8_t TWIerrorMsg ) { if ( (TWIerrorMsg == TWI_MTX_ADR_NACK) | (TWIerrorMsg == TWI_MRX_ADR_NACK) ) { error_TWI++; if (error_TWI > 16) { TWI_statusReg.lastTransOK = TRUE; error_TWI = 0; } else { TWI_Start_Transceiver(); } } return TWIerrorMsg; } /******************************************************************************* * MAIN * *******************************************************************************/ void main (void) { TWI_Master_Initialise(); __enable_interrupt(); Init_Const(); Init_Timer(); Init_Com_1(); В первом варианте шла раздельная компиляция файлов, создавался листинг. Например, "delay.lst". В этом листинге присутствуют команды C с их ассемблерной мнемоникой ("проект 3.jpg" ) Во втором варианте получил вот такой листинг: \ In segment CODE, align 2, keep-with-next \ __version_3 void Delay_Ms(unsigned int) \ Delay_Ms: \ 00000000 2F39 MOV R19, R25 \ 00000002 2F48 MOV R20, R24 \ 00000004 E081 LDI R24, 1 \ 00000006 E090 LDI R25, 0 \ ??Delay_Ms_0: \ 00000008 1708 CP R16, R24 \ 0000000A 0719 CPC R17, R25 \ 0000000C F058 BRCS ??Delay_Ms_1 \ 0000000E E0E1 LDI R30, 1 \ 00000010 E0F0 LDI R31, 0 \ ??Delay_Ms_2: \ 00000012 39E8 CPI R30, 152 \ 00000014 E023 LDI R18, 3 \ 00000016 07F2 CPC R31, R18 \ 00000018 F418 BRCC ??Delay_Ms_3 \ 0000001A 0000 NOP \ 0000001C 9631 ADIW R31:R30, 1 \ 0000001E CFF9 RJMP ??Delay_Ms_2 \ ??Delay_Ms_3: \ 00000020 9601 ADIW R25:R24, 1 \ 00000022 CFF2 RJMP ??Delay_Ms_0 \ ??Delay_Ms_1: \ 00000024 2F84 MOV R24, R20 \ 00000026 2F93 MOV R25, R19 \ 00000028 9508 RET Изменено 15 мая, 2020 пользователем IF_P Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба 3 минуты назад, IF_P сказал: В первом варианте шла раздельная компиляция файлов, создавался листинг. Например, "delay.lst". В этом листинге присутствуют команды C с их ассемблерной мнемоникой. Всё правильно. #include "delay.c" - команда препроцессора, выполняющаяся до компиляции. Которая делает текстовую подстановку текста файла delay.c в файл функции main(). Потом уже компилятор выполняет компиляцию результирующего файла. Файл уже - единый, значит и листинг должен быть единый. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IF_P 1 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба 2 minutes ago, jcxz said: Всё правильно. #include "delay.c" - команда препроцессора, выполняющаяся до компиляции. Которая делает текстовую подстановку текста файла delay.c в файл функции main(). Потом уже компилятор выполняет компиляцию результирующего файла. Файл уже - единый, значит и листинг должен быть единый. Конечно, листинг единый. Но в этом листинге все, что в main() идет с Си-шной символикой и ассемблерным расширением. А все, что за пределами main(), только ассемблер. Я привел пример ф-ции delay_Ms() из файла "delay.c" и листинги для обеих вариантов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба 4 минуты назад, IF_P сказал: Конечно, листинг единый. Но в этом листинге все, что в main() идет с Си-шной символикой и ассемблерным расширением. А все, что за пределами main(), только ассемблер. Я привел пример ф-ции delay_Ms() из файла "delay.c" и листинги для обеих вариантов Возможно содержимое этих файлов просто автоматически заинлайнилось. Так как вызываются только однажды. В таких случаях IAR for ARM как раз так и делает, насколько помню. Попробуйте сделать несколько вызовов функции из разных мест. Чтобы она не инлайнилась. Также можно попробовать понизить уровень оптимизации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IF_P 1 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба 22 minutes ago, k155la3 said: При появлении в исходном исполнимом коде "#include" (в смысле, не в части декларирования), возникает шизофрения с номерацией строк исходного кода. Ни разу так не делал, даже не представляю как оно поведет себя при отладке. (как поведет себя при "шаге" F10 на(?) #include) У меня все работает. ... else { TWI_Act_On_Failure_In_Last_Transmission( TWI_Get_State_Info( ) ); } } // if ( ! TWI_Transceiver_Busy() ) #include "main_prog.c" } } // end main() Но здесь уже "main_prog.c" не функция, а кусок программы. Отладку делаю в Proteus. 3 minutes ago, jcxz said: Возможно содержимое этих файлов просто автоматически заинлайнилось. Так как вызываются только однажды. В таких случаях IAR for ARM как раз так и делает, насколько помню. Попробуйте сделать несколько вызовов функции из разных мест. Чтобы она не инлайнилась. Также можно попробовать понизить уровень оптимизации. Функция "delay_Ms()" из файла "delay.c" вызывается множество раз в разных местах. А оптимизация вообще выключена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 15 мая, 2020 Опубликовано 15 мая, 2020 (изменено) · Жалоба 2 часа назад, IF_P сказал: Я думал, что для специалистов будет понятно. Да все у вас понятно написано, не переживайте. Вообщем, есть такая опция у компилятора IAR ARM v7.5 , просто ее нет в графической оболочке. Цитата H - Include source lines from header files in output. Without this option, only source lines from the primary source file are included В оболочке отключаете опции в закладке List (чтобы не мешали), и в закладке Extra Options добавляете -lCNH main.lst Только это очень неудобно, т.к. в листинг включаются ВСЕ хидеры на всю их вложенность Изменено 15 мая, 2020 пользователем Baser Добавил версию компилятора Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IF_P 1 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба 5 minutes ago, Baser said: В оболочке отключаете опции в закладке List (чтобы не мешали), и в закладке Extra Options добавляете -lCNH main.lst Не получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба 1 час назад, IF_P сказал: Не получается. Тогда посмотрите в руководстве по вашей версии ИАРа, есть ли там эта опция (H) в параметрах выдачи листинга. В ИАР АРМ 7.5 работает, я проверил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IF_P 1 15 мая, 2020 Опубликовано 15 мая, 2020 · Жалоба 1 hour ago, Baser said: Тогда посмотрите в руководстве по вашей версии ИАРа, есть ли там эта опция (H) в параметрах выдачи листинга. В ИАР 7.5 работает, я проверил. Не нашел или плохо искал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться