Prośba o zerknięcie na skrypt

Zaczęty przez marpal, Sierpień 24, 2018, 20:38:19

Poprzedni wątek - Następny wątek

marpal

Witam
Chciałbym zapytać doświadczonych użytkowników central Ropam Optima o opinię o składni skryptu jaki stworzyłem:

Cytat
int M1,M10,M11,M12,M13,M14,M15,M16,M17,M18,M19,M2,M20,M21,M22,M23,M24,M25,M26;
int M27,M28,M29,M3,M30,M31,M32,M33,M34,M35,M36,M37,M38,M39,M4,M40,M41,M42,M43;
int M44,M45,M46,M47,M48,M49,M5,M6,M7,M8,M9,N1,N2,N3,N4;
int O3,O32,O10,O9,O11,O12,O13,O14,O15,O16,O17,O18,O19,O20,O21,O22,O23,O24,O25;
int O26,O27;
int O3p,O10p,O9p,O11p,O12p,O13p,O14p,O15p,O16p,O17p,O18p,O19p,O20p,O21p,O22p;
int O23p,O24p,O25p,O26p,O27p;
int I1,I2,I3,I4,I5;
main(){
gbenv();
O3p=geto(3);O9p=geto(9);O10p=geto(10);O11p=geto(11);O12p=geto(12);O13p=geto(13);
O14p=geto(14);O15p=geto(15);O16p=geto(16);O17p=geto(17);O18p=geto(18);
O19p=geto(19);O20p=geto(20);O21p=geto(21);O22p=geto(22);O23p=geto(23);
O24p=geto(24);O25p=geto(25);O26p=geto(26);O27p=geto(27);
O3=geto(3);O9=geto(9);O10=geto(10);O11==geto(11);O12=geto(12);O13=geto(13);
O14=geto(14);O15=geto(15);O16=geto(16);O17=geto(17);O18=geto(18);O19=geto(19);
O20=geto(20);O21=geto(21);O22=geto(22);O23=geto(23);O24=geto(24);O25=geto(25);
O26=geto(26);O27=geto(27);
while(1){
gbenv();
O10=geto(10);O11=geto(11);O12=geto(12);O13=geto(13);O14=geto(14);O15=geto(15);
O16=geto(16);O17=geto(17);O18=geto(18);O19=geto(19);O20=geto(20);O21=geto(21);
O22=geto(22);O23=geto(23);O24=geto(24);O25=geto(25);O26=geto(26);O27=geto(27);
O9=geto(9);O32=geto(32);O3=geto(3);
I1=geti(1);I2=geti(2);I3=geti(3);I4=geti(4);I5=geti(5);
if((O9p==0&&O9==1)||(O25p==0&&O25==1)){
M2=1;
} else {
M2=0;
};
if((O10p==0&&O10==1)||(O26p==0&&O26==1)){
M3=1;
} else {
M3=0;
};
M4=M3|M1;
M5=M2|M1;
O9=M6;
O10=M7;
if((O11p==0&&O11==1)||(O25p==0&&O25==1)){
M8=1;
} else {
M8=0;
};
if((O12p==0&&O12==1)||(O26p==0&&O26==1)){
M9=1;
} else {
M9=0;
};
M10=M9|M1;
M11=M8|M1;
O11=M12;
O12=M13;
if((O13p==0&&O13==1)||(O25p==0&&O25==1)){
M14=1;
} else {
M14=0;
};
if((O14p==0&&O14==1)||(O26p==0&&O26==1)){
M15=1;
} else {
M15=0;
};
M16=M15|M1;
M17=M14|M1;
O13=M18;
O14=M19;
if((O15p==0&&O15==1)||(O25p==0&&O25==1)){
M20=1;
} else {
M20=0;
};
if((O16p==0&&O16==1)||(O26p==0&&O26==1)){
M21=1;
} else {
M21=0;
};
M22=M21|M1;
M23=M20|M1;
O15=M24;
O16=M25;
if((O17p==0&&O17==1)||(O25p==0&&O25==1)){
M26=1;
} else {
M26=0;
};
if((O18p==0&&O18==1)||(O26p==0&&O26==1)){
M27=1;
} else {
M27=0;
};
M28=M27|M1;
M29=M26|M1;
O17=M30;
O18=M31;
if((O19p==0&&O19==1)||(O25p==0&&O25==1)){
M32=1;
} else {
M32=0;
};
if((O20p==0&&O20==1)||(O26p==0&&O26==1)){
M33=1;
} else {
M33=0;
};
M34=M33|M1;
M35=M32|M1;
O19=M36;
O20=M37;
if((O21p==0&&O21==1)||(O25p==0&&O25==1)){
M38=1;
} else {
M38=0;
};
if((O22p==0&&O22==1)||(O26p==0&&O26==1)){
M39=1;
} else {
M39=0;
};
M40=M39|M1;
M41=M38|M1;
O21=M42;
O22=M43;
if((O23p==0&&O23==1)||(O25p==0&&O25==1)){
M44=1;
} else {
M44=0;
};
if((O24p==0&&O24==1)||(O26p==0&&O26==1)){
M45=1;
} else {
M45=0;
};
M46=M45|M1;
M47=M44|M1;
O23=M48;
O24=M49;
if((O27p==0&&O27==1)){
M1=1;
} else {
M1=0;
};
if(I1==1||I2==1||I3==1||I4==1||I5==1){
N1=1;
} else {
N1=0;
};
if((O3p==0&&O3==1)){
N2=1;
} else {
N2=0;
};
N3=N1|N2;
if(N4==1){
O3=1;
} else {
O3=0;
};
M6=pons(0,M2,M4,30);M7=pons(1,M3,M5,30);M12=pons(2,M8,M10,30);
M13=pons(3,M9,M11,30);M18=pons(4,M14,M16,30);M19=pons(5,M15,M17,30);
M24=pons(6,M20,M22,30);M25=pons(7,M21,M23,30);M30=pons(8,M26,M28,30);
M31=pons(9,M27,M29,30);M36=pons(10,M32,M34,30);M37=pons(11,M33,M35,30);
M42=pons(12,M38,M40,30);M43=pons(13,M39,M41,30);M48=pons(14,M44,M46,30);
M49=pons(15,M45,M47,30);
N4=pons(16,N3,O32,100000);
O3p=O6;O10p=O10;O11p=O11;O12p=O12;O13p=O13;O14p=O14;O15p=O15;O16p=O16;O17p=O17;
O18p=O18;O19p=O19;O20p=O20;O21p=O21;O22p=O22;O23p=O23;O24p=O24;O25p=O25;
O26p=O26;O27p=O27;O9p=O9;
seto(9,O9);seto(10,O10);seto(11,O11);seto(12,O12);seto(13,O13);seto(14,O14);
seto(15,O15);seto(16,O16);seto(17,O17);seto(18,O18);seto(19,O19);seto(20,O20);
seto(21,O21);seto(22,O22);seto(23,O23);seto(24,O24);seto(3,O3);
};
};

Czy przy tym sposobie zapisu widzicie jakieś niedociągnięcia?
Czy jest to może zbyt siermiężne dla centrali?
Bo mam wrażenie jakby zamulała przy uruchamianiu wyjść...

Czy da się taki zapis bardziej zoptymalizować?

Pozdrawiam

RobertH

Poprawna deklaracja zmiennych to:
> int M1;
> int M10;
> int M11;

Pobieranie stanu zmiennych może mieć postać:
> O3p=geto(3);O9p=geto(9);O10p=geto(10);O11p=geto(11);O12p=geto(12);O13p=geto(13);

marpal

#2
Witam
Zmieniłem sposób deklaracji zmiennych jednak teraz powróciłem do problemu, który wywołał skrócenie zapisu, a mianowicie skrypt jest zbyt duży.
Skąd ograniczenie do 4KB wielkości skryptu??
Nie wiem teraz jak to obejść bo wychodzi na to, że pełnej funkcjonalności centrali nie mogę wykorzystać - sterowanie raptem 17 wyjściami w skrypcie wypełnia jego całą pojemność.
Czy można jakoś inaczej zapisać kawałek kodu:

Cytatif((O9p==0&&O9==1)||(O25p==0&&O25==1)){    //podnoszenie rolety na O9, O25 wirtualne wyjście dla podnoszenia wszystkich rolet
M2=1;
} else {
M2=0;
};
if((O10p==0&&O10==1)||(O26p==0&&O26==1)){ //opuszczanie rolety na O10, O26 wirtualne wyjście opuszczania wszystkich rolet
M3=1;
} else {
M3=0;
};
M4=M3|M1;
M5=M2|M1;
O9=M6;
O10=M7;

i tak dalej cały skrypt prócz  końcówki z wejściami I1-I5 prawi jedynie o roletach, więc funkcjonalność się nie zmienia a jedynie wyjścia i znaczniki.
Może można to jakoś uściślić?
Naprawdę nikt wcześniej tego nie robił na Optimie, że nie można doczekać się jakichś podpowiedzi??

Po zapisie podanym w poście wyżej skrypt waży 4458B więc o 10% za wiele  :(

RobertH

M11 może się nazywać A1 itd...
O1p może się nazywać P1 itd....

marpal

Cytat: RobertH w Sierpień 27, 2018, 21:45:26
M11 może się nazywać A1 itd...
O1p może się nazywać P1 itd....

Rozumiem.
Jeśli zlikwiduję w kodzie zmienne 3-znakowe na rzecz 2-znakowych, da mi to na szybko licząc jakieś ~300B
Czy można jeszcze poczynić jakieś "oszczedności"

Ponawiam pytanie o ograniczenie do 4kB kodu.
Pozdrawiam

RobertH

4kB bo LP to nie podstawowa funkcja płyty, a jest wiele innych wątków do obsługi przez procesor.