HI!
Подскажте плиз... по Hitech PICC16 9,60 ПЛ3
В разных частях одной функции есть несколько повторяющихся команд в конце нескольких веток. Типа так.
Код:
|
if (Cunter==0){траляля; Cunter++;Return;}
if (Cunter==1){траляля; Cunter++;Return;}
if (Cunter==2){траляля; Cunter++;Return;}
if (Cunter==3){траляля; Cunter++;Return;}
if (Cunter==4){траляля; Cunter++;Return;} |
Предвосхищая вопросы почему IF? Я попробовал оператор Switch, но код получается длиннее, посему делаю через IF.
В асме я бы просто сделал переход из разных мест, а в Си вроде бы GOTO некрасиво, (кстати так написал, с переходами.. скомпилировалось правильно!!! так, как я бы и сделал в асме)
Код:
|
if (Cunter==0){траляля; goto exit_add_cuner;}
if (Cunter==1){траляля; goto exit_add_cuner;}
if (Cunter==2){траляля; goto exit_add_cuner;}
if (Cunter==3){траляля; goto exit_add_cuner;}
if (Cunter==4){траляля;
goto exit_add_cuner:
Cunter++;Return;} |
А почему то компилятор не хочет их выделять одинаковые куски кода в отдельную подпрограмку с вызовом её из каждого места... Как заставить?..
В свойствах проекта, вкладка Компилер. выставлял в разных комбинациях.
(Птичка) Глобал (выбирал от 1 до 9)
(Птичка) Ассемблер
(Птичка) Спид
Program space = 552 байта и не зависит установленого уровня оптимизации..
(Птичка) Глобал от (выбирал от 1 до 9)
(без птички) Ассемблер
(Птичка) Спид
Program space = 792 байта и не зависит установленого уровня оптимизации..
(Птичка) Глобал (выбирал от 1 до 9)
(Птичка) Ассемблер
(без птички) Спид
Program space = 552 байта и не зависит установленого уровня оптимизации..
(Птичка) Глобал (выбирал от 1 до 9)
(без птички) Ассемблер
(без птички) Спид
Program space = 792 байта и не зависит установленого уровня оптимизации..
(без птички) Глобал
(без птички) Ассемблер
(без птички) Спид
Program space = 552 байта
(без птички) Глобал
(Птичка) Ассемблер
(без птички) Спид
Program space = 612 байт
(без птички) Глобал
(без птички) Ассемблер
(Птичка) Спид
Program space = 916 байт
(без птички) Глобал
(Птичка) Ассемблер
(Птичка) Спид
Program space = 612 байт
Размер кода меняется в основном от птички на АССЕМБЛЕР, уровень оптимизации от 1 до 9 никак не влияет на размер кода.
Но при самом маленьком размере НЕ ХОЧЕТ ТАКИ выделять в подпрограмки одинаковые куски кода!!! А в IAR AVR тот же код, отлично работает, выделяются подпрограммы...
Может кто то пояснить??. может у меня компилятор не правильно вылечен? должен ли он так себя вести?...
HI-TECH PICC STD COMPILER (Microchip PICmicro) V9.60PL3
Copyright (C) 1984-2009 HI-TECH SOFTWARE
Serial number: HCPIC-36668
this licence will expire on Wed, 12 Dec 2029
Memory Summary:
Program space used 228h ( 552) of 3FFh words ( 54.0%)
Data space used 1Fh ( 31) of 40h bytes ( 48.4%)
EEPROM space used 40h ( 64) of 80h bytes ( 50.0%)
Configuration bits used 1h ( 1) of 1h word (100.0%)
ID Location space used 0h ( 0) of 4h bytes ( 0.0%)
заранее сенк...