Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Долгая компиляция программы через компилятор XC8 и Hi-tech

Сб сен 07, 2019 18:40:22

Собственно вопрос в заголовке. Используется микроконтроллер PIC18F45K80, флеша занято 35%, компилируется где то 1минуту, это нормально или все же так не должно быть? при использовании примерно 10% сборка происходит за секунд 5.
Так же такая же проблема при использовании микроконтроллера PIC16F887 и компилятора Hi-tech 9.71, при заполнении флеша примерно на 80% сборка проекта идет около 2-х минут. Данный факт сильно сказывается на рабочее время, когда нужно раз 50 собрать прошивку...

Re: Долгая компиляция программы через компилятор XC8 и Hi-te

Пн сен 09, 2019 08:26:52

с компом что то, сек 10-15 у мну что на буке что на пк.

Re: Долгая компиляция программы через компилятор XC8 и Hi-te

Пн сен 09, 2019 13:27:58

С компилем что-то не то. GCC за 5 секунд собирает проект из десятков тысяч строк (если считать вместе с библиотеками) в прошивку размером 34 КБ. Правда компиляция многоядерная, т. е. задействованы все ядра процессора.

Re: Долгая компиляция программы через компилятор XC8 и Hi-te

Пн сен 09, 2019 20:40:49

пробовал другие компы и другие операционные системы, все одинаково на любом оборудовании, долго...
начал выкидывать из бесконечного цикла участки кода... удалил все, что в while(1), скомпилилось быстро, использовано памяти 10%, разкоментировал участок кода состоящий из switch-case, в нем около 20 кейсов, пробую собрать и сразу же +20 секунд к компиляции проекта, занято 14%, попробовал switch-case заменить на if, и проект вообще начал собираться в течении 47секунд...
хз, что думать...

участок кода про который писал выше:

switch(program_param)
{
case 0: Print_Segment(1,t,16,temp_boiler_off_1); break;//
case 1: Print_Segment(1,t,17,temp_boiler_on_1); break;//
case 2: Print_Segment(0,t,16,temp_boiler_off_2); break;//
case 3: Print_Segment(0,t,17,temp_boiler_on_2); break;//
case 4: Print_Segment(0,t,16,temp_boiler_off_3); break;//установка порога отключения котла
case 5: Print_Segment(0,t,17,temp_boiler_on_3); break;//установка порога включения котла
case 6: Print_Segment(0,a,16,curent_max_1); break;//
case 7: Print_Segment(0,a,16,curent_max_2); break;//
case 8: Print_Segment(0,a,16,curent_max_3); break;//установка порога максимального тока
case 9: Print_Segment(0,U,17,voltage_min_1); break;//
case 10: Print_Segment(0,U,17,voltage_min_2); break;//
case 11: Print_Segment(0,U,17,voltage_min_3); break;//установка порога неполнофазного режима
case 12: Print_Segment(0,P_,17,pwm); break;//
case 13: Print_Segment(0,P_,17,pwm); break;//
case 14: Print_Segment(0,P_,17,pwm); break;//установка порога неполнофазного режима
case 15: Print_Segment(0,b,15,set_time_blok_b1); break;//
case 16: Print_Segment(0,b,15,set_time_blok_b2); break;//
}

функция Print_Segment(); выводит данные в max7219.

Re: Долгая компиляция программы через компилятор XC8 и Hi-te

Вт сен 10, 2019 12:06:22

Проблема скорее всего в тяжеловесности Print_Segment(). Поставьте в нее заглушку и проверьте время компиляции.

Re: Долгая компиляция программы через компилятор XC8 и Hi-te

Вт сен 10, 2019 16:11:07

Совершенно непонятно зачем нужно было делать switch, если все кейсы одинаковы и отличаются лишь передаваемыми в функцию параметрами? Гораздо проще и нагляднее извлекать из таблицы набор передаваемых параметров, тогда вызов функции будет в коде упомянут лишь один раз.

Re: Долгая компиляция программы через компилятор XC8 и Hi-te

Ср сен 11, 2019 08:50:02

пробовал удалять тело функции Print_Segment(), компилится так же, начал кусками комментировать код, чем меньше кода, тем быстрее собирается
Ответить