Собственно вопрос в заголовке. Используется микроконтроллер PIC18F45K80, флеша занято 35%, компилируется где то 1минуту, это нормально или все же так не должно быть? при использовании примерно 10% сборка происходит за секунд 5.
Так же такая же проблема при использовании микроконтроллера PIC16F887 и компилятора Hi-tech 9.71, при заполнении флеша примерно на 80% сборка проекта идет около 2-х минут. Данный факт сильно сказывается на рабочее время, когда нужно раз 50 собрать прошивку...
Долгая компиляция программы через компилятор XC8 и Hi-tech
-
electronic255
- Встал на лапы
- Сообщения: 81
- Зарегистрирован: Вт окт 05, 2010 20:57:19
Re: Долгая компиляция программы через компилятор XC8 и Hi-te
с компом что то, сек 10-15 у мну что на буке что на пк.
ZZZ С Нами Бог ZZZ
Re: Долгая компиляция программы через компилятор XC8 и Hi-te
С компилем что-то не то. GCC за 5 секунд собирает проект из десятков тысяч строк (если считать вместе с библиотеками) в прошивку размером 34 КБ. Правда компиляция многоядерная, т. е. задействованы все ядра процессора.
-
electronic255
- Встал на лапы
- Сообщения: 81
- Зарегистрирован: Вт окт 05, 2010 20:57:19
Re: Долгая компиляция программы через компилятор XC8 и Hi-te
пробовал другие компы и другие операционные системы, все одинаково на любом оборудовании, долго...
начал выкидывать из бесконечного цикла участки кода... удалил все, что в 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.
начал выкидывать из бесконечного цикла участки кода... удалил все, что в 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.
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: Долгая компиляция программы через компилятор XC8 и Hi-te
Проблема скорее всего в тяжеловесности Print_Segment(). Поставьте в нее заглушку и проверьте время компиляции.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
- КРАМ
- Друг Кота
- Сообщения: 25125
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Долгая компиляция программы через компилятор XC8 и Hi-te
Совершенно непонятно зачем нужно было делать switch, если все кейсы одинаковы и отличаются лишь передаваемыми в функцию параметрами? Гораздо проще и нагляднее извлекать из таблицы набор передаваемых параметров, тогда вызов функции будет в коде упомянут лишь один раз.
-
electronic255
- Встал на лапы
- Сообщения: 81
- Зарегистрирован: Вт окт 05, 2010 20:57:19
Re: Долгая компиляция программы через компилятор XC8 и Hi-te
пробовал удалять тело функции Print_Segment(), компилится так же, начал кусками комментировать код, чем меньше кода, тем быстрее собирается