From f9a6f00972184c59ab46a5f9144444be2f7f9330 Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Tue, 14 Jun 2022 18:01:52 +0200 Subject: [PATCH 01/35] trying to debug power --- Code-C/Makefile | 5 +---- Code-C/average.c | 24 ++++++++++-------------- Code-C/average.h | 2 +- Code-C/fileGestion.c | 5 ++--- Code-C/fileGestion.h | 2 +- Code-C/getArray.c | 13 ++++++++----- Code-C/getArray.h | 2 +- Code-C/initialParameters.h | 3 +-- Code-C/main | Bin 24800 -> 39640 bytes Code-C/main.c | 23 +++++++++++++++-------- Code-C/power.c | 30 +++++++++++------------------- Code-C/power.h | 2 +- Code-C/simulateFlux.c | 13 ++++++------- 13 files changed, 58 insertions(+), 66 deletions(-) diff --git a/Code-C/Makefile b/Code-C/Makefile index 6107882..0328aff 100644 --- a/Code-C/Makefile +++ b/Code-C/Makefile @@ -1,7 +1,4 @@ CC = gcc all: - $(CC) fileGestion.c getArray.c average.c power.c queue.c simulateFlux.c main.c -lm -lpthread -o main - -# $(CC) queue.c simulateFlux.c main.c -lm -lpthread -o main - ./main < ../02400031.TXT \ No newline at end of file + $(CC) -g fileGestion.c getArray.c average.c power.c queue.c simulateFlux.c main.c -lm -lpthread -o main \ No newline at end of file diff --git a/Code-C/average.c b/Code-C/average.c index 79dbf4a..dd83fe7 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -8,18 +8,16 @@ * * @param p array with all the values that will be used for the calcul * @param averageArray array where results are stocked - * @param N number of rows in p - * @param M number of columns in p */ -void averageCalculation(long **p, double averageArray[] , int N, int M){ - for(int i = 0; i < M-1; i++){ +void averageCalculation(long **p, double averageArray[]){ + for(int i = 0; i < nCol-1; i++){ int j = 0; averageArray[i] = 0; - while(j < N){ + while(j < nRow){ averageArray[i] += p[i][j]; j++; } - averageArray[i] /= N; + averageArray[i] /= nRow; //printf("%f\n", powerArray[i]); } } @@ -28,15 +26,13 @@ void averageCalculation(long **p, double averageArray[] , int N, int M){ * @brief function that realize all the action to write one lign in the file averageData.csv * * @param rawDataFileName name of the raw data file to use to realize the calcul - * @param N number of rows in the file - * @param M number of columns in the file */ -void average(char* rawDataFileName,int N , int M){ - long **p = getRawDataArray(rawDataFileName,N, M); - double aver[8]; +void average(char* rawDataFileName){ + long **p = getRawDataArray(rawDataFileName); + double aver[nCol -1]; if(p !=NULL){ - averageCalculation(p,aver,N,M); - writeDataInFile("averageData.csv",aver,8); - freeArray(p,N); + averageCalculation(p,aver); + appendDataInFile("averageData.csv",aver,nCol-1); + freeArray(p,nRow); } } \ No newline at end of file diff --git a/Code-C/average.h b/Code-C/average.h index b4bdf81..25be1e0 100644 --- a/Code-C/average.h +++ b/Code-C/average.h @@ -1,4 +1,4 @@ #include #include -void average(char* rawDataFileName,int N , int M); \ No newline at end of file +void average(char* rawDataFileName); \ No newline at end of file diff --git a/Code-C/fileGestion.c b/Code-C/fileGestion.c index 57aa3e9..7749080 100644 --- a/Code-C/fileGestion.c +++ b/Code-C/fileGestion.c @@ -26,7 +26,7 @@ void clearRawData(int nRow){ * @param array array that contaign all the values to write in the file * @param nCol size of the array (correspond to the number of captor used) */ -void writeDataInFile(char* fileName , double array[], int nCol){ +void appendDataInFile(char* fileName , double array[], int nCol){ FILE *f = fopen(fileName,"a+"); for(int i = 0 ; i < nCol ; i++){ if( i < nCol-1){ @@ -36,5 +36,4 @@ void writeDataInFile(char* fileName , double array[], int nCol){ } } fclose(f); -} - +} \ No newline at end of file diff --git a/Code-C/fileGestion.h b/Code-C/fileGestion.h index b001d93..02e8bb8 100644 --- a/Code-C/fileGestion.h +++ b/Code-C/fileGestion.h @@ -5,4 +5,4 @@ void clearRawData(int N); -void writeDataInFile(char* fileName , double a[], int N); \ No newline at end of file +void appendDataInFile(char* fileName , double a[], int N); \ No newline at end of file diff --git a/Code-C/getArray.c b/Code-C/getArray.c index dd3f1fe..77a71ba 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -1,5 +1,6 @@ #include "getArray.h" #include "fileGestion.h" +#include "initialParameters.h" //#include long **get(int N, int M) /* Allocate the array */ @@ -55,7 +56,7 @@ void printArrayData(long** p, int N, int M) { * @return true if the array contaign no NULL element * @return false if at least one element is null */ -bool checkArrayFullyFill(long **p, int N , int M){ +bool checkArrayFullyFill(long **p, int N){ for(int i = 0 ; i < N ; i++){ if(p[i][0] == '\0'){ return false; } } @@ -83,11 +84,13 @@ void freeArray(long **p, int N) { * @param M numbers of columns to have i the array * @return long** the array fill with raw data */ -long **getRawDataArray(char* rawDataFileName , int N , int M){ +long **getRawDataArray(char* rawDataFileName){ long **p; - p = get(N, M); - fillArrayWithRawData(rawDataFileName,p ,N, M); - if(checkArrayFullyFill(p,N,M)){ + p = get(nRow, nCol); + printf("before fill\n"); + fillArrayWithRawData(rawDataFileName,p ,nRow, nCol); + printf("after fill\n"); + if(checkArrayFullyFill(p,nRow, nCol)){ //clearRawData(N); return p; } diff --git a/Code-C/getArray.h b/Code-C/getArray.h index 6a501b1..6a0c836 100644 --- a/Code-C/getArray.h +++ b/Code-C/getArray.h @@ -5,7 +5,7 @@ #include #include -long **getRawDataArray(char *rawDataFileName, int N , int M); +long **getRawDataArray(char *rawDataFileName); void printArrayData(long** p, int N, int M); void freeArray(long **p, int N); bool checkArrayFullyFill(long **p, int N , int M); \ No newline at end of file diff --git a/Code-C/initialParameters.h b/Code-C/initialParameters.h index ba11617..546b17a 100644 --- a/Code-C/initialParameters.h +++ b/Code-C/initialParameters.h @@ -9,7 +9,6 @@ extern double freqEch; extern double period; extern double invTimeBandWidth; -extern int selectionCaptors[]; -extern int sizeSelectionArray; +extern bool selectionCaptors[]; extern Pqueue firstRawDataQueue; diff --git a/Code-C/main b/Code-C/main index 69213d78d46a50620a794cc57b661390d41c589d..7652bd45e2c84a2e894b391e4ab9b663e3d55698 100755 GIT binary patch literal 39640 zcmeHwdw5jUx%b{PS(BY)CNoJ0B!Dp7FG2_?7*I4J1SSd?ln7XL7?R1QB$Jp-xL8p% zVwuKxl3o=1(Ux*EMxGwM#V)WeZHPB;-@m4%d&T(YCiEhsA0d;%spMp+5l)9WV* zK9wrESze)_YqoStn!u~nDo4KQTPf&$>l4%K$N@M`%2dgbJ4o)7lshHmRH{jTsZ{xs zd_w<^OS(N>4H_LPC0;rzUX4~$e%lfbj!HL4$E#GyZG;@z`B4w$_N!!h$^23z?N_NR zUR%^qzkS(-iyEpIHq=Mjb}!srv~1zB3kzDC3YPGCkAorP%C#FRwJ$CD))#iabi@7S zZ_GaS%;(;_;QjCI-%56q4Wy5F=pcUOPRdWiKhb%;^nca%flRpR_^0EU@Glx`Dnq{I zXFF6_3WDW#1r*4xW5H@#JD{=fmnXr0Dhd7#Ix_-RS> zHzwhKI|=^%B>40s`cEX`A4q~<0K6an_9GkmRe!P4Isjy8`C9QtfmP$yD-yrWhS!4S zo7M-b!!6<3`qpT;Wz+i7hNeh(Q)qibSPKSg8=E4*)@Z0D8Vm~7F&Ueic4^Jgx|VRL zI#`9@XxIe9yX&J`YqX`Rd5>1p)Etfw5UFZx7AdgJZPBW_Pz&Jd`UuJlwYG*)UQMXJ zL93|^M_aY3P(wpg6$vyzz6JuVT1{0$Q)^gjG)YyVsMZp0Y}y&tqV}sipSv6!M_#&akuoj9o)k9rNeI#0=ffqv_Rk~_-C|FY;2{qK;6sAI3!_B~A zV62j^XbiznXbNjUHqzj@jB?Tg1Q!xqB`9mxm9HudE-6^DTr;x;OU?Y^Wz?rN-9mv38^B>fBP+X zrGf}?3x2$Xf6#*WTkt~`{4@(*^%GjNSo@ReCxoA2;m@lO0NE&A#u0uCp4vklb1it9 z`_xfr!K=BRXhjx0Uq?xSVhf(nn-U+e;FYh5RAIr(r4yIfV!@|N9h7Xd;4>`vItyMd z`8c)Ng7;YXcU$n87W_U7-fO`hu;6_be3u2EWx*e`;Bzea!xlWPQPlCE1)r;sNFTP~ zCs^=DEciSNzQ=;kx8VCM_=y($Nef;sc{%lz1#ey4^jq*W$EhQ3!B0_0q=OdxR15y& z?8hGX*aQE39tgC*ZUj2mOP6U{V1G~4F?=%6{b6UsbJtRhgT3xQ@}tMhnEmcONW7d9G*`wO$7tZ9G*@vO#uVjI6RSH8u|w+ zIGjx|4fzAb98M>ghWdd*4m&Q@w3;r!{8;>_^4K#s1Y)lQ+D{KwY+BdJRzO#v)ALId z5$Ig`Ba}Rx`^ZX7d&@g@HAlSx1%XcX8YRnzqPYm4yFsV$NgM9>PTfa}ACoCm^m6{C zM=6>2K_E65=>79$f!-l!Kz}0e%m>kNP!N_1jN$$oUXGIA$Hld_MU{c}m21GI1!Av8 z-GPpktDrBw5G@j~!_O1!KEV3*N=~H%p8~NGGJ)G(FGQ5ae)J-|5a?W*dLC4Du5==a zf0|ISvO%DSG5G=g-$>%*Z=mBR%Fa=h&P)z;RK^3H`}=|aF|D!!u@mt#?+*{Rmz~o) z%FbQ9pLE~+>#^7#2OD`P4@8v1bp&G1lZN|1I`gwGlzIo1`kQmyzTLu*Dnh+O!X2;= z+~`XekWDnr{t7aS^tT$*U8K?1s!Fl1hu2` z^+46LflfE=M8N*a{y^vCERyNwGS2q0*U>nyUtIR$%}?>_bzDDW`m6#z>x0jFVwI1^ z)*lI+C_B~1)j&N|Y>>r5t`B~AAKi-3n+00AbKo{nGTL?hsX!+@82bgWZ6h|cdFzR? zAu{gF3h3btw+xhy%5#Z^_XKnpnBGx2MEKrU&_A9+9b=C6vLT(T?OeK7TJY2NxIf~7 z_Puef?LpJCk9zNFg=f#`UCO!d{kQ2{_|{J`5^FmhtAs1haieZQQ^uY^^v!_oBZP|o z7i5&pSKC`UF5;u3Y)Cc_g$vw5D*lYIL#VhPDiBLN$cEa|e?kLt{ONZo2!_xcLl>9z z-~51S_G#~3J7IR$NH8lym6bEbHUs6Jh}Utoq6?OtzWGFXoj&XtphuNr*7t4NYPPg*{CJ!idH+L_w1sAs)C!;T-@>0D31JHN-yPKBKHZt0~$xWn0G)Ma_u(9L&` z&FX_s-Yvq!;Qh;!XT9_L#^$;~Duk=q)8H0Ei1)56-gejXfv9A2$u%XFC7Y-x7a`gn z48-~avB%&mWjXTB2QFa79q)&^MVqiD|8_?JJn7bBcbg&GV z&{;w4ctphS6`1Yf4^immp1Ft`zpPL2*YGfT5rcI2)F(==E4jYphLWJDFzRWJyl8(K zBL{Zk_an6b0QEr8kw(T}v#DuVrs0qGFEq?=&!VYMVNAZ|6hed@#~Pu=JGYMp>7IDX zJHx|h?J^9T)Gyn6Fk+ZPdQz3ANo7B&>?f5?2`az+HmTfFMy2I$lBBcV8=fN8b#TvF z?^X(kvca*V1u-?o)Iu5uN8<91WipJ0ymy_YMj2DYXHc2_;2oRJ?LeecU@ij}CN@kl zP^U(ezY&$c7Q-o`a%d^H=YJG5S4vcEygDdQB+ofHWHO55vhS#vZ(a^ zBoE;g|IA9j#nNtWE;Dqf9x?XUaL!-ryRZ;dEF15HO45?|-iMMC+7r2MOI3FRG?Z^e8gqcZP0n2^x_ zPeBPLGqUgzQi2hSl)Q$uGc5cIlK2gzqZ8Z!mh<+*Wow0^@GCtSAaTNF1TERE1$S-A};bbEfixF7GH^? z%x3&HDY!-`_$f{};H0OJ#Fv{2ihbrn$0oam>+4s+i!aKBNlAj>S1|fN+ zklaL)k4ecuN3mhb`eS=vrxmG)M2!rKp=M?krjW9mgffRv<|Ji1xw6Xsj`gpTE5vf@ zDH?;51tMQBj0DiHpylYNh2pQ{``<5M z)Y0z>wVxDfn@H{N$gcLi{UU-NB(CoXuGNC;I^sGatp6KMp2Me9ZW_$9I+?cw8XqSB ze2w-klM_p0ej3E*@K0e8ZFh{U=Fh|eomZQm%8(<_ay4e9*9T_aB+t`O zhZFhOFGpstQ^=Obo-H{>x_JI%$q#w{;88Rc)>2q{=_h|edAXK)Ct)pxQM2qMA4AFJ zOW^<@`c9O^Ny(W|N9Ch|s^fwB9${GA-#g@pJ>UDm)Omw2uCKS>q4()Mv1jH1XzwX( zFN^E3UW{x|84nyh;C7(0A6BzR+xI@IwcV#q`*0QzKfmmCe$Iz;rOLj5{tRgg9P~bt z;y9q2=X&v*e}!{C(oAbU{p1s#t$lpS%3|S z>`AN%FrA_DTg0f)2SumI8Q=aBIfGWVeFXj+fjTJ1&Gl@o>@WtI2gz0Cu_wgB*6Q}; zOIR}E2s9rd%>lEZlLRi81<6z6|KQZJhvA1)LW1{>@4gOm$U|HSNA(k@SO-5W*TJ2F zi`=A8M>$v7!|P(FvD)pY)vmeLmBV?gGOlLM*=j+ypK1v;bn4N81=#Ctsl1n+$ucL- z_|4BAK?fL?>t=B#Dix{I%_8bKwBA?xXzfb+&h5<~n-nWMXP#4@zPShXnCo&M&YB0! zx&N6nRDF!{^@DNjM+Q394+W0?_QFSAxczsNN&~UJz&o!6VkfaNl^y7P_p(6jsldFG z0ew)8<+r_lm?{|i5$!ewI&z&00P%DEXO7b9;>Qy?`9%C$DrSF=_l^o|f{KBrkwg#| z9s9X(=h81?{}D|os85mrG#$lQ4wXx96U6w-uMH1le7F^b-E%%KtS1nYg>hEI!k@rH zgUIwi2kR!LSTA4MiAr~_3_w?W2nC!e;>LCcvUyRos*}4E*OH3PvYtREZJk_h2s1EL z#-5H}3Yt2n389vX|IMhih2Ss= zdx=nXuCqcHLMGuB5T4k7D}Kk)=>2g|Z@&@i9YZHbItCjej@D}uk8|^5oA&QRUH6H) zV1z<|VdLho+>hyf1&F6QG;F)>VmmhD7@ScDO`fVId%x(mh4xAGs$4hk} z!?l6w2{2KOSs6#7qX&Du=$YJadz%G4h}j?cYp!A1hg~2W`o$l4uhgL zmWaa#EcOoiDF0mQ2)72jh^7@(-xzxVg6OK)SEXit2G%;U6#Ov-Dz$potKjOSEqPkp z68XDU@{J(#y`=aqSSqhalx$wtx$tcUi9s946;c>qYv_GZ?mcP{Y8eJ><#Pw=F2-h4m zx^hPHiC59c;*XDyJ@ByyKK8&rmj`s*rMK&REfU_froJIuP}RCqYtdRlyHf`Ua?i8dw=v?@U3Esi!_pv|x!=~`J! zOSrAY-w>{fwxO{@%`J~T*y;ygK|#R`2&GdXQ8IE2UZziSUQEvpkXw6R8Xi83eAn-X zhx?EoM%s*YfB*1sKho-#vGB)9)A_Fq5BrfGM7kR3fjySQ$ zRZJA=c&tu8kCb*bzlZd3q|YI}2CLY&kj}z|mOPiHeF13^QifIa7NoZ!-Ho&hTmJ`< z4kGPGN(Z)>`Jvx*m8S3Z>66^4Mwg!IBRnqpYjb}$JdE=}^B9|7(`JH$`14*I9zKaS z&@z2%GV?C?X6!QdX_rmBc>V=5r;`$rUyXliLoD#jgJiG6|CdnS?+IIy>ATZW>Tx-K z1B-<2n~4W)eIkK=oYVcl9m2m8G0D8cDf_{mWzH3DP9iZO` z`U)$(ZG?V5=p7#-|2XLX4*Dmp@{X`s{%O$P0R7$s`e#jg3i^5-#)gdv^mQhECg}Hp zUXeh*!lbVT{YlWDOrSq*(yKvl!C2FhKyNhZcYyvl=vODuH*mTixcfnW2Xq<}&G4l&l1${#Tz1*Z%fF1|^v+%j8-`VLP20u{EpkIse@aY8kr?@EEV|Kl+B4uXC?Ay#Gj{>4$AnRmCd zEYshaQkFUQF19+e@J?4Cv#33FZD#Q&GmA@WR&sbSudZvmFTqh6*T?xeD5s9`*E+X?K zte&gFy`B6}YeBmDL5F(2ipF0$6#cIs3^#EY^Aa5xGWkL4S~_H+(Yl=ubr!K-+Ls~F zTAoaC3roTw#qfZUK-08D$6=XK>tAd)@&h+|@uM$IqzZpZ8m#OdlzfuSEFatLygndv zR_xewnBSQWB=)yCtn9)x#o;MZF>W7Bpvz+Z;feWNxvk`7G7i?r^ctDg$aJSn@0961 zGX0uNACc)3GJRgAf0XIlGIik|0y@Uabhb>F$#jiOuaRkuOn1ukPMO{#)33?&5t%+A z)8}RSN12LJ@w-vv-a?$oP}8*Hreb;?kudbTwzPDGf9~q=_WDr7zqqhqNx|ZU%jU_P ze@Wqz#f6I(7xGg85pAN4U!{w5IKF1;6|nlHQwE3jWkiVJ?~pP20~Nc9QKo{Q0!;9) zk}=G0IkfQ-DEOV|NrL}U*@y4>Q2o!NrwRV&WFP;o>Z`Ugg#Nv7sNnzfG{NwJ>dRyD zXTl1>zkjY^s7_+f7vUMK;BXjt7#~B_D*SAKGskkQgPh@bX2NnLP9ydEU~{IV(v{g1 z!>Jp0655gaHYK|20EgIm6wFc>p0b4qn*_+g@Z&s~-v9>WkiTydo{w$-@RM$5Vpo3y~Z#b`Y?Q+ty=vNWpfa8Oh_CV>(DIHUA)zw1uSY{LJ+G zkh+Wuz~C~7kU{N6cDX4q2zx$&^b?%zTFSO_-Y|YS?>=NWZw`2=fe{(wd6N1tggj~Z z(a&?y?S^!m5Q(NAawA$Z=Ydl{?>uUMNB5S@iJW;6ksRF>nI#;&ghIv9z0O;s=~FVO zJV*C7-=C$zyQM;Jy{1p~2v$U(%gBZjr;$<(x@QR$ljc(WfbY8iuOI3rBW7~y1d?@j z|9o#&Ey3yOM00kZ+)L$VsB*ovn(mgs7T-*1M4`n9&xjG(<2JMF_5J>mUv@1&6UxOXBH{(tsPr|$SIqR>MJV#< zcai*IJa};MZ9k;?A;NlH=qvi#DY75?nl(M(CW5284iy+i&SlWNko7ZU^&(fdRKs@{ zxtc4WAscc<6NKEB>hz`BUhu*zBP4(`qM@h?ES6nV?`5q?MazbjEJK3UT?hL6V zdp)G)3!s8j&QmILJ_&%=d0f6UjRp=nd>}2z5<+#T!5dU|mTO2ZJ_ZFB91%qa7mmo9 zMvicHAGwuklvPBwIJ+Odm8z6=8L4u1|L3h_P1YI#J$Ngblda65GPAika9}PUk8(1E zb1QPcM+S^@({S(T4&?rd!10p0#fQNvPYqVuczSP!?&2+{h8ezT3|ajUnd9<_nyn*i zTzm|KQZgn@8gpGPAC=Q(dtz$47ZH-8U5;|)NLCK7(@17tVC@0kA=VNOv6gU%C5A&R zI2>YS;c)Pkg;T679AagW!e=sY&(q#0q9MNRcvaL-v-Axo~GNXByrq6Is zAwS3#%cDGRu{0`a3BdG`7IWQ9g?U`cLHybR*z`j`2V(|W%rk|QQ;TimtaFKg7ISaN z2Oo}Zz;sZHsWxeFUn{9Cii#HVsupwKE~)2)sOGtvbZ3tv3$eT*tZdS+GHOz~>?WHu z1x-gyYCqkW3`W(lWH(Ffdmpv8u^qhh7W^i5HP>6P!l6&Nm(#z5-_*YXlc#4I&jK(! zuuS)+QOs%v4TrifgPO@OUZ&b*d1wgpX=!tb^qlL$X~c+Ih(rRHdr__QyEs+NB^fga zeBLcazd9|AJfT1CI_?)zWF;N?p>-t8xgXCL+*>k^5c5w*gu|rlJFa)93L$=Bf(t)s z3V&yk6n5i{L113E3k=lU^vWXrJIkncSdDuAFI4{;QfbckVxdix_I*`a#(Pxw_oXe{ zv`jLUB)l|qdo)I6`sk!hzu%xTzb>t!vj;l#L$q!cRl46Vt>Wdb0zS=oQkI()#Y>p< zuc>lHLBzrf@@b6Jq z7B8ZTiufw$$QLbhU3x1A3uL=x(VY?c9;Mz=wZp1vzMDy6he5GANfvPlRRM>7=s~j< zJEmIwL$Q_S>{3d2^Ae8x$Ez`t^Zf`v`Zh+Uy-ZJ#;ow*Ekm`pVC|3AqoAi(HywJQ) zY4&X<^D4Oq9*{~#%v)P4L^r26a+ zq}n2>HVb3xN;Mn8@1G-u3tUB#t;8%nY?i)2xkHq`K$c!@DXv)6CT9)lo5WqL#?@+5 zrwF0R2_Yo9pkFD_IX63?gJuyOCYyCQd5=xry^{logve z4l0p&8Nu|0bc60Q!8aeM;Q)QLGaq5#KFfKQ#2(?$6QkT>#j zXkF|m0*^6q+#Sfv&7jmfK=!4j8)X;{4HtkkxBD3AnnCvkrTKDcU&sJEU(#o$q^G5Q zhFIx6H|gmaAHWRFXd)nk1G=%305=C5#%z?B?%@F5sW(8ROy@c%@U#)d=O#~jItib} z^A1|cWatx)B5@f#_)VvkjOVYg#+~AM26^kbv72!zc|M#$9N$cDEE;$_`&hCNHF5wic+$!2Dcvb69>+?viVL}M+Sv3&iS(IiF#KC zwE~udIqymx5vfDa@68ePEhz9ID)4$2nKpBl;QB0i4TpZn4`LQqdHrM(adw}&CHpFp zxFMZrSl(p+1xD$?^g@9AT=fuey;_x`k~K)I4**hSLz#c&x0T>p~nxAL@6T^c1nqDLJ$(eAZGD1+tOUh zV|_mX=fkDbgvFc2HHLO;`sy@Uft&+U1C79RQ1!|@f{GI`mqFR_vX9oKBMb+$p=A7?wze!?%hy z8v-(KIm!@cyuOp9G=p2AraFE<4!7dAR86BwW%#L5wCgdh5hqE~s}p<+52wwJo0_h;(d`CjGVWV*KC=q}EBjlc@;r#QGR>nwp+OK?l}pj1g0oao3wSeA|~RlPqa_9gs^ zOjxqsEI3j6DKwyuPX$ZlUgwsqZ<4?TZfXHc1zCJ%xG;m_hlVxp7l}NJ>-+0mp{Uu^ zHx~^o^v#+U<`Poh>_mNYOnu|tC4G5ZpXwST`h>2$sR_FB6Ln2Ab>SRepOu-D;mn+r znWbl^`X<2U@tQMpMaIP$%QMPz&@E~6?P zluwY(hIE3@a;(yrD3uFyt#*+M$8)Vxc22&xWqj&+QJ_g`>b_J=$_mccHd`PwUT#p zlyk<}-IiW zBy7gFRYikq%GZ?vfmO~(PGgg`G>5vmVBm?}Dby@dN^%#mj2bq3E8t7mEXVY5JTnct z97ey?*$Xj;6AsOWwNCB#|2!_nMc|T_me8KR*T40V`e=Qqp(50R2L$n~Vk;Ve4yMEH z>aubkn-GUHuOOeFCw!hsNtb|(Ei9YB+u1})E>;cUzJuvku<|LB%Qqw=YI2MfIMXj-X^$e3+K(9zG50Z4&*4B+^ul3IjZWo9bv!L39{UvSlhoVG z;cazY*_oj;&oQ#dvz6txv3wYl+0M>e#HPVPGf~C!PP0tMtQ?jFAJwpYs^4{tN33&? zW0j6B!#e`+4_!=mrgyQK8;#4Eua=E}lbRvbaXn77+Kff0hHlh3d@%esyb^e&-WZkO z532r+DlA16)P+{38&!ByRv`!NE2=PKE1M1Tr<`UNI_71w<;IuUqSI`lV`es6wS}!Y z%f{W#CUv83OLN$SwJfuXO`y7cflZ~vx!ZAx&c<8nRwL>*-I;c|s9jFd+D+#jmrl_} zHxYjvRMbvnWfz!;8mS8g&WSpk)XvxoRJ<$7vR%dtUtw9tL=><>XFA52S0ynAM5cGM zHO{n4XxtHKAg%P=Zk7Y9Jy42P1qHF^q2zg9NAxC+l%47lHiKvj&A{Ey3N|wKrqDQ| zdK@qM7@JP9%8m&#^KooDo3_l3t7S7s;o8|nRGmq$n$;!oEcAaK@(EhpM9RCJrMI)} zMau|kJ z*Y{!WacUJbWByajpw_7t(`0>PTLV7Zv!f3cE|i|Hen0%U(O~Ju#98ibMK(;A}1j?b%`3$UHX`hpf3xW*-wo9%-y$= z>1}LU<7t*r`w+`}2qWqQHvcr6ca){qu<4FK4qJYj6&+<0(PiGkpje0?avOytRrnP1 zAYP*^3x;B%n?pTnix`m16^DC2)3>r2h^L2`r_I7WdxTrZ5I6;(W3%eQB()Mf;|?|v zHJ))fTM=ceFK6?Ov%s^t)B_A-4ofvov$SsJam>wuQBjt21@i%wwG~Sh4By$tw`lV7 zZ)M)IY<4@Fi?JRhMcM4yk^EeA^P@o4vKc$stS&a~61McqY~>bqSr@yQ=dUPWm0Q@x zqwI<=vq>0_x>?>?bom07Q^<;HS#B4*$gwb&QZdi8IL=2KQuQupZfEwF|Hyp1ux0>! zEt_4)#y`sPUtsB&>c_!vN15jemV1ni`wCm}N1CAXaEWKy3oOIA3)2C*-*~6{c6ggF zu`WmNb82^vHBwucjP0g|kgHe1K?8+ej z_E$JkjiKbGu*A_?n-lrBw}RV4t@ykac(=FJ1c^0q5pQZ~#tk&VU~{N?saD<8#y>>X z*n|^^U{xJ`c#HU2vGx)A+9Iv>wUKbOA4G`JSGiiktyBbkf6!mL_#*oQB>shs(Y8o< zWoH)G4Kipt+lSH zCF(azrH2|q&G@WYHN9-3JVNhz&~QB>v}eRlswx?cZ!LeW&Iwg_ymUScVQTobtp7uQHBy+K5)Y6yo~?QtKoc3<6$Vw<}F2WU^$TiNb#xhZ@%%f z8)`QGEjJEn(WV`^Un{t(2~7hzX{?~39t}LVxjtH_s?jp?eh*$pT9m7mxey}^-p*1Q zYN(<)7H6!AuGKU&;j49$0rPICz6G|?t6Ko@RH&$r?A(NJ+N}yjsyEkHN9zR5s<9cN z+*B>_V(78HoP>`>>g^>FytPEItQ~ouN-$V)RoSLZTZ3yVHj^fAFTh)506B&=e5LtEo^1OS{>9uaL<#b0W(A-qdQ%o^1j zg2C23tyTDbVX&2YB{~rmq3sMcw1uIdI=q_(lEqq6RWuxx$r1rwKr1Zzs-apwX;sbq zB|BOpVzjV_-a zs&24#J4WPIv~v{&c4??N+JupfdqZ$@>o0^QWGW35+@uSZAj=y~8nlt#M+CE5YUx{x zu#I!@b)@n+IgaYddu(-mExs#RgBJ;z{!|~JjB27vqI;Bx-lvp^a`*=vQC5|j)2$M# zn$W>8$lX|0RfiU+#haQ$AE)n7q6;Ueub|F~1;vLQ*xfO|zij2B?>Ih=lSljE#3Cg= zCO$Re6k{ucWP;xdS2H`a^f1WdagGS zj|*r%D@Np38tCf=hBW{t&styCwJAGyGa zQT#cYdj8ri(j>bdJge6BXu^Sw@Oyr#ZunaGdpn-x}!$UE`W^U#?1eDiy*Rw<`8 z(F&S*r#8vVTQg4nHV`XDtnPF-Reu__S^LD7JTGi zI;Km!x}jI$>5*09-zWK%9=g+o@Le{1wZtEmc#lxezY9zJ58LovlE24>|C+>~l=v*E z=TV7QH^nPEp9Oxbc6m7o9_TUo>7iO3{e2VNf@C|!(*HIo(sD-i_f(9_x;DDM`}lZ0 zI<97L{OIv#8P_v<9QXm<-J^{jKi7dj8}VFmzA&DfhwOC{Z@+Df?!dH#J{R1b1W)&- zj>S(mqf)u{=ho;^y0Q3ACc*z93H}}6{h~?oF)>R?ek&4g3mLP%^z0AWX@8VsX%hWcCc%fKo(JTVcZsZ5lf>JfMxjSM z#`6CcCBOYig8xXu|7a5Y)4)@^+voikfv5ITchIT+{wJ;{bJU%wLlUnpXVUyZ2ljNh z-;Vn^h&PLhBP)rYXGwnh^DIk&mnx(Nk*o$ji!LAA;&vn9VZXX{PxTABH8Tq}R_ipF z&5st~seSEFyWB4E_UAA^Bk}6WR)%!Ymn7c)z%kwDO!^1si}J3Q<^G7{C16ROPlBhL z#K(#UT&zQ_^0k9DKb({0s_UKVG1_0r_EO5^u#P)jgx}Onh{|tS9G|DDdm|M-U*gq` zjmn?XfG2zG;|V>pk%f3uH%lr#mjciIZ@ba4RPw94G?jk3RhIbewM`RZFxrihT`iXko`9T#HS^a7!@S7_7pk2li8g z!Rn@9Z9~)cP(!eqHV=ZKw%yo^X>4x5O#{^hg=2GIr!rC>#QsQV54Mt{EqidrjxEMu zbz5U2wqCIhY(m&gsE;PHVkcqb<`K*G;K)v#+JxhqMX-I0{jq|@i^oQj$)k4D3YL$F zEgBPh(U{m}V`7(%iKQKv(KcK#CU(h~*s&{DXx|)?7e#`>HCL6aFAJ7!SdE=S+QG5- z9NXWkw{9p|Uyj{sE2TAxjU}M4Q6DS|NDYD2S82hu>#kf?vMzY#nl)FKZ3=EGS+%Z= zwBk0Ss$f-X8*hE4HEaPVDjo#g1G82^&_Uw{~&w zP^7APPXc30xUp$xVo{u}u{nV)SiWg}a3tP0tuLi$$BrYmuy|$AX1RsQ+qeM-^{w9|3#JH5@T-shoVjO z30$ZRy^=oxN1Zs7=$abd0TQ@^LG*t$GSa}Hron_^LB*pAf~40CI3v|gy?UMoKhc2v za$7K1wL3&3WT*j`x)LnmqOzCqx9p3{2njqqKDj!+(LU!`IFr`3g8>$HOEJrU>=DX#l+3byR| zB^N6Y1g$095F!DYYi@{Y1w2p-kS(Zf0vM%>TLrW@08eQ^50j|XK&rIRIICGs>$f!Yk@uyix!)%6IK&NMkiMy)3m znx0;=%B$-ZD)lQyncC%71CQ77H!1to^$nF4N;#ZH@k6acCCH!U#BP~se-ZX4=uqi4 z31j)r{iNh^#>$Ut@JlSJe09A!He5xUV8(wO_r*SEXr+QKt6#e_hI}_EY;JD&1xhgaUi{-?quC z>s%_`Wb>cB{GZt5)%7ry9#(-PiZ|O|g4&bF&|balX6ALXzLkPQ`C0KRSf#%L!E2FM z*Vj&dMERE?tNI3&p{~Q7lJcr!sQ6IjDnA~C47o_zuddgfx{S2pEfXR!f0evSUjxM| zZ(i3c79vBYq{t{amA(nIRbK4_4iyXj1tKwjm7GGniwxnE{l)TpeP)T^*rFI^>bJok z0H*Q_ZFnU=$A%|fI#f#UI8%8+5x-ZIh_u2+w1L`qAnZ7j{6BI)YPU^bc3yFPOO$2( zoe~t#ztZGnIqdR0>+zh znjxoJv`u0YU!tqcTM$}fO`~8E!6a?Qu4ri&uf@b9*P;fDX-SKje*2s|BhswirT05` ze|zt<&p!M7Fx|g4^mfSZL~GF+$^T?av!!uTwiG2rHf3E1N}ep3WM+|5f@TMauh}e5 zP8oYNKzx};vAy!X*xBFJ$q~3#7V@=hn&B4{zmBlX{rtqH_g0nPc5N@1wdjB2ADP^y z8TJRrwQT!nt9-Og9qlk!0+$J+Kmk%9vjsV9wYt;@=~SH|INH`4R2-Nz)+R}cYy8XM z1erZnN%DrB%#@_trsxG+G&769n3Tolg(L*Z{44#RY;#D)H2RP#Qwo&&%v_jAiu!3q zu;R>IG+&amWUtq&mEv{Y_@}n_L*5Tqq*iNc_zJQAm@Nu>Bm|AeuiGTUW(Ccv#N5wZHYNft< zP^!ps=0oF{;;L++z$nl*QgGQ@PE!de>UqrQ3e2eX!9QtGWh8lBA8M z#4ZT7wrf-W;q{Wcc6QMg8vs-Gf^ACT_Iq^R|2ydv+S_41eif)&rXO^mo$q1uA|9Gx z@8OvmG#$8&;UR%G_JfEp#~OPV9801C{K;&9iu>-s%I_wVqG+Z;xksjT@zC(J7NTdn zTX9x5-~! zOYs@_IUPw8=t{piks$L6fVTH5XkrFCK}iyen355ZPpZj6wMnQRBGvDF#Wqiw{{3*G z=LmXK8lQs_#DmC z#e(e%;XU*NG{=|B5)~8i7SUybZWZ)NqU~R@#Zj@-_kKAtwY6lhOBier1|?)L$bJ%) zZOb6`X~B*YteMysS$|aSgr^2X`f2=S18hNb(wr8sr;iAO3JVXf3ZMnv(p8<=futTj z%rqEnH#-{@ZreuIuL$cnVVy|UZ?Nv@`Pr$&{#vjfn7QwZ0Ii68)mQh5>9|<_@rdsCc$3=BaV<_~u)dwwK+B3Ad&Czt{D9y?wzbuVgYAczH&wEVr|islAzY z6FOAw-Pre+i>AkEJTpU*FqlHI33Z_~x@mB;Zc>)t#%C9O#@}R1;tCz_-SA00Bz==U zQ#&<(>=irAIXNy}M4u6?4%NYhzx3ZfQW%OtdLQ20gjxR$+TiF#FW zmGnN6!{Xw*3@fg)8}aiUEtDShtwLypkK8VMX#a0Eom^n_>~AbXhK3OaKS8O3E7wvvSy=g*tzgbKZo~WAT(V!> z7vb=j&a}&29le2ShwyQa3qN^|Vr^D`+*l50it8W&7op4ybUe9euOCv@|3T^a7=rhl zl4^j$gZ9D72e_hhL8IH{_96oqrE;!gFpy^3;hXN6B-{*SNU9uf`b` z3v;J&_cTeGbFOkLmP0=+wdv64G|J%UaT;F)&wD$B29)?kVG@*RsK!fNm=7VZqedLp zyt-#=RrdxkRS%$A1fco4bKvl7K#A~aHP%dHj>IrWIeA5S^=cMyDo)_VTi;b0!^PSJ(LHD+qyyM2$WIAcQo+z;! ziPn-olM9MrwNGo-h!_rw?|x@k1n<Ht|G$g5?da^ zb98F#v%9&NE8;UX?!aXk+1Nne?aN|3 z1ew#Q-AC6setX4z%WR}TZ<*HccF!1UJLs}zF_wc68>5DEMNy3lA;5lw>ZO{ysJOyD zL9Lvjs-!w?{}fuTf_~5#1ktZzb@=I@gFZ{T+N&6xDY};0IjfhrGQIdKCTCTidO4>c zPyH%q<)j>Ss6cTg_d~v7$+SDT^apC8pSDe&{^=-I9-R7IYObmH$&x3EA1_%@Tv0q@ z{f;Numek2@?$mbKL0%=PKTDn*@F4xsMaxF}f3NpA+Nb{N^?HC^z^8z(_2MrY;DIY% zZy*kd6(4)OiNJQ?5@5?GUT+z2%~h}W0PqCxm%x7kKL9?0A@u``F(5Pk4*cjdufv;) zMy=-cE(JzlZIuISfNtPfU<>isL_EMgU_USc2ZwnS905~-&jXhN$Kb3e2fhGw1HS;a z0JCsndVqnbnSS6dpc#J;{_f^_I6xy4Gqw^~j&j=r{4MZjz$sX7zXkpf*aMt_RXYT{ z1B@AsODHa{*+2`njUr$duok!N669VsGtDZ$#q!dk zJ#i<8UPYiQ47ze|gbeHS@iN>h_F!MxA#(D>1Y#ld4xoKql*!5n)$(r~E$n!8!JJ9y?hOK_*$H4y#{4ejZf7NgQ z4&;fLNV@jjwLkc<-@#QVyaa^}_b9CM^P^A!pMlRA&hOzg4=^757-o4OI_Eg*Wb<$> z!$!ZC4bb`${Ji1(&bwY3z?<0i2cqR^tO;*BYsLFnb`kHeULR}#2K#qjh)Q6&v3nu{Uswx4rh136tc+K(XsnbRPVsMfA9fk4b*Q8MCB;1 zB=+d+IL9UIo`;6VW@z%q{wruLM#a_K!&mwFkHDV*|HeK1>wf+=_-s_@Z-(>K#*Rz(*Uv3By=UA;3X8ZgxyX;3DSQSopV3?o*}YrsA{Dw$FpU-skrNQTjgeUc=xli z1n*%1HmMevzH~U8%9Mt{QXDE4rkGSsYfmi%oN^lhc^$*opY%+JzA@ zxcSioHU6wcCPJhM((yR`V?KG@f=}m>Q>`tsn)vCFpFf9x^#WY z8$GL8ah-MMHr*;1KR(gJ7aOn^aaU*{yFB9uH36^?n*KKL$ z=sBZX?Ti-R7X(Nj=<@VLA>h@D=3jLAOYuU^YaPv1ln8@Kiq{h)SV_9c^(FRron@Mg zPA!PPXhaMXA*U?8ulH5MV(SwOmm=As`dn;&P4!kei=C)XF`S&t{#>8?UH{PZPI|as zo7AHF^-azV-S6!F`Z)p5TmjNvlr+V2 zI9v$$W{Bo9x}4!hBYOBI3VdFd&(h^ZMB;f(m$x&uah=@Ft~D-{J#6Mat1VHF)Hm-o zEFj9v23EY!nm2NOlXW&*w~FE3C22n76emBHA>%6^_>it2&pP&5bMkO;q=)Ypz%{zn zMqEJX`A~qgQJ1fb7lMa%`4%QWZJp`R*;8~%;Nd$j(51^?k0B{eeF4%7WMymBS!1ja z(;rgwoF`WPBY*eNJMtS{^PNzk(J4ThfNdp&GCU+g#L2fk5iX7>2ja`i;!dHLZp}xMSYCb z?YHKf)y3eZ{72 zTXUXxqPVJUoGaH5ykpar%Ch2$lH9V&r`XbG51V#Av8jUJq|@4 zZ{|k1m1SjBke9I%_sX{S++$?+Sn$HO!sm(t #include -bool power(char* rawDataFileName,int N , int M, double periode , double invTimeBandwidth); \ No newline at end of file +void power(char* rawDataFileName); \ No newline at end of file diff --git a/Code-C/simulateFlux.c b/Code-C/simulateFlux.c index 3066bf3..07a350c 100644 --- a/Code-C/simulateFlux.c +++ b/Code-C/simulateFlux.c @@ -19,7 +19,7 @@ char* convertIntegerToChar(int N) } char* arr; char arr1[digit]; - arr = (char*)malloc(digit); + arr = (char*)malloc(digit*sizeof(char)); int index = 0; while (N) { arr1[++index] = N % 10 + '0'; @@ -42,6 +42,9 @@ char *createNewRawDataFileName(){ char *fileName = "../RawDataFiles/RawData"; char *extension = ".csv\0"; char *fileNumber = convertIntegerToChar(cptFile); + //char *fileNumber; + //sprintf(fileNumber, "%d", cptFile); + //printf("%s\n" , fileNumber); char fileNameNumber[strlen(fileName)+strlen(fileNumber)]; char *fullFileName = malloc((strlen(fileNameNumber)+strlen(extension)) * sizeof(char*)); @@ -94,21 +97,18 @@ bool writeOneRawData(FILE *rawDataFile){ uint32_t valbin[8]; quartet value; - if(fread(&buff, 26, 1, stdin)) { fprintf(rawDataFile , "%d,", millis()); if (strncmp(buff, "#################\n", (size_t)18) == 0) { if (!(fread(&buff2, 18, 1, stdin))) { fprintf(stderr, "Erreur lecture après ###...#"); - return 2; } else { strncpy(buff, &buff[18], 8); strncpy(&buff[8], buff2, 18); } } - int maxCApteurNb = maxInArray(selectionCaptors,sizeSelectionArray); for (int i = 1; i < 9; i++){ - if(intInArray(i,selectionCaptors,sizeSelectionArray)==0){ + if(selectionCaptors[i]){ value.octet1 = buff[3*i+1]; value.octet2 = buff[3*i+2]; value.octet3 = buff[3*i+3]; @@ -117,8 +117,7 @@ bool writeOneRawData(FILE *rawDataFile){ valbin[i] = buff[3*i+1]*256*256*256 + buff[3*i+2]*256*256 + buff[3*i+3]*256; memcpy(&values[i], &valbin[i], sizeof(uint32_t)); - - if(i==maxCApteurNb){ + if(i==8){ fprintf(rawDataFile, "%d\n", values[i]/256); } else{ From 33115049f6eab1d4e886814c7d5b21c21da7ca7f Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Wed, 15 Jun 2022 10:49:21 +0200 Subject: [PATCH 02/35] threads clean , captors choice ok --- Code-C/average.c | 4 ++-- Code-C/getArray.c | 12 +++++------- Code-C/getArray.h | 2 +- Code-C/initialParameters.h | 2 ++ Code-C/main | Bin 39640 -> 40128 bytes Code-C/main.c | 3 +-- Code-C/simulateFlux.c | 13 ++++++++++++- 7 files changed, 23 insertions(+), 13 deletions(-) diff --git a/Code-C/average.c b/Code-C/average.c index dd83fe7..425419c 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -10,10 +10,10 @@ * @param averageArray array where results are stocked */ void averageCalculation(long **p, double averageArray[]){ - for(int i = 0; i < nCol-1; i++){ + for(int i = 1; i < nCol; i++){ int j = 0; averageArray[i] = 0; - while(j < nRow){ + while(j < nRow -1){ averageArray[i] += p[i][j]; j++; } diff --git a/Code-C/getArray.c b/Code-C/getArray.c index 77a71ba..eeaac8e 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -70,9 +70,9 @@ bool checkArrayFullyFill(long **p, int N){ * @param N number of rows in array */ void freeArray(long **p, int N) { - int i; - for(i = 0 ; i < N ; i++) + for(int i = 0 ; i < N ; i++){ free(p[i]); + } free(p); } @@ -87,14 +87,12 @@ void freeArray(long **p, int N) { long **getRawDataArray(char* rawDataFileName){ long **p; p = get(nRow, nCol); - printf("before fill\n"); fillArrayWithRawData(rawDataFileName,p ,nRow, nCol); - printf("after fill\n"); - if(checkArrayFullyFill(p,nRow, nCol)){ + //if(checkArrayFullyFill(p,nRow)){ //clearRawData(N); return p; - } + /*} else{ return NULL; - } + }*/ } \ No newline at end of file diff --git a/Code-C/getArray.h b/Code-C/getArray.h index 6a0c836..02810a9 100644 --- a/Code-C/getArray.h +++ b/Code-C/getArray.h @@ -8,4 +8,4 @@ long **getRawDataArray(char *rawDataFileName); void printArrayData(long** p, int N, int M); void freeArray(long **p, int N); -bool checkArrayFullyFill(long **p, int N , int M); \ No newline at end of file +bool checkArrayFullyFill(long **p, int N ); \ No newline at end of file diff --git a/Code-C/initialParameters.h b/Code-C/initialParameters.h index 546b17a..96201f5 100644 --- a/Code-C/initialParameters.h +++ b/Code-C/initialParameters.h @@ -6,6 +6,8 @@ extern int nRow; extern int nCol; extern double freqEch; +extern int cptFile; + extern double period; extern double invTimeBandWidth; diff --git a/Code-C/main b/Code-C/main index 7652bd45e2c84a2e894b391e4ab9b663e3d55698..46f740e740872bbff6a062446db9ba1ab0f986be 100755 GIT binary patch delta 9432 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 delta 8847 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 nA$_L3+MD@#NbT!{ErF*sk1}=D3+Yo{1?j^^Ar Date: Wed, 15 Jun 2022 11:57:15 +0200 Subject: [PATCH 03/35] add new thread growth rate --- Code-C/Makefile | 3 ++- Code-C/average.c | 2 +- Code-C/average.h | 2 +- Code-C/growthRate.c | 23 +++++++++++++++++++++++ Code-C/growthRate.h | 1 + Code-C/main.c | 22 ++++++++++++++++++---- Code-C/power.c | 5 +++-- Code-C/power.h | 2 +- 8 files changed, 50 insertions(+), 10 deletions(-) create mode 100644 Code-C/growthRate.c create mode 100644 Code-C/growthRate.h diff --git a/Code-C/Makefile b/Code-C/Makefile index 0328aff..8b874a0 100644 --- a/Code-C/Makefile +++ b/Code-C/Makefile @@ -1,4 +1,5 @@ CC = gcc all: - $(CC) -g fileGestion.c getArray.c average.c power.c queue.c simulateFlux.c main.c -lm -lpthread -o main \ No newline at end of file + $(CC) -g fileGestion.c getArray.c average.c power.c queue.c simulateFlux.c main.c -lm -lpthread -o main + ./main < ../02400031.TXT \ No newline at end of file diff --git a/Code-C/average.c b/Code-C/average.c index 425419c..e9d8706 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -27,7 +27,7 @@ void averageCalculation(long **p, double averageArray[]){ * * @param rawDataFileName name of the raw data file to use to realize the calcul */ -void average(char* rawDataFileName){ +void averageThreadFunction(char* rawDataFileName){ long **p = getRawDataArray(rawDataFileName); double aver[nCol -1]; if(p !=NULL){ diff --git a/Code-C/average.h b/Code-C/average.h index 25be1e0..b130865 100644 --- a/Code-C/average.h +++ b/Code-C/average.h @@ -1,4 +1,4 @@ #include #include -void average(char* rawDataFileName); \ No newline at end of file +void averageThreadFunction(char* rawDataFileName); \ No newline at end of file diff --git a/Code-C/growthRate.c b/Code-C/growthRate.c new file mode 100644 index 0000000..951e2c2 --- /dev/null +++ b/Code-C/growthRate.c @@ -0,0 +1,23 @@ +#include "initialParameters.h" +#include "fileGestion.h" +#include "getArray.h" +/** + * @brief calculate de growth rate between to point next to each other + * + * @param dataArray array with data of points next to each other for each captor (dim : 2 * nCols) + * @param gRateArray array that contaigns results of the growth ratecalculation + */ +void growthRateCalculation(double **dataArray , double *gRateArray){ + double gRate = 0; + for(int i = 0 ; i < nCol-1 ; i++){ + gRate = (dataArray[1][i] - dataArray[2][i]) / period; + } +} + +void growthRateFunction(double *dataLign){ + double **dataArray; + //initialization + fill + double gRateArray[nCol-1]; + growthRateCalculation(dataArray , gRateArray); + appendDataInFile("growthRate.csv",gRateArray , nCol-1); +} \ No newline at end of file diff --git a/Code-C/growthRate.h b/Code-C/growthRate.h new file mode 100644 index 0000000..3a1f118 --- /dev/null +++ b/Code-C/growthRate.h @@ -0,0 +1 @@ +void growthRateFunction(); \ No newline at end of file diff --git a/Code-C/main.c b/Code-C/main.c index a66d853..dcefc4b 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -5,6 +5,7 @@ #include "initialParameters.h" #include "queue.h" #include "average.h" +#include "growthRate.h" bool rawDataWriteFlag; int nRow = 500; @@ -28,7 +29,7 @@ void *threadCalculPower(void *vargp){ while(queueGetNextE(rawDataQueue) != NULL){ rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); - power(fileName); + powerFunction(fileName); remove(fileName); } } @@ -41,7 +42,7 @@ void *threadCalculAverage(void *vargp){ while(queueGetNextE(rawDataQueue) != NULL){ rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); - average(fileName); + averageThreadFunction(fileName); remove(fileName); } } @@ -54,13 +55,26 @@ void *threadCalculBoth(void *vargp){ while(queueGetNextE(rawDataQueue) != NULL){ rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); - power(fileName); - average(fileName); + powerFunction(fileName); + averageThreadFunction(fileName); remove(fileName); } } } +void *threadCalculGrowthRate(void * vargp){ + Pqueue rawDataQueue = firstRawDataQueue; + char* fileName; + while(rawDataWriteFlag){ + while(queueGetNextE(rawDataQueue) != NULL){ + rawDataQueue = queueGetNextE(rawDataQueue); + fileName = queueGetTabChar(rawDataQueue); + double *dataLign = powerFunction(fileName); + growthRateFunction(dataLign); + remove(fileName); + } + } +} int main(int argc , char** argv){ diff --git a/Code-C/power.c b/Code-C/power.c index 66f4f75..7e6b1b3 100644 --- a/Code-C/power.c +++ b/Code-C/power.c @@ -5,7 +5,7 @@ #include "queue.h" /** - * @brief realize the power calcul + * @brief realize the powerThreadFunction calcul * * @param p array with all the values that will be used for the calcul * @param powerArray array where results are stocked @@ -30,7 +30,7 @@ void powerCalculation(long **p, double powerArray[]){ * @param N number of rows in the file * @param M number of columns in the file */ -void power(char* rawDataFileName){ +double *powerFunction(char* rawDataFileName){ long **p = getRawDataArray(rawDataFileName); double pw[nCol-1]; if(p !=NULL){ @@ -38,4 +38,5 @@ void power(char* rawDataFileName){ appendDataInFile("powerData.csv",pw,nCol-1); freeArray(p,nRow); } + return pw; } \ No newline at end of file diff --git a/Code-C/power.h b/Code-C/power.h index 85480f9..a2a134e 100644 --- a/Code-C/power.h +++ b/Code-C/power.h @@ -1,4 +1,4 @@ #include #include -void power(char* rawDataFileName); \ No newline at end of file +double *powerFunction(char* rawDataFileName); \ No newline at end of file From 7d024ff384c1943f5c6c5818525c022ab107208c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Wed, 15 Jun 2022 12:01:51 +0200 Subject: [PATCH 04/35] first part and skeletton of growthrate thread --- Code-C/growthrate.c | 39 +++++++++++++++++++++++++++++++++++++++ Code-C/growthrate.h | 4 ++++ Code-C/main | Bin 40128 -> 40128 bytes Code-C/main.c | 13 +++++++++++++ Code-C/power.c | 3 ++- 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 Code-C/growthrate.c create mode 100644 Code-C/growthrate.h diff --git a/Code-C/growthrate.c b/Code-C/growthrate.c new file mode 100644 index 0000000..2f8d4fc --- /dev/null +++ b/Code-C/growthrate.c @@ -0,0 +1,39 @@ +#include "average.h" +#include "getArray.h" +#include "fileGestion.h" +#include "initialParameters.h" +#include "queue.h" + +/** + * @brief realize the growthRate calcul + * + * @param p array with all the values that will be used for the calcul + * @param powerArray array where results are stocked + */ +void growthRateCalculation(long **p, double powerArray[]){ + for(int i = 1; i < nCol; i++){ + int j = 0; + powerArray[i] = 0; + while(j < nRow-1){ + double aire = ( pow(p[j][i],2) + pow(p[j+1][i],2) ) / 2 * period; + powerArray[i] += aire; + j++; + } + powerArray[i] *= invTimeBandWidth; + } +} + +/** + * @brief function that realize all the action to write one lign in the file growthRateData.csv + * + * @param rawDataFileName name of the raw data file to use to realize the calcul + */ +void growthRate(char* rawDataFileName){ + long **p = getRawDataArray(rawDataFileName), ; + double gRate[nCol -1]; + if(p !=NULL){ + growthRateCalculation(p,gRate); + appendDataInFile("averageData.csv",aver,nCol-1); + freeArray(p,nRow); + } +} \ No newline at end of file diff --git a/Code-C/growthrate.h b/Code-C/growthrate.h new file mode 100644 index 0000000..107db51 --- /dev/null +++ b/Code-C/growthrate.h @@ -0,0 +1,4 @@ +#include +#include + +void growthRate(char* rawDataFileName); \ No newline at end of file diff --git a/Code-C/main b/Code-C/main index 46f740e740872bbff6a062446db9ba1ab0f986be..d66df7a1eabb898d6c12672dd586839b7d357733 100755 GIT binary patch delta 4271 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 diff --git a/Code-C/main.c b/Code-C/main.c index a66d853..1264c28 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -61,6 +61,19 @@ void *threadCalculBoth(void *vargp){ } } +void *threadGrowthRate(void *vargp){ + Pqueue rawDataQueue = firstRawDataQueue; + char* fileName; + while(rawDataWriteFlag){ + while(queueGetNextE(rawDataQueue) != NULL){ + rawDataQueue = queueGetNextE(rawDataQueue); + fileName = queueGetTabChar(rawDataQueue); + GrowthRate(fileName); + remove(fileName); + } + } +} + int main(int argc , char** argv){ diff --git a/Code-C/power.c b/Code-C/power.c index 66f4f75..6ac6709 100644 --- a/Code-C/power.c +++ b/Code-C/power.c @@ -30,7 +30,7 @@ void powerCalculation(long **p, double powerArray[]){ * @param N number of rows in the file * @param M number of columns in the file */ -void power(char* rawDataFileName){ +double * power(char* rawDataFileName){ long **p = getRawDataArray(rawDataFileName); double pw[nCol-1]; if(p !=NULL){ @@ -38,4 +38,5 @@ void power(char* rawDataFileName){ appendDataInFile("powerData.csv",pw,nCol-1); freeArray(p,nRow); } + return pw; } \ No newline at end of file From a6c0e54756896a8e422eef3c0556b343beca6b72 Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Wed, 15 Jun 2022 13:59:27 +0200 Subject: [PATCH 05/35] add comment for work in main --- Code-C/main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Code-C/main.c b/Code-C/main.c index dcefc4b..020b140 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -66,6 +66,9 @@ void *threadCalculGrowthRate(void * vargp){ Pqueue rawDataQueue = firstRawDataQueue; char* fileName; while(rawDataWriteFlag){ + //add case first file traitement + //(possibility 1: call twice powerfunction , following while strat after 2 file encountered) + //(posibilty 2 : initialiaze with a 0-fill array, move ligns for first encounter then let the following whil e do the job) while(queueGetNextE(rawDataQueue) != NULL){ rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); From 0c6363945445e8edb003fa8c461ca0eb10b15da1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Wed, 15 Jun 2022 14:01:55 +0200 Subject: [PATCH 06/35] add in main.c --- Code-C/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code-C/main.c b/Code-C/main.c index dcefc4b..a82f866 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -69,7 +69,7 @@ void *threadCalculGrowthRate(void * vargp){ while(queueGetNextE(rawDataQueue) != NULL){ rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); - double *dataLign = powerFunction(fileName); + //double *dataLign = powerFunction(fileName); growthRateFunction(dataLign); remove(fileName); } From 21cb319b25a36f2714e6c79b5ae2e3a9dc22378c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Wed, 15 Jun 2022 15:45:14 +0200 Subject: [PATCH 07/35] =?UTF-8?q?=20growthRate=20thread=20impl=C3=A9mentat?= =?UTF-8?q?ion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Code-C/Makefile | 2 +- Code-C/growthRate.c | 1 + Code-C/growthRate.h | 5 ++++- Code-C/growthrate.c | 39 --------------------------------------- Code-C/growthrate.h | 4 ---- Code-C/main | Bin 40128 -> 41632 bytes Code-C/main.c | 24 ++++++++++++++++++++---- Code-C/power.c | 13 ++++++++----- Code-C/power.h | 2 +- 9 files changed, 35 insertions(+), 55 deletions(-) delete mode 100644 Code-C/growthrate.c delete mode 100644 Code-C/growthrate.h diff --git a/Code-C/Makefile b/Code-C/Makefile index 8b874a0..44a0a3d 100644 --- a/Code-C/Makefile +++ b/Code-C/Makefile @@ -1,5 +1,5 @@ CC = gcc all: - $(CC) -g fileGestion.c getArray.c average.c power.c queue.c simulateFlux.c main.c -lm -lpthread -o main + $(CC) -g fileGestion.c getArray.c average.c growthRate.c power.c queue.c simulateFlux.c main.c -lm -lpthread -o main ./main < ../02400031.TXT \ No newline at end of file diff --git a/Code-C/growthRate.c b/Code-C/growthRate.c index 951e2c2..c381864 100644 --- a/Code-C/growthRate.c +++ b/Code-C/growthRate.c @@ -1,6 +1,7 @@ #include "initialParameters.h" #include "fileGestion.h" #include "getArray.h" +#include "growthRate.h" /** * @brief calculate de growth rate between to point next to each other * diff --git a/Code-C/growthRate.h b/Code-C/growthRate.h index 3a1f118..1e0b201 100644 --- a/Code-C/growthRate.h +++ b/Code-C/growthRate.h @@ -1 +1,4 @@ -void growthRateFunction(); \ No newline at end of file +#include +#include + +void growthRateFunction(double *dataLign); \ No newline at end of file diff --git a/Code-C/growthrate.c b/Code-C/growthrate.c deleted file mode 100644 index 2f8d4fc..0000000 --- a/Code-C/growthrate.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "average.h" -#include "getArray.h" -#include "fileGestion.h" -#include "initialParameters.h" -#include "queue.h" - -/** - * @brief realize the growthRate calcul - * - * @param p array with all the values that will be used for the calcul - * @param powerArray array where results are stocked - */ -void growthRateCalculation(long **p, double powerArray[]){ - for(int i = 1; i < nCol; i++){ - int j = 0; - powerArray[i] = 0; - while(j < nRow-1){ - double aire = ( pow(p[j][i],2) + pow(p[j+1][i],2) ) / 2 * period; - powerArray[i] += aire; - j++; - } - powerArray[i] *= invTimeBandWidth; - } -} - -/** - * @brief function that realize all the action to write one lign in the file growthRateData.csv - * - * @param rawDataFileName name of the raw data file to use to realize the calcul - */ -void growthRate(char* rawDataFileName){ - long **p = getRawDataArray(rawDataFileName), ; - double gRate[nCol -1]; - if(p !=NULL){ - growthRateCalculation(p,gRate); - appendDataInFile("averageData.csv",aver,nCol-1); - freeArray(p,nRow); - } -} \ No newline at end of file diff --git a/Code-C/growthrate.h b/Code-C/growthrate.h deleted file mode 100644 index 107db51..0000000 --- a/Code-C/growthrate.h +++ /dev/null @@ -1,4 +0,0 @@ -#include -#include - -void growthRate(char* rawDataFileName); \ No newline at end of file diff --git a/Code-C/main b/Code-C/main index d66df7a1eabb898d6c12672dd586839b7d357733..a7621956ed14f17d53e56e87cac60e60efa9efa9 100755 GIT binary patch delta 10953 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 delta 8733 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 E0DrLm-2eap diff --git a/Code-C/main.c b/Code-C/main.c index b8f4190..5d747ef 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -29,7 +29,7 @@ void *threadCalculPower(void *vargp){ while(queueGetNextE(rawDataQueue) != NULL){ rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); - powerFunction(fileName); + powerFunction(fileName, NULL); remove(fileName); } } @@ -55,7 +55,7 @@ void *threadCalculBoth(void *vargp){ while(queueGetNextE(rawDataQueue) != NULL){ rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); - powerFunction(fileName); + powerFunction(fileName, NULL); averageThreadFunction(fileName); remove(fileName); } @@ -65,6 +65,9 @@ void *threadCalculBoth(void *vargp){ void *threadCalculGrowthRate(void * vargp){ Pqueue rawDataQueue = firstRawDataQueue; char* fileName; + //double pw[nCol-1]; + double *dataLign[2][nCol-1]; + int i = 0; while(rawDataWriteFlag){ //add case first file traitement //(possibility 1: call twice powerfunction , following while strat after 2 file encountered) @@ -72,8 +75,21 @@ void *threadCalculGrowthRate(void * vargp){ while(queueGetNextE(rawDataQueue) != NULL){ rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); - //double *dataLign = powerFunction(fileName); - growthRateFunction(dataLign); + if(i < 2){ + if(i == 1){ + powerFunction(fileName, dataLign[1]); + growthRateFunction(**dataLign); + }else{ + powerFunction(fileName, dataLign[0]); + } + i++; + }else{ + for(int y = 0; y < (nCol-1); y++){ + dataLign[0][y] = dataLign[1][y]; + } + powerFunction(fileName, dataLign[1]); + growthRateFunction(**dataLign); + } remove(fileName); } } diff --git a/Code-C/power.c b/Code-C/power.c index 7e6b1b3..b6ba5d9 100644 --- a/Code-C/power.c +++ b/Code-C/power.c @@ -30,13 +30,16 @@ void powerCalculation(long **p, double powerArray[]){ * @param N number of rows in the file * @param M number of columns in the file */ -double *powerFunction(char* rawDataFileName){ +void powerFunction(char* rawDataFileName, double **pw){ long **p = getRawDataArray(rawDataFileName); - double pw[nCol-1]; + double pww[nCol-1]; if(p !=NULL){ - powerCalculation(p,pw); - appendDataInFile("powerData.csv",pw,nCol-1); + if(pw == NULL){ + powerCalculation(p,pww); + }else{ + powerCalculation(p,*pw); + } + appendDataInFile("powerData.csv",*pw,nCol-1); freeArray(p,nRow); } - return pw; } \ No newline at end of file diff --git a/Code-C/power.h b/Code-C/power.h index a2a134e..043857c 100644 --- a/Code-C/power.h +++ b/Code-C/power.h @@ -1,4 +1,4 @@ #include #include -double *powerFunction(char* rawDataFileName); \ No newline at end of file +void powerFunction(char* rawDataFileName, double **pw); \ No newline at end of file From 9cf444c47e69a0c2e73773299029cfc63caeff27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Wed, 15 Jun 2022 16:27:56 +0200 Subject: [PATCH 08/35] osef test error --- Code-C/main | Bin 41632 -> 41640 bytes Code-C/main.c | 5 +++-- Code-C/power.c | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Code-C/main b/Code-C/main index a7621956ed14f17d53e56e87cac60e60efa9efa9..ba3c2e9ea63c687254272a0b4b4102c3ac980646 100755 GIT binary patch delta 1853 zcmY+Fdr(w$6vuzRyL(w)%UvESh_)&jDvu>tUNxwzAWK6NrW>H8I3mU5Oq0RDP9-S# z*jZPllSL{7PE(lup=}y2nK+FIy#~jTp_v@1G?ySj%n=g0eeYd0yMKH?=lp)>p7Y!D zJ9oC_ywG-D*uQ{#8x~#-)Ek-l=#3P{69XaxeQqS>@w1@?$v*EPDN5*wSd$#FwQKg7 zn=21Lb5LlDsGRElYQ5VlERv)@W-(@U>FZQv?Q+izTNYJQW_4v<_G8SObX}IM&YW?p zx~?dYw-Kk zVpf-J)auGXlP_9b(^Brq^27dL{RIbi*}T~H`nJ0#AKC82_E|Mw7k+J-WXxvFQkd_` zGGeAIFXTD;EVewy9m{HqW71}IB^a>0Du3Y=F2&!=Q{0}!H2!(gQbD(AONG6XF@Py(R45a%)pQpfgHnK4ZZ<3f?Z&{_$p&*n9ZND zP>#vg;=4HsJ`PU9Cz1_r1WUmdupZ34E6X2&)5mde&#gDRmtbO3snPC_H-GV~DLLF5XG%2e#kOyk@ke48$1hAkn6ox*axpRhYv=Z{;( z(p$KMBC==3a2+*eM)LtWotewW-TbMu8tTp}60|1wyu}S#!K@{VFx~y#vZiQmc9*Xk z;kr_>5E+iq`jY64r6GzfG~`Q%(RN-sYp?1qHMA=37U@mZEioKb+=}~dQK%;Y>v+<9 zU}5Eqm+5_}HZvBIq=YZmZNhdxT`7rvaru13)-<%$7&a+;*})$8LPLQe4j%x|33^%G zZm%&Y^UZVhGXPD)Qa>fLHNcm-D0C_wVR$S)urNF0#k6`u7I(Sd+3>C;J}UkFAB%nw<84YwJ<|tdD@vihOmY->C5KYmZprb)f_t+3 zuU%R&6T$ty`N-}Yr`Gs8jWphEU{jNFRY#%F- z9J8ij`1!mU;>Dv2C%VLmUTSGRUu0pn4^>$JOGx1dvD2d9hi&e_!|5G>;gStKbUk|mJJ$?oBO*g zCxh{KP>d27U*3`BZD6rSmRmu;Kd=EXyib-#K`R)BdbWcZpbh6;1onelz&Nx{16T&O zflc5QP=_`d1)ISz0iOwGfZ6E0B2e$OA_0s_w0Q$~0c->3qhYUt6=-cge~vo=P6wyp zjw}KU&-jhxU(ItVSNZsZ#*&2E&!^E7l71~XW zP?=6ZBj_6RQyNF)vlN-B*yc=A-@sTa2DrU zziNPK%Y;I#Zl>ar@R!Si6`ObFiJ#zjSXsnw)y+1vDDG=wrRtU#zEIqa58NW-{#h8u zGsg!mWIe}L2l-N!b6jw;5^mP6!E_g0D+ym|j!|rlv(;)?qs%P~JPMz8E;YpCqOhC^ zuc*^)R)ca6m?bC_&^WXGmCTFvzRX3&!32ciG5f%Uyveab$}i1gHrJlg_e3F2(Cb#X z;wyRu)=7bz`@$oVg|J~EXjnJ#m>_;D1RoV96bb>G1g6nb=$50b$8~Yb9j)v5wtR+~ zQONd0CXso2D091(Z`b;v-%4vXW2mQQ3GYQs-)`cS+Mc#w;8{I6>ylWPtD{cKSTmh- zq+=Uw_uC>r7(u%l69Yz+zb<%?_;ll9WYISz=^yVA*7benhr?vHt;tSFlw8 diff --git a/Code-C/main.c b/Code-C/main.c index 5d747ef..bdb297f 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -53,6 +53,8 @@ void *threadCalculBoth(void *vargp){ char* fileName; while(rawDataWriteFlag){ while(queueGetNextE(rawDataQueue) != NULL){ + + printf("ertyu\n"); rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); powerFunction(fileName, NULL); @@ -108,10 +110,9 @@ int main(int argc , char** argv){ period = 1 / freqEch; invTimeBandWidth = 1 /(nRow * period); firstRawDataQueue = queueCreateEmpty(); // change this for create empty - + pthread_t rawData; pthread_create(&rawData , NULL, threadSimulateFlux, (void *)&rawData); - pthread_t calcul; pthread_create(&calcul , NULL, threadCalculBoth, (void *)&calcul); diff --git a/Code-C/power.c b/Code-C/power.c index b6ba5d9..a3aa974 100644 --- a/Code-C/power.c +++ b/Code-C/power.c @@ -36,8 +36,10 @@ void powerFunction(char* rawDataFileName, double **pw){ if(p !=NULL){ if(pw == NULL){ powerCalculation(p,pww); + }else{ powerCalculation(p,*pw); + } appendDataInFile("powerData.csv",*pw,nCol-1); freeArray(p,nRow); From d6f1fc5cfaad7d2665c7864a6a09caf2d86f3a0a Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Wed, 15 Jun 2022 10:49:21 +0200 Subject: [PATCH 09/35] threads clean , captors choice ok --- Code-C/main | Bin 41640 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 Code-C/main diff --git a/Code-C/main b/Code-C/main deleted file mode 100755 index ba3c2e9ea63c687254272a0b4b4102c3ac980646..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41640 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 BEmZ&j From 7af73662476325059b6f9201e249ed16b64d42b5 Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Wed, 15 Jun 2022 17:50:47 +0200 Subject: [PATCH 10/35] fix threadboth --- Code-C/main.c | 4 +--- Code-C/power.c | 5 ++--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Code-C/main.c b/Code-C/main.c index bdb297f..1bacd00 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -53,8 +53,6 @@ void *threadCalculBoth(void *vargp){ char* fileName; while(rawDataWriteFlag){ while(queueGetNextE(rawDataQueue) != NULL){ - - printf("ertyu\n"); rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); powerFunction(fileName, NULL); @@ -114,7 +112,7 @@ int main(int argc , char** argv){ pthread_t rawData; pthread_create(&rawData , NULL, threadSimulateFlux, (void *)&rawData); pthread_t calcul; - pthread_create(&calcul , NULL, threadCalculBoth, (void *)&calcul); + pthread_create(&calcul , NULL, threadCalculGrowthRate, (void *)&calcul); pthread_exit(NULL); } \ No newline at end of file diff --git a/Code-C/power.c b/Code-C/power.c index a3aa974..8f80d43 100644 --- a/Code-C/power.c +++ b/Code-C/power.c @@ -36,12 +36,11 @@ void powerFunction(char* rawDataFileName, double **pw){ if(p !=NULL){ if(pw == NULL){ powerCalculation(p,pww); - + appendDataInFile("powerData.csv",pww,nCol-1); }else{ powerCalculation(p,*pw); - + appendDataInFile("powerData.csv",*pw,nCol-1); } - appendDataInFile("powerData.csv",*pw,nCol-1); freeArray(p,nRow); } } \ No newline at end of file From e23d744cdc5b66a309b20167742b132efb00e4be Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Thu, 16 Jun 2022 14:35:02 +0200 Subject: [PATCH 11/35] beginning change power --- Code-C/getArray.c | 15 +++++++++++++-- Code-C/getArray.h | 3 ++- Code-C/growthRate.c | 15 ++++++++------- Code-C/growthRate.h | 2 +- Code-C/main | Bin 0 -> 41872 bytes Code-C/main.c | 23 +++++++++++------------ Code-C/power.c | 15 ++++++++++----- Code-C/power.h | 2 +- Code-C/simulateFlux.c | 4 ++-- 9 files changed, 48 insertions(+), 31 deletions(-) create mode 100755 Code-C/main diff --git a/Code-C/getArray.c b/Code-C/getArray.c index eeaac8e..7284378 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -3,7 +3,7 @@ #include "initialParameters.h" //#include -long **get(int N, int M) /* Allocate the array */ +long **getlongArray(int N, int M) /* Allocate the array */ { /* Check if allocation succeeded. (check for NULL pointer) */ int i; @@ -14,6 +14,17 @@ long **get(int N, int M) /* Allocate the array */ return array; } +double **getDoubleArray(int N, int M) /* Allocate the array */ +{ + /* Check if allocation succeeded. (check for NULL pointer) */ + int i; + double **array; + array = (double **) malloc(N*sizeof(double *)); + for(i = 0 ; i < N ; i++) + array[i] = (double *) malloc( M*sizeof(double)); + return array; +} + void fillArrayWithRawData(char *rawDataFileName,long** p, int N, int M) { int i, j; char *buffer; @@ -86,7 +97,7 @@ void freeArray(long **p, int N) { */ long **getRawDataArray(char* rawDataFileName){ long **p; - p = get(nRow, nCol); + p = getlongArray(nRow, nCol); fillArrayWithRawData(rawDataFileName,p ,nRow, nCol); //if(checkArrayFullyFill(p,nRow)){ //clearRawData(N); diff --git a/Code-C/getArray.h b/Code-C/getArray.h index 02810a9..a53bd0c 100644 --- a/Code-C/getArray.h +++ b/Code-C/getArray.h @@ -8,4 +8,5 @@ long **getRawDataArray(char *rawDataFileName); void printArrayData(long** p, int N, int M); void freeArray(long **p, int N); -bool checkArrayFullyFill(long **p, int N ); \ No newline at end of file +bool checkArrayFullyFill(long **p, int N ); +double **getDoubleArray(int N, int M); \ No newline at end of file diff --git a/Code-C/growthRate.c b/Code-C/growthRate.c index c381864..8fcca10 100644 --- a/Code-C/growthRate.c +++ b/Code-C/growthRate.c @@ -9,16 +9,17 @@ * @param gRateArray array that contaigns results of the growth ratecalculation */ void growthRateCalculation(double **dataArray , double *gRateArray){ - double gRate = 0; for(int i = 0 ; i < nCol-1 ; i++){ - gRate = (dataArray[1][i] - dataArray[2][i]) / period; + gRateArray[i] = (dataArray[0][i] - dataArray[1][i]) / period; } } - -void growthRateFunction(double *dataLign){ - double **dataArray; - //initialization + fill +/** + * @brief calcul then print differentiate in csv + * + * @param dataLign + */ +void growthRateFunction(double **dataLign){ double gRateArray[nCol-1]; - growthRateCalculation(dataArray , gRateArray); + growthRateCalculation(dataLign , gRateArray); appendDataInFile("growthRate.csv",gRateArray , nCol-1); } \ No newline at end of file diff --git a/Code-C/growthRate.h b/Code-C/growthRate.h index 1e0b201..7979f21 100644 --- a/Code-C/growthRate.h +++ b/Code-C/growthRate.h @@ -1,4 +1,4 @@ #include #include -void growthRateFunction(double *dataLign); \ No newline at end of file +void growthRateFunction(double **dataLign); \ No newline at end of file diff --git a/Code-C/main b/Code-C/main new file mode 100755 index 0000000000000000000000000000000000000000..640008a6248823e31c5af521edcfbba984debc5d GIT binary patch literal 41872 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 SWRjJSKO{Jo*$UV|?f(I4zMJO& literal 0 HcmV?d00001 diff --git a/Code-C/main.c b/Code-C/main.c index 1bacd00..1a42c18 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -6,14 +6,15 @@ #include "queue.h" #include "average.h" #include "growthRate.h" +#include "getArray.h" bool rawDataWriteFlag; -int nRow = 500; +int nRow = 4; int nCol = 1; double freqEch = 250; Pqueue firstRawDataQueue; - +//Captor 1 2 3 4 5 6 7 8 bool selectionCaptors[] = {true,false,true,false,false,false,true,false}; int cptData = 0; @@ -66,31 +67,29 @@ void *threadCalculGrowthRate(void * vargp){ Pqueue rawDataQueue = firstRawDataQueue; char* fileName; //double pw[nCol-1]; - double *dataLign[2][nCol-1]; + double **dataLign = getDoubleArray(2,nCol); + int i = 0; while(rawDataWriteFlag){ - //add case first file traitement - //(possibility 1: call twice powerfunction , following while strat after 2 file encountered) - //(posibilty 2 : initialiaze with a 0-fill array, move ligns for first encounter then let the following whil e do the job) while(queueGetNextE(rawDataQueue) != NULL){ rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); if(i < 2){ if(i == 1){ - powerFunction(fileName, dataLign[1]); - growthRateFunction(**dataLign); + powerFunction(fileName, dataLign); + growthRateFunction(dataLign); }else{ - powerFunction(fileName, dataLign[0]); + powerFunction(fileName, dataLign); } i++; }else{ for(int y = 0; y < (nCol-1); y++){ dataLign[0][y] = dataLign[1][y]; } - powerFunction(fileName, dataLign[1]); - growthRateFunction(**dataLign); + powerFunction(fileName, dataLign); + growthRateFunction(dataLign); } - remove(fileName); + //remove(fileName); } } } diff --git a/Code-C/power.c b/Code-C/power.c index 8f80d43..836bf0c 100644 --- a/Code-C/power.c +++ b/Code-C/power.c @@ -11,16 +11,21 @@ * @param powerArray array where results are stocked */ void powerCalculation(long **p, double powerArray[]){ + printArrayData(p,nRow,nCol); + printf("data in pw : \n"); for(int i = 1; i < nCol; i++){ int j = 0; powerArray[i] = 0; - while(j < nRow-1){ - double aire = ( pow(p[j][i],2) + pow(p[j+1][i],2) ) / 2 * period; - powerArray[i] += aire; + + while(j < nRow){ + + printf("%d , %d , %d , %d\n" , p[j][i], p[j+1][i] , i ,j); + powerArray[i] + pow(p[j][i],2); j++; } powerArray[i] *= invTimeBandWidth; } + } /** @@ -30,7 +35,7 @@ void powerCalculation(long **p, double powerArray[]){ * @param N number of rows in the file * @param M number of columns in the file */ -void powerFunction(char* rawDataFileName, double **pw){ +void powerFunction(char* rawDataFileName, double *pw[]){ long **p = getRawDataArray(rawDataFileName); double pww[nCol-1]; if(p !=NULL){ @@ -38,7 +43,7 @@ void powerFunction(char* rawDataFileName, double **pw){ powerCalculation(p,pww); appendDataInFile("powerData.csv",pww,nCol-1); }else{ - powerCalculation(p,*pw); + powerCalculation(p,pw[1]); appendDataInFile("powerData.csv",*pw,nCol-1); } freeArray(p,nRow); diff --git a/Code-C/power.h b/Code-C/power.h index 043857c..e75d948 100644 --- a/Code-C/power.h +++ b/Code-C/power.h @@ -1,4 +1,4 @@ #include #include -void powerFunction(char* rawDataFileName, double **pw); \ No newline at end of file +void powerFunction(char* rawDataFileName, double *pw[]); \ No newline at end of file diff --git a/Code-C/simulateFlux.c b/Code-C/simulateFlux.c index 0016a69..9c0fbd9 100644 --- a/Code-C/simulateFlux.c +++ b/Code-C/simulateFlux.c @@ -119,7 +119,7 @@ bool writeOneRawData(FILE *rawDataFile){ } int lastIndex = lastIndexCaptor(); for (int i = 1; i < 9; i++){ - if(selectionCaptors[i]){ + if(selectionCaptors[i-1]){ value.octet1 = buff[3*i+1]; value.octet2 = buff[3*i+2]; value.octet3 = buff[3*i+3]; @@ -128,7 +128,7 @@ bool writeOneRawData(FILE *rawDataFile){ valbin[i] = buff[3*i+1]*256*256*256 + buff[3*i+2]*256*256 + buff[3*i+3]*256; memcpy(&values[i], &valbin[i], sizeof(uint32_t)); - if(i==lastIndex){ + if(i-1==lastIndex){ fprintf(rawDataFile, "%d\n", values[i]/256); } else{ From 479289a365cfbdeff8f93860c73e0efc89abc541 Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Thu, 16 Jun 2022 14:44:31 +0200 Subject: [PATCH 12/35] vide --- Code-C/main | Bin 41872 -> 41760 bytes Code-C/power.c | 5 ++--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Code-C/main b/Code-C/main index 640008a6248823e31c5af521edcfbba984debc5d..6d59e32e3f66a3e78afe9c7a8bc3ed80f01272e4 100755 GIT binary patch delta 6323 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 delta 6766 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 Date: Thu, 16 Jun 2022 15:19:07 +0200 Subject: [PATCH 13/35] power debug (column = 0) --- Code-C/main | Bin 41760 -> 41760 bytes Code-C/main.c | 2 +- Code-C/power.c | 7 +++---- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Code-C/main b/Code-C/main index 6d59e32e3f66a3e78afe9c7a8bc3ed80f01272e4..3cd197e6963024a135e688b05bc98a32ecf109a8 100755 GIT binary patch delta 4244 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 H-hTbRTN0hi delta 4269 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 Date: Thu, 16 Jun 2022 17:05:12 +0200 Subject: [PATCH 14/35] growth ok --- Code-C/average.c | 22 ++++++++++++++-------- Code-C/average.h | 2 +- Code-C/getArray.c | 4 ++-- Code-C/growthRate.c | 15 +++++++++++++-- Code-C/growthRate.h | 2 +- Code-C/initialParameters.h | 3 ++- Code-C/main | Bin 41760 -> 42008 bytes Code-C/main.c | 30 +++++++++++++++++++----------- Code-C/power.c | 12 +++++------- Code-C/simulateFlux.c | 2 +- 10 files changed, 58 insertions(+), 34 deletions(-) diff --git a/Code-C/average.c b/Code-C/average.c index e9d8706..8fef657 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -13,12 +13,11 @@ void averageCalculation(long **p, double averageArray[]){ for(int i = 1; i < nCol; i++){ int j = 0; averageArray[i] = 0; - while(j < nRow -1){ + while(j < nRowRawData){ averageArray[i] += p[i][j]; j++; } - averageArray[i] /= nRow; - //printf("%f\n", powerArray[i]); + averageArray[i] /= nRowRawData; } } @@ -27,12 +26,19 @@ void averageCalculation(long **p, double averageArray[]){ * * @param rawDataFileName name of the raw data file to use to realize the calcul */ -void averageThreadFunction(char* rawDataFileName){ +void averageFunction(char* rawDataFileName , double **aver){ long **p = getRawDataArray(rawDataFileName); - double aver[nCol -1]; + double averN[nCol -1]; if(p !=NULL){ - averageCalculation(p,aver); - appendDataInFile("averageData.csv",aver,nCol-1); - freeArray(p,nRow); + if(p !=NULL){ + if(aver == NULL){ + averageCalculation(p,averN); + appendDataInFile("averageData.csv",averN,nCol-1); + }else{ + averageCalculation(p,aver[1]); + appendDataInFile("averageData.csv",aver[1],nCol-1); + } + freeArray(p,nRowRawData); + } } } \ No newline at end of file diff --git a/Code-C/average.h b/Code-C/average.h index b130865..a121de4 100644 --- a/Code-C/average.h +++ b/Code-C/average.h @@ -1,4 +1,4 @@ #include #include -void averageThreadFunction(char* rawDataFileName); \ No newline at end of file +void averageFunction(char* rawDataFileName , double **aver); \ No newline at end of file diff --git a/Code-C/getArray.c b/Code-C/getArray.c index 7284378..f8c05ef 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -97,8 +97,8 @@ void freeArray(long **p, int N) { */ long **getRawDataArray(char* rawDataFileName){ long **p; - p = getlongArray(nRow, nCol); - fillArrayWithRawData(rawDataFileName,p ,nRow, nCol); + p = getlongArray(nRowRawData, nCol); + fillArrayWithRawData(rawDataFileName,p ,nRowRawData, nCol); //if(checkArrayFullyFill(p,nRow)){ //clearRawData(N); return p; diff --git a/Code-C/growthRate.c b/Code-C/growthRate.c index 8fcca10..64a0a2e 100644 --- a/Code-C/growthRate.c +++ b/Code-C/growthRate.c @@ -18,8 +18,19 @@ void growthRateCalculation(double **dataArray , double *gRateArray){ * * @param dataLign */ -void growthRateFunction(double **dataLign){ +void growthRateFunction(double **dataLign , char* fileName){ double gRateArray[nCol-1]; growthRateCalculation(dataLign , gRateArray); - appendDataInFile("growthRate.csv",gRateArray , nCol-1); + appendDataInFile(fileName,gRateArray , nCol-1); +} + +void sumColArray(long **p, double res[] , int N , int M){ + for(int i = 1; i < M; i++){ + int j = 0; + res[i] = 0; + while(j < N){ + res[i] += p[i][j]; + j++; + } + } } \ No newline at end of file diff --git a/Code-C/growthRate.h b/Code-C/growthRate.h index 7979f21..d68b096 100644 --- a/Code-C/growthRate.h +++ b/Code-C/growthRate.h @@ -1,4 +1,4 @@ #include #include -void growthRateFunction(double **dataLign); \ No newline at end of file +void growthRateFunction(double **dataLign , char* fileName); \ No newline at end of file diff --git a/Code-C/initialParameters.h b/Code-C/initialParameters.h index 96201f5..5403af0 100644 --- a/Code-C/initialParameters.h +++ b/Code-C/initialParameters.h @@ -2,7 +2,8 @@ #include "queue.h" extern bool rawDataWriteFlag; -extern int nRow; +extern int nRowRawData; +extern int nRowGR; extern int nCol; extern double freqEch; diff --git a/Code-C/main b/Code-C/main index 3cd197e6963024a135e688b05bc98a32ecf109a8..d9efec68aa3e2c7f0b12ca0fa5ab95076d77fd20 100755 GIT binary patch delta 10306 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 !e}K4GY#R z(;g=iEdS)KRm@*TjFB528kf1i#$bX(tz-Lw_ z@#IN~flUxonfF0(qRfw?H?@L-mlX5+K+I17VNMIhp_r{O!CW@Vh}qmk9JhmNz@=DT zA?!n=Ka&J;6_Eg`bRq<61}T1+D(j`jwwHuIvJ*O9?U<)n?k2(;#*Z?j+HDc-O41hM zZzP1ZCz9}+LR%>RhwvAS4j!5m$M*8L$px9WfbNq zRCk)m@?X=XU{%ETV3d;dy)#Ys?I6Qtpj!;P`J0pb7nPEMt;U7A@}!9J#)$IPM5#Pa zDAR?=V%W~}rlbZ+DJvU<_kW~GOR#7|S zawS?T)=^ehNyOen%1x264cBmL`z1hLV!@EpD!N(^smA&^c`wSAIlmq`Cv;R3lyJHV z`*PL;b^9I<-%;(GkxOy~#!B5uX~ao=#7RMT+R{gX?ql|4M$^JU$9zg*B#Bf8dGgfs z(U;0w2@5G9TtuT371vk&VA+Hr9W0MzO8-;!n`#@sbLy}mQ@}O!^HzXoP_+ptchv#` zLvEi{AZhZ+q<%wEd2uBmsf+l(rsg?5Bg*!~PNIDFMB)up2mgo;*!f2k0-jN3x zW2>O3HgHXeG0RAP3FxMzn06XhV{DF(p@*;7WS{zK627%ax?^9aj@jdccK)NMcv?EW;8KzVt@!}|f- z2LhevNg(cnHcGSFQ5#dQ+gMBn&?Nuyn1B?hfybHTajubqq_0xcc2R=RSSKB7Zeeq7 zGN~9k4&Lqg9z-_JN<6ir#Iu>u`PNAQhK}t4&n&`kb<_!bb->d_4i-c&6L`AnuOQ)CoRtMnC&gL>Md7Hu0Nhl(J5~b4FI?UJ7!QAdl`xb5)c|2{7wp z&~fkJ-_6KlmE1eiXMcmFb4`?F8!wxgHE1mn^7X8jc-|%_1p+m6>!;R!BS6dKS`#juNBi7oIySKYutDJ4$H-QQxUu z7}8F?bOo0Im)UVS8p&Ut70YhmM`pzbs7h6rxG#TQt5H#OH`MQrMylB;=6wrB zH1j*?%~Z1{s#z_{@fisE{nJDjE=^v>O+B!!8KrHykZST`ZhD*OW@i`FhMVYGs@Vl% zdYl*zF}9FVx<*?S6V<=wbQAzHQT^kq;(a%j`812cH3?E^HZyq4X|@>Rb&7o~|MI3j zfxm(7D1(Gai6(0-#z=}@l4lk;%7e5VsJ@Z5WXbhlUE6ek2TeUSx4__XeXHNA6pYic8SAaY!-=7;kg@0 z`< zjpAAnz`26;GLNH0Hq(MTyUEZn5$HejNlQ^SNPx}sXe7>IsT3!97GVy*GRzTrn6-+t zj_l4DX&x24xbHd{@{?zS34o#FoM* z-@?1j-pp0Lv3|PIsn~24G2B)^#1?&(?P^;wFg3ob-<-G2>?r?naTD|LTbE>yvb1Yu zlgw*1*IdneR=1ux ziC-;F)u-kCrr-OlU9xO=kXBH9_oS-n?{dZTLmSU}u`+tfn<+j%iv<~drbd4QIr_VsAd>d+X??bo8`XkJB)Qt#J%1Pm+GGN#30$i{0LfjJs8 z*xI!beB`n$%fNQcA!6jSmzA<$*YB5A8rUOUXB(_t?t$a~D@NDdA!1a=u}8 zg^?u3P3G^e9{$3b8ivm~eEQk}iQ)g&px3kj2K8_1V|8@{YY>)b+}Tg7*PTRTXS!@4)>+@<^oxT|$8esvV>9-Z6H*#>XI_FmjB zox7V4+Tc|W4&viC%))c==?zV+mZ#s7%?9&|dwdDo3#Bngi#8v}qeqEWM)NiIyoWD! zlQtHz2EJzFbu5D)*;q*RthNkD2-j=)#hSicxRiLMfLF8>=JtLS`v6=wxOV-B#uH1l z|KaWyFFVC|w0MipL53VVG9>SiE@OZ&(ZiJ)J^^BNdL#d##p~XwPeWHyvJkR2u}GKc zeH_iv_?We^iAtr;@BLafjkMYA)F-UhWqQBoaK3+&w}M_GD7xOCZ2qj%dwphh`OP?qXB4KET{CIcy}#?lOM0I2s8>pk(-m@b zg%Z7RX6p1JUf1UJOwzfR9^ia>TPnK~%tDsSJKDT~dm%#e4PQIL^LPlll{N&!;H^gK$j~TD@P+qjh@kk4!%9-r`LdtaHP!rAzgy97kMMLp?9qV&rjK zJP83^wkTUV9;N%=LQ*Mo0d=eK%D`S}c@}h0c7cPse(%?Py1mhSZCTRb5Iu$;bb9ZP zOe!)<^4IDWGFgwquG4>wlY|L6Jq>i6QG7(ZJK<_wCj5PGwk}i2>)O2uH|gAJ-NMs4 zcX3xo`w4^ol~6Allf ztG4|HXZV_Jg_iImsh02EHo_VlA|2p?^vkvlj1A>$wvWJ%QG2(KLH{%QDZF^c7|RD` zQtkv_vtxwiuQyBV8NMIb`~?!bmb1r4SpGzx(5Zpv?bsc~XFQ&4*|SE{j`B4SY44C& QfbR$9d{|=RIP3KNA6bsZlK=n! delta 9985 zcmZ`;3wTpiwm$nLCpk%zCTVHYwDbinr7g4+3k3vi!AN+h1uYMG6{V#-EesWKfWTB9 znNV%rDyUTvbkwUjXhyFVA4NwVIx~WD{g@e*&RoPOC{M?#NbkS)J}KDmyXX75*IuuG zt-bc+?2~RksP5RWHuqPnA8jf4!v0H!BA#C|cmgZ3)!8Lm$H%c^Hj}Sr_j^_ima=Zj zed^v```-Q28pjQ;slNVWmi6?LK}iwIThqfJ_(~gM^MCCnN##Pkdoo zdJ?!Y;ue12)pfvsiE8w99dAy{W2YWS@tOkRL40poey$!~dnsIXDeUj84Y-!>uLyMt zphz!8d7Z&0S^|Gqj!bw2qFPt~gJjnpja-B{JEcFb?rq`gQXJ0RrHV4#-|5K_@dqe-7|&il51-SSvNNy;@_q8k9!pZ4}|;&!&)l;XYVD!jR+QKT)RVQDCtqY z9lucdwq6q(t5H5%BC;#`PgmEe;V9jXKx4Ze2)nN;d!6vRt=n%$AgstT{Vf5m7cj7J zQVG=LW0j?^ zZK2c-B5jbb%NTI`E2JGRwI@Bo_Y_EU#Cb$%TzgDL*h*F-q*c4L`hcu@kyY3q4Og8A zxx@Ywf$eY8ywJMJ=jP0L*PF>PARYTl$ARRy=A3{(E8)L@sBN6IQl(WASxw>3X7=~( zChZid-RBl5?gxn`@n~jW-v-jomD-I``+L&}==9--(KJQVI6+ zso8}K$CJ||(kWg#C6dz}XAH}5xlY#0ukx%#zxmL6Re{i#fyUEWfzaA0CL=1VWh206 zB;Z@|BFA?@q8@%a`?~8t0CrnMYHOu-5oy~9zHx1b#CV#l{v@r+rPVaDdXO*Z^LX6b zPHZqJX$g7yrlfw*&A;(2mb3#4>;Od33E%P~eSCao-;*qrkICs6dE7yh?>~kU>a^@0 z4r@mX6$Rs)hW$l*3hU(l2)gBOk1+Ro&N!3F9`bdD@EQ zQW;$z?dsat-Vh9glZHq<#5eGSDe$(!CIF*8fv`4+j6(awj+Wc0X_OUM(QOEDYM98U zDUbkKaJWqu3H?pv^p%LeC(u-NIM6g+mwDjC41E;+oY(iyV@o32`=_w@XW-PGb&$WE z-@kCg)uM3#YV==XjcYIIuKPBN)4V26Q5xG>NSnz$1%sz2OZ#XE#SHn+o>~`9N`gsP z+tv?9?Yj+2QRcIh)tr+!;A>LY$XM5Nx5{$mg z|5A{ivYdQ-?uM{7kF&y|xy$JwF+%yi6n%kMi&p>@^cB}@8sjqyefBfC1nTcRHI4@h zbMh&-Qmp2f^YbUJIRA%^SUCSToLl&jLSHZ#bG|*6^4qav*cd_%1wg&m`bxk5RlypJV1Ga`H^SW8-f-f|Xa`~M9}5J-+T|RXepuUrUTFV2Dq=+IXx)VT z(F6XA6!Yt^D6o-HdXEenCEwAw_96?GQ`?Y@Jrad|hp|V#kY`eqa=(YRdZIMw-EHv} zEE@e6*{Q_`{AVfTsiC}f;NbC%{YwmV?^b^b^*dCc=x6`#>Z&brW!_7iQrlcHbz;+~ z;!H)Um@+Q(X+_nz(DxO$RfH~81)2tCL451PeEk<3`+9WDzxbl!hj_hX&jW*|Oq##^ zu9Yk5CeK|_Q*`HV?k22xb63pGTCg;$er48(Eb#XF8M*TYu1?S` zpgTa9baZvOvG68haDzY-F|kiN+(00%RpdFwly!8|fiGyZ=nz0JYL90NkL7zDj1OPfqu~T<|c7V2nUW0R`19TUb zr`e(?pJMY20PTZqJ`wbHpo>8dgKhB!kIt$~{EKS}SO>S27PG^AcxfJ6#pjlKSruPhn#p?cM@lo*y~p_% zrKz?oOi?@j%>47xzU(H>hGepIo{jboyaMefd@fpzZ$LYMKQ$!N;>CoVQ~2zm$wBqF z!-~^eJowB|j$&SqLA{YA74hy(>KLa*T`!DsAi42&19|od9-iwLuhC7uhBlw zZDpD4eV&i@I3HJ*ss0@03(GQ?pNAlNlRuC4TYd;_I{zB&er_9<$x?Ve+6jEzu)b^? zUotF@?c@(Z@;Ck}+IapyXh-tz(N5<{!!y}QK4f@b*21R`&%EO#roWzY>n_M5F z4VJ}FEQ<}l(y!^(w?e-S`l4SILXMaG--P~|3;Z9$Gt~7L`A@@d)V5<0vB+Gg>T7W6lIm1^I@0q6 zKer)~SE^5R6%@CgO z5~QMF$R!gevkm;-iCIB{R5iy`$TfmgEuwE(1SghZIg=t>lyj0Oto3K~tV4yi4<%x1 z*&fvE6_)8Bjj84JpzTJ|W;v{sNXv6Ui(=Lp_4V1Xu&+jw1~zUqIwQ<2dtl(8Q;In( zu@vK=r-!vZh@KPhjx2&#Tc%kj2-AWGdBaWqnP#2fl<5So_@Obz+=4ER`N}+!8IE3@ zS}Id7W7HAfpOabxiJbhEFusOVrk3WQ4U?7Y zNERH{Lj6i;`|$yl!-7sE$()v0V&WtdsI+{X8RSCqs|vIJZoyVMhhkIE(+Hj(+X98T zoU~rmmc`D|hIU>|yHH_nLt97YyEGJA`8zPPi~?;zp9*wkhmxJ5%;BawQmhPiAMUeP;=amP_1biIZck24I$t=L{9?xa+05$l$%%0``$piY*#p~~gV>9W4W#BmB^=iy3F32C8oHH_mT%Xnn`LEg1uu>8vIvDH5 zE@D5OWyE$8@My?wrnCIw=~~k#?RHOR#jdTp1SSvn543R4eYch+ic_{5DIv zER;lH-qt%QMjmCc$|u*;O#2UJ?!2vcB@I-DYBxe*Qps|WUIT#Z4X}|huvWTN$$S@O zUOnK~A-9?K@YT0v1S=?;YK=l^2Ed4J09y4DpxPL)te6DY(VfLV38YF4=@4$S^jyhe zY&S?%`qf#8#Sk<#$53pK5XxA~Yy)AD1VY`nbt8;TGZ5@z?TpQrY_*t2xw_VO$&7^8KVZp0EkSM>`T8K3H(ov6+s35r< zB6S8&m|EcckR&@&TS@Zau5nYhIKA!t|+N=Wn z)8@umnT}V;I^Rm=PvgsG<(AZwpwO6)@`N`i$N<68Z8BjysY~orFiqk%nUKv7%*t`h zAaR_4d4c~htAwTT{Mi|v??{|vzW{4fOSvT>%BRgPEYPtG%*y=`8oM}*F74v(i#94t z&j`MI_GIRNU`|SqR<7z6w_z)-T-77`ba{fYaaFX?IyN)!e)wwoU(o8bj;*wgHM8?` z2#o8dl`dPFylGqM&Z)_pwsjZcXjWGQrdGOmYH^}pV7-SF4#C(6s1Qze#Y+1?i+5&$ zv(i4$-2AU|MhA79$vp{HcpPOkG6+@~0^$B5gwD}WTa|c%VhNU35SuB*u!?&SO4duW znbyZ7J4liQNmfjvlcyKhTVj%4BuSz8&4$QDpWbY)c+)*(EUq&^qKCE8-N4--EaK%W zV50j4!S=on2G}2-J;dJS`mJEAJ+BkH%wVS_JZ(VYKVafX#In6J7`qbUm#reQA8oCH zc0PT%;VD9r^sv@Ml-Mm!gweTVffK=VCpnC9vDr zG;}8@i>!dhVK3J&>cz*@7pWaS{+s$bQ(@&ne!M=}`jt=*5o-6c z{MoTD5|e{z+6B$ISJPH#&goiWgXYyoYVr4KQ>SZA^hS@={CchCJg@at^Afdw=x69f zTAG@Zpv9}DiJE7u7GJA*71gXhq-7E@t>hb)^)fq}wPE~`Ww|DsevBVjR>3+Ww&fE| z?1jjbhALJ4kn!Csd0edMCLiNVS7r0Xt2}Hk53cGP+^e}>)#BTK&mM8;|PAZ)zmA<{fUPb}74rusIK!TmCWWWHqe0G1tjbakbP|7VRa zlC(D4%qMOL@W(a`i5%T<8^bRxyr8itHTK_mVJ)69~*uBhc zn3?EU!L7TVS3n!PYU00W;wd(?&3qZOJ4&Q9<~zgC?%_{C+iqx`hVN!Wdzc@AwxfqO zVrb8Dw%M!dgL&%a*=!zPy?G^mF+8_9k7aV-mQ3H-B8diT@hrfpmY~EdH}gqbK4KX> zJ5_= zoyvH>i03=VDP(#d$saQ0mkfDqHO01YJRHfs=bhzFN?mm+7mXnqFbaJhVwU*SkjGbI z_}<;)n3=;%!d{=>(DwYunv4Q?*kONoUoBe=d1o&fcZm`HF+<+-2bY%&dCwmw z-ZbQ2W=Vi;2F@WNm!tT~u<7{;@q@_ICdSfRlQYs;X#f}`pKsXe^^Jg*YWQeBDXuoO ze*QAFlMU@jV@8%6+SvkmxuNa(_4qsPY4ZB$F7BbT(0GX&uF4adfrCfHqab~R}Aev!@lQhnm*eI=cj&hxHlW4{wIyA zfV7LygdM}ZTd=tHTM3`CEHANx6Op5c0(aP=wGh9_9@OyYA}ysSF1y5$>F zWZ^@nS>%pwH>>8QlkZv?`QsyBvB>tvs!i&--u$O0itMo?4R4~sPu_?FeD#yXw%Ge< z6@U53GP_c00GCG2Ke>tFKRTqUr$DL(%ulPw?QI1&oh+RW%(e+Z<&R6d$vpv@=xn=x~U1fIPBa$1-c-vzc F{|CvpNt*xw diff --git a/Code-C/main.c b/Code-C/main.c index 32e7fd7..f48a16a 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -9,7 +9,8 @@ #include "getArray.h" bool rawDataWriteFlag; -int nRow = 500; +int nRowRawData = 500; +int nRowGR = 150; int nCol = 1; double freqEch = 250; @@ -43,7 +44,7 @@ void *threadCalculAverage(void *vargp){ while(queueGetNextE(rawDataQueue) != NULL){ rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); - averageThreadFunction(fileName); + averageFunction(fileName, NULL); remove(fileName); } } @@ -57,7 +58,7 @@ void *threadCalculBoth(void *vargp){ rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); powerFunction(fileName, NULL); - averageThreadFunction(fileName); + averageFunction(fileName , NULL); remove(fileName); } } @@ -67,7 +68,8 @@ void *threadCalculGrowthRate(void * vargp){ Pqueue rawDataQueue = firstRawDataQueue; char* fileName; //double pw[nCol-1]; - double **dataLign = getDoubleArray(2,nCol); + double **dataLignPw = getDoubleArray(2,nCol); + double **dataLignAv = getDoubleArray(2,nCol); int i = 0; while(rawDataWriteFlag){ @@ -76,18 +78,24 @@ void *threadCalculGrowthRate(void * vargp){ fileName = queueGetTabChar(rawDataQueue); if(i < 2){ if(i == 1){ - powerFunction(fileName, dataLign); - growthRateFunction(dataLign); + powerFunction(fileName, dataLignPw); + averageFunction(fileName , dataLignAv); + growthRateFunction(dataLignPw , "growthRatePw.csv"); + growthRateFunction(dataLignPw,"growthRateAv.csv"); }else{ - powerFunction(fileName, dataLign); + averageFunction(fileName , dataLignAv); + powerFunction(fileName, dataLignPw); } i++; }else{ for(int y = 0; y < (nCol-1); y++){ - dataLign[0][y] = dataLign[1][y]; + dataLignPw[0][y] = dataLignPw[1][y]; + dataLignAv[0][y] = dataLignAv[1][y]; } - powerFunction(fileName, dataLign); - growthRateFunction(dataLign); + powerFunction(fileName, dataLignPw); + averageFunction(fileName , dataLignAv); + growthRateFunction(dataLignPw,"growthRatePw.csv"); + growthRateFunction(dataLignPw,"growthRateAv.csv"); } //remove(fileName); } @@ -105,7 +113,7 @@ int main(int argc , char** argv){ rawDataWriteFlag = true; period = 1 / freqEch; - invTimeBandWidth = 1 /(nRow * period); + invTimeBandWidth = 1 /(nRowRawData * period); firstRawDataQueue = queueCreateEmpty(); // change this for create empty pthread_t rawData; diff --git a/Code-C/power.c b/Code-C/power.c index 6fd69d1..ea62528 100644 --- a/Code-C/power.c +++ b/Code-C/power.c @@ -11,17 +11,15 @@ * @param powerArray array where results are stocked */ void powerCalculation(long **p, double powerArray[]){ - printf("data in pw : \n"); for(int i = 0; i < nCol; i++){ int j = 0; powerArray[i] = 0; - while(j < nRow){ - printf("\np[%d,%d] = %d\npwArray[%d] = %lf\n" , j,i,p[j][i+1],i,powerArray[i]); + while(j < nRowRawData){ powerArray[i] += pow(p[j][i+1],2); j++; } - powerArray[i] /= nRow; + powerArray[i] /= nRowRawData; } } @@ -33,7 +31,7 @@ void powerCalculation(long **p, double powerArray[]){ * @param N number of rows in the file * @param M number of columns in the file */ -void powerFunction(char* rawDataFileName, double *pw[]){ +void powerFunction(char* rawDataFileName, double **pw){ long **p = getRawDataArray(rawDataFileName); double pww[nCol-1]; if(p !=NULL){ @@ -42,8 +40,8 @@ void powerFunction(char* rawDataFileName, double *pw[]){ appendDataInFile("powerData.csv",pww,nCol-1); }else{ powerCalculation(p,pw[1]); - appendDataInFile("powerData.csv",*pw,nCol-1); + appendDataInFile("powerData.csv",pw[1],nCol-1); } - freeArray(p,nRow); + freeArray(p,nRowRawData); } } \ No newline at end of file diff --git a/Code-C/simulateFlux.c b/Code-C/simulateFlux.c index 9c0fbd9..c0183af 100644 --- a/Code-C/simulateFlux.c +++ b/Code-C/simulateFlux.c @@ -151,7 +151,7 @@ void *threadSimulateFlux(void *vargp){ FILE *rawDataFile = fopen(fileName,"w+"); while(writeOneRawData(rawDataFile)){ - if(cptData == nRow){ + if(cptData == nRowRawData){ fclose(rawDataFile); cptData = 0; cptFile++; From e06c7602e0dade3bd0d2e88e88cacaab8de6f9ea Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Fri, 17 Jun 2022 17:38:53 +0200 Subject: [PATCH 15/35] add timeFile + ignore last values --- Code-C/Makefile | 2 +- Code-C/average.c | 1 + Code-C/getArray.c | 2 +- Code-C/initialParameters.h | 4 +- Code-C/main | Bin 42008 -> 46784 bytes Code-C/main.c | 6 ++- Code-C/simulateFlux.c | 74 +++++++++++++++++++++---------------- 7 files changed, 54 insertions(+), 35 deletions(-) diff --git a/Code-C/Makefile b/Code-C/Makefile index 44a0a3d..d9cfeda 100644 --- a/Code-C/Makefile +++ b/Code-C/Makefile @@ -1,5 +1,5 @@ CC = gcc all: - $(CC) -g fileGestion.c getArray.c average.c growthRate.c power.c queue.c simulateFlux.c main.c -lm -lpthread -o main + $(CC) -g -Wall fileGestion.c getArray.c average.c growthRate.c power.c queue.c simulateFlux.c main.c -lm -lpthread -o main ./main < ../02400031.TXT \ No newline at end of file diff --git a/Code-C/average.c b/Code-C/average.c index 8fef657..317acd9 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -17,6 +17,7 @@ void averageCalculation(long **p, double averageArray[]){ averageArray[i] += p[i][j]; j++; } + //printf("%f , %f\n", averageArray[i] , averageArray[i] / nRowRawData); averageArray[i] /= nRowRawData; } } diff --git a/Code-C/getArray.c b/Code-C/getArray.c index f8c05ef..bdc7a79 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -53,7 +53,7 @@ void printArrayData(long** p, int N, int M) { for(i = 0 ; i < N ; i++){ printf("line n°%d : " , i); for(int j = 0 ; j < M ; j++){ - printf("%d , " , p[i][j]); + printf("%ld , " , p[i][j]); if(j==(M-1)) printf("\n"); } } diff --git a/Code-C/initialParameters.h b/Code-C/initialParameters.h index 5403af0..12d1e41 100644 --- a/Code-C/initialParameters.h +++ b/Code-C/initialParameters.h @@ -6,9 +6,11 @@ extern int nRowRawData; extern int nRowGR; extern int nCol; extern double freqEch; +extern int nbRowBinFile; +extern int nbRowIgnore; extern int cptFile; - +extern int cptValue; extern double period; extern double invTimeBandWidth; diff --git a/Code-C/main b/Code-C/main index d9efec68aa3e2c7f0b12ca0fa5ab95076d77fd20..e87cfdbeb8ec346c128f09a750fee30663244d1b 100755 GIT binary patch delta 14879 zcmai533wD$wyvs9bt=82JNrV&!j=Fb0c1&#U;+dhhCql!00JcAR*MuryH((e)rQSEP^*^pq&|_wjv>K zTiBacnFQZ1D7#CJjL=m(bk&Z9tl*(o)+)Qw>L&{AV7iae!?lkMR*DV#o=|MBGClf^ z@uzH-`5lEP4$u1gcMmRJx$fd1rP-_0ni496u_lOg7BoUikjg8X_nK!ZZaob{+!-nK z+Jo=|IxYpdGx(0h!j48GR5ba$GXOVSkie_sZZe4Fs^WGjz#ugM?+(Dz0`Po2Ar)A^ z0K7Z^?;n82mkWlHlqJdS7o`RW6hA6S83DLHom@IR0Oz%%+vEh`l$3Ghmx~q!rcR3s z@m=MjNdjXU2q`Y7yBN+e(d75Ca>0k@Ua%9IpT2iwN5oS_ceQf<9pX*IAL9HQ#8U-#9pHQm@op;Ju6ho;;B-*@;Sekc|8Pgg7FrxQpH;s zakH>4R#2sN)pKAZDbOy}Rm1rq#8bs}t>=6{;;GWQ$~m7%JXKg%G3O(Rr^4#W=e&h@ zDyXjEoL6Q_(z1H+{2KA?wAvNN7rAQBx^|qqR6J)!ojN}Sje}W@dZg+Kz%cJgxoJuIn*Xc;9A6fTaFV%_L>X0octq{+Ib z=IdO>9U6)?c}JipZOSfn?Z}$~Ey-2;Rkh9K$(sn=I}C&GU4h$C^?{k}y~wPTVdOQ> z1me95J#*C-UP2UKCWn8@WC>B5qQQ7Sy#`_3=q*C9B$GWBl_zJi&ZsH!P?jD&S{~ZG zFnWS44`EF)cjBHLd$T;4ZH=9X`>U}RQ>RIiN4*jE+D~eadEX~*wT0atyNd)d`YP>+n+G7FU^ogy=kf>)fM|(p2EYf+N0>>9fQz~E37@CPfqv0Nh8^>alo~sRdabT zR-~9miZA{Mm6#urP!ZMC1ckaY&@pIE8*rZ71^mbJ%+D-~1Np~Q40X9_!=xHbQk zLOo(pCv4hXwI7ht{BG*%nR=IJVfWi_mSQ?wwcEU|+D)CcrDtl3I*t`y<4eEM==-X~ z!tUz}&)m_l0}@Z+wd)Hz9Qzhv&g$zIvfKLH8TnLy)Se@wZJEolw$&SQ#plByWw7!j zGus|-v;Q)Q51nJ*YSJ)_m!%}(^~KeYL>m}=LKZQatQ6s(C6@ZCb2 zE$ZoBSYycVBPWAdTJq$?D`>W$97&oZq9(wcZB+eD$A5yt-H;DJH?-6Fl zwhj^E0n!>LwB8q5r%0=Uv^<4gPwBZ@r>F3otMN6Nv@lP%eb3aCCHWC#i6W!$qlM)- zvV8jz_kT(FKM$w{l}lO2t%NJ&p@A@NN@`~lwx@=kzwZ@I*}Qu-zACvk-k z-z~)VlXwstkeZgbl%!QcS|+3mNqXTTTb!DfIhYc`(&-t`bTZf~46MSyMh1^uWY47D zkoY;;Eq4j=3t~I^D~NZ>MYgKn05&)+&7SfdAC_(!hbT5TZRqN`Wb}YA>LZL&$>=#l z)03}}_UqsFST>_wub23a3#q)!cWm>D5sM{r`lIt z*acjkn2R|y=7p`U+T$%$@~_dujZ&N9g?v}5V<)}(c+@{b&tv}+?t|NE-|(nEqm}!H zWB*i0QS1v6h~$-lcrTD8o)?GVN%H>8hv^MuMGuh432yFQ$aat>2@o$7ZGpaHSnP69 zj&-AB$a(ECA)Q4wNVtWL0TBK>o(sLpzw!BYwQh2wPf0l>DLmls6IVryTcP7dr#AI- zdDJ-4sy)JY9I@K#^4@|o?{-8upTh^G&K1dH(V0l!w>!V)@ejD_N?ToZ(>0L?9uT!3 zdf$TVFzYG(U#l5 z)gJi`M}FZO5V{&`@7Yxjm#(^diEs$@tGMKLS6xvJGITBZ$aUl_fOkAnt%5n3h!Yj6 zVK<2PBO0&T!cN$s`?-Y|HZAwK$*pJdu9~`fABGE6=6d5uw^oZPG3I8vmd_CIqXx_2yn&#NA zpa4ATvC)!*DXmpsL&KxKqO*}|Gg^mfy`2x`1#_OI42f}{!r=mA)eV>3=u)u=<^2Oi z!Gb!!-4nBnJMxaA)wgM_v3L%h^ZAacQy`!lCgC^M4g$ zWKf7k!TUq-2;2BxDz=@gXL}-Cr6Y+R;j`-~g8SX;^iC``I`OJ;ZlO6sy8VAE!k&xV zEAJH#`7g0C^PO&8K*)7^$Vbtsxrnv1b%j})Zf$aRSsN!^yp%-;mA0?*!OEFFa z?bo4pK<5YH+0+S_9r}alf_M;7c^J^V?^wyO?e1+OP=~bYFWs>hMu8fy@e@KXKSQ~n zLW*|}wrm>RZ+f!2TZc{x2$7C?w{`Z+-ZrWmY$dyvW9eZyD@I6cQdWlhyWz%OTkY_u zZQ%IIc%2$zxrS~(aa0XQs`6!r)BY?3plU4QU3M%wa@i4~S|IeOJ0V%-xcK&E$B;JC zxWYB(@wOLlsfPAB;NmfG^;@4CC9b{<1P=^60jcVa;|UOnB}6sPds+S8NWBijQ-{uT z@kpGl{o+!HUngDf&FJs4EJw;t;-vb5xijkWp2MqG!A;X@KPf1kR(rKzPC@OpQdixu z1AuRwG5Fu1t{oRN@0*{q)!Fwpuea5kdfjSFcMmU+t60JC*ygg~O>$htP^o(5n#w6F zt17dW+G4^R;qvB z=j%Yb{6jpAP_FAip8#Ll?(@ZiA9dX4%K`lvvps6VMczmU~7c>Xdf;CtMS`WGfbT?K~BWMlI#D~Ms=tM)(*xBm_DXs4_%cv~n z(7SBhs6mNkm=ik67#DrOXl-H<;Ad0wD=3m4PSrc3cySnomMN#yT$U^-|bl~h1Eke8li zV{((t3(%ClWLtBSmC`TS{M5kVK;RrqE6tb^A^ei`eI-mmCtU&u-( zxaIQZk0xZxGJZQ!Vp)8CS9*mIQw`pSCZ*-S^4H}*{jy!cvshxO1y9Q*?E5>T=sR-) z6}cjL@oiSb8KZ{@3DWq{W@wC~-r?F{Xe0_Be+oA=p2k}>UCk;br-zskZHN~Q5aJSc z=O1_yx`TsoERr}x9&we1kb~wE6K8})FwECXbm|vWZ{;WKWO>)6g2c}2L@0p(UIjOEObKy<1x^$tkut&K-7#%_V6n3opvaSV&Eq z*$BqB2RM@cyVl8Mq#7P_9TEsCAr4GCS^N=dfc=c1)FRE1yD6Ftpkkgk&Ca9z5B zFgsReh%^b2H2G2Rwtt~XUG&d^!ags`G(QAb31`lkbKG@kn$P1V_c2%N1;RHHn9EK1 zunk3ieG;fe`E9Jc6>R?*oGlKW2__pyU&v;J7J(Tn7?-wNcXkLuy28+vB)gDSX?N>V z_dP-?g`qEfbuslt)uteXs_o=$+H5TcDa#o1%X&TWEfKif^awPqf92AC)K(f?*1;GG zIp#VK6qJU1TPsOpZGVE))KF}OW9or@DxQ)23>h`m%GgYQhE*XE%>aVrz<%BN926;e;!tq1Zk>i8U1`DK{mt zmg0c}La7+LIK-5k|Er zX-+tmomN@}nzoH35q27Crxf-UaVO2z0i=j?pCA}M2O?WC$na#cn3gi@>!kdNjo9f* z!wM;ECjoDnALuX4Hu|k;lr3EStpvk*4k`bgTXSQXoWEdhXIUk&^6RXyB(wiYsGNpr zn5nHm__A`V7Y!@x{p_BS0eNG{)j^Fs*Yp#L#s1hMF)t$a!BjoAog7aD9%edJz^;~L z=1wIKjpl6KdbZzskKej6QCP3w){WfyKmnV7V_)}FN_{tv-dJR_Uo}P|TLVMzcLAm7onD{L`M3x?6m56|q(X@nO+(21uNuW7a8Wva_ z%r>X*Z0f0qRHH|dobUWs*HbF9 z&^ceuNf%>2$Kv3|d7EK`ZH)UDy&kUnkNlXmm!>StCcR9vLl0sEmzyg6K{AbQix`=D zjHLliQw_VQvy?_3K9o-`#+CPEsT7`1`){{TF+PgFg%=_h6_K57xQ zQ=p?IM(;%1q^YrR5lV+AXP8ARL}_YIV&uYXwwEE7wAI8oV~$Z9>Y=P{Ubs60>K2Rj z7nn*Kje^C>8Ce@cjEysj_6sp~&X^?S8REiCGZ4bQ04Z3UHtM^*i0}yBR%q|F%5g2w zF>CZ(vC!UYZ$uKd5c_ceCRzD~mClcK+xx)I7AAarLv4#_)BBpu&f8Y9pr?XEvVTHw zgxx{@G7#Pt<#-lS=U(9QfzYW)<%^-X;rdVzEaAtY9Wf5t@_|&+Kq*G@C+cHv>j}=U zh%6@Y<5rpwrJ+1(fPTVSt2+_$XQPC?3=!8;#1&@BEhj^0@gp;ua?^e2Y6N$=B8f~) z4TrZ!UIi$xw2;iyaL65bw~Ci)d6nfqIZ*G8TuKV7?Jsfu()P#?DMVHHQO>t-kNk<` zYwUYz02|)h9@U`7rJoAuid;pV*r+F29=U+*w@1+YU;~VLaxmADEHvS`qE||8*&Qpy zRZ;D_m_D1+6{(W9J$*!%`SZg{XEjRKmWxJ$#Cb}W^AVEuYq+L#IUg!nEy(PX9zMoO z8O>EGbAzgtJM=5!n6?Pec|3V&d z@mC*ExoIBTupoNKTck3H2QAW7%1IBG+;kMeh(vT*o)mMGJ-490vN)ZcTreQ_b)+rl zaVuH3njwr}l^Y7HSIKW4U-}qc;Uur$Q8r>>wBkr-Qx_(?-ytW1L#fC<7$~f-(}!1X zdKykd9S+gU&=t9d42J4#e&i1nB9pTyA$Q~<5|6NuWk|ylZgb?VXvrgWg#&IeBd-HY zpcxtzf;uxx&RfaM%F{5mw)OrrTpF`1N|u+h!Hbe3%@i=k;?k(Z^39Qwnax`?WC*R_ z5UB-z^_}tuG-;>oc@q)6dy@TSQHgy2-HYQV(C(l(ZS*JzrQJb^;B7hsqACXlkfvTM5@3&E%Rk5H(ETw1KD=(WVVV zwTm{rA*kU(|18o{9lRa(864aUzZNN!HWoF)UJNdjHWoF?(L%>*>v7z0fX1V~0xewD zbGXSiHO!bnc@v3nve+Sq#8&nA(21^a0KzK%L$5x z*%n=iCmn@yw@pNhP{~dmkYmjzKw+i~UCT;uB62)j)fmVDLK1)sH;_!SOa!viKynC4 zLbN@E@cvIGs4t*;T`9Z+!y~WZhn?8rP{Vam5UdOtL+$vCYlMqazzjzerb}Lvv>!@% zdvV4S`+LXlIa}^bCw808mPHKIU5*j)u|%-q*BNh(_;b4&ay~V*66UE{A};^NfTrBk zMB({XKXo8!(5i91NER+z3wWHYoqX$`W?jx%m-7vh{w|y>@k;1?pV%3kb>sbmqR-^- z2};A#h@@;7;i8eDEAnbqvSA?I~=GxG~UkSCKpzX=y+yYFNebd9Kt@!?=LEg20n%R zGnR3WKk_vg;*?&_QhPf~Gn}zsDr4E3OWe)HODv}A?w^<-N1--V95u#Sueat}r$s6F z0HIms2sskH2pbh7v9Jxx<8sN!3Zw8qBO7#k0d`rQ7DcMzY0|W)Z1{D+I+}G>s%$`I zb#vbG|1c$Tkrju8QPR|?KzHG6&5FKkRNI;mgznNeNLFvfDQ#g;?s<@$AyNoKO`@#Uzbm>sLp!N$a!ZF>K@d?JhOIO226BFKS=yIW_ie)n2U* znx_s}rbe}?Lw2Z{^=ig=wO_S5WO+|JbGe$)0&uySew#YDUL81I&3#xcC{riZtL_^( zGb>A-SEiP>sIwkcQ>xXBm(?UKOO3(5%xpD5Tdu|}Q^(I!6YA9)l%Y{XuUCe|5S^g& zF-k_XI*>-jw6;aHi?MNM*TnX)eG0u!#-a7RBPX+1Z3`3Fh^c8&|Gd%0}E5 z9l8`h$;?=}oNd}REdJI_YbLF$D%iNO;&y5I#&w&kSCmv#p%;RLSPl49(=yY0KBH+gK?rgT~BFYi_CBD6LykU0FR!s__5( z!>#LU=4!@IMeOUEZ<|lviP31(15eO# z;{`Ze*U#2*<3-!R3w6A_Kq$HmNBpsj0PA&ufp5?aYINML2e?be>x1xzbo@XN-mK$? zbX@PSReD<&v=y+#yA~-2r?ahhWgGvAK@TQHC%Qxh!G_c>c2x)^Jf!$V zAD>A%`1NiTaQfdG{KNuHLw|#=KZYHz%}z8vN{-ZH)9;v0#2Qt>68B~$27l)|!JWoS zwhDI3-fXv?3Ldfix~jWw?tP)AvyPM()3u z)8mW?e&latBRnZeRvIhuOi}JgWe<9?<^_LDeo+rx)mQksLGS&WIv)ISt{r#;MnxPy z>BujxGi-KkT*6PfRq$6D3o?n5ljuH;KIG821~2OIz-gA&>qDt0A{7CrAq##nD`U^^ zi%X!dKO}vizsSS*fVzQVCG66rms5q*_*ix?i>QlpAEbzM>d+$!9Z7ngaAabfr;U1f zQ}-79OUVhYk21~|9*i+L%kg+g)BPLxcfybRS04g@(F1s*g`+ikM)XchoecghC0WNG z!s?=HsvuI9jyv_$B=%?g3eIs|Nn&gFTN38#s=?>vwX9-)oO~zlsm`F`8O<8@$GPu; zAr(SuQ0E@yc!FfS3mAjl=8BoH0?ZjM=%W>j$66%{Z0PB#3Va*tcft18HXw^>HKUV;hMhQU$zPmk!hM z;NJ%(kX6ELT^jt(y^N&tW`6f@&4+c(pVNioJl+4ZBprPOQYz(~ph2Nm6)I)p_08zy zC%{wj%V1Q+CA28-;IFr|OA;RZQ6fRdgMT#`qT|2QYq3PnZxoXo;#B%t(2wGcSfcA0 zzsW4s^{RnWrsYA?cNeQ@h?DPYzP;g_5Np68i7md*>!`S`a%08v$|;-HE~#F*ZY`T~ ze_2-o=RNSUs%%JMKRujfF?QMN5p3imW1abWYC5fF zw?C2{VH}zax{v)0sBvU6=pOdtBg4b=b=OwJMjjYzaP38GV-MF+#9jcWABZ|;vCH7f z^}xk!$qcmzZd*RUuVWVaXSvosziek3M1}HbrW+NY)VEKnW z4Y_G->tkcWqN|18d+cwIjScI(LvSy$AHm)05nMjYeSEB?g9$Fj$+kW|Cd_$IuzzNM QgYd7<2yUv(TK<^)ztxY4{{R30 delta 13908 zcma)D3tUxIy5D;r_IYs5;he+a{RTx*5zxd}qM(vTLj#Q>Q-c(IKL>m?)ltzBkpfp! zW>}cc&72-4)is+Mt#0C6E2_B;H8qiA1^Gg&xlCEy|F_oOhYd5o`Q7#Vxxe-Ozvo)( zTWdc!p17p!X;JFal#(YJhW^$6e4@mgP9?YCWso51W(mGOEesa8PK|bEh+1-lyk%xz zy2vE>RzcZ=a;QgBZPQfSX0pTbg5=VXLbE^JMya7~V?&fe-L^Lj+o{Y5yJ<)81$kK4 zhClE4=v>?4Z=dWeOgq!uq12e7i-fUN5a}GKM~aq8i<)gP`9+inqdG!qul<=1utuDc*XhlcyfAcCukOP9eQ$$)no@MHs?t0klYOEKW327G`4 zk17-lC5d_U2SiB*ff7I^Db0XuOUb2K2AtQ8W;51+Q&M`%HQ+R8(GcHf5a`Q5!a@UX z)6|KS7;vp7xwO=P+YS0l47kI9uOXbqPgCJE2sRoFLJat31MV{5I}EtnfY%#vj{)Cf z!2Mo>pvfQzGvJ2|c(?&SV!$H}_%Q<>Wx!7u@MwXH^=~lM6E*~>lI`_{TUF?X3y})A8wb2`Y|3+|C}3t#_*TjFqJ74tZRD_r0|&IVw_x>8)egi&5#p84!)j zzwX-QVP8dMII2a;Ew$>!F)T5qCO6EGed3xjvf7Q4#FDs1RkrX!d-}U?qDr zI~#M)fY-9M05jWR)9R~vpNwwrrcr%X@2j2PeVUDn+u~k{8m(}pwN&_At4?&B`kr~> zquKkh9u^YkF{vj8FPvUd~>O{pBk=EskAoc@td4Tdyw6niRuSJc59`VHnU*ccs? z|IXfzjoapEr|J(rXcT}0wCAubl;xg_pn-y|h3 z9!$~|LK-WiNhE!-3mMercl&B{t*75E#+LF`UregG@1n1!s{IdijC5Qi6;yQZynYMI z@8j&la6SO(xVww3PM#FApTrLeag`9?Lti<}p6bHQx3;eh;1M=CL0KwJ2|NvUdj0QCfzu=(Iup zBQ$L_ZDK=y-E1f|TPNh(Pq?-%#}j~WU#ky&B}+hJhE#5=$QHjc?tteFa8d zTYSByRX!oNR-aIOdt9$hRUuf(dWM7tqqB-`X4_Y@grN~}t*$puoNTw&octFitZ-0wO71^=l3hgq=E><*Y!W5%lQyKZ$oL^tSK zwQ4Z#jwj?Abp<-dXfiLTe2xPrQz zJ|txOL5z#szDbGGP*%|m1V92YL%!k+GCkE%LDs1Lqpnv~&mh(?JZgSVYX1-!{X#q< z_^v)7CeeAP&D_i9dm~(>+pQL%F_j|tcj^)Df&owCHT|Bf@rnN`!Zy0W7)SNm#omw^ zhLFp(koz&H2*lcUqUwC_ROXgpE^)xAL0THM>h6I!SKs{uy>N7_qRotDsa5Yapd|ur zKb8MI&1q*Hs!mV-XS&nVjZaH{;diViBX!}c{Ek%I4!BJ_H#@~4*?}rZRK?2tR!kc~ z@fx(7ZVQ8O9(p9T6aJ=w$Qb%k?%l#j}t9}Ar zzUFc}H=zTnzJzzQYpw++uem(x{{X91Z^5;~b>;Lm*U%Qy_ygCxgZHZq+AjhZ8}{eR zJ$}rm`T!7|sCXEs?f4;%$b_GIdIBXq=}Tl@SB!ySyj(mHPl5q)62yO?rRo@TuBS)5 zBIMm(P?zIRkfglZrq`U!E1q8SL*A`MU7XFS$eI~3N=ZXEHO-MM+; zi;~ilq_Xwp>&h0FPc5q~%UJlU^-}X~xlhV+Dzi@>WlmibENvLZ?wXwKrw?A42zlc3 zo}O0p>%Zvf=>}~AZ35li-qYh&BxwXWKx>fh~~Dm?@s61OY*ZZ{qE&;_~!#gl~9zX+NO zIvf>H3VIoIGw2o1b`b+R_&m_!`28gOVVGlBhx{LVqX`4?gU){+6KA{G#rQ4bD(eG)I0;)fcJ%1fi9g4V=O?60#Uk5L1c87ivrHb- z0UZRM`8W1sen!f4to3$40X1bak2?_1_fUJ`JezS-%m~t;RO3(g=Zu3S64_{)JeKF=e=$^gALZ-)5xL%P%=^2=9jzJL(>!d6VQDeJHHBWKvh{27}q>f{WtP^A)kU1Gpz6m6y{AxXoylg;^2>$IAI-{?<(Vu`iC|HMor%0|#BO~QYLslC z<*v?UX+^)2i<##UFDq1n*o7i@@HoxoM46m~(vhG@bMe|ILT-p8s1Q#NB60IyW*68zkD~}@A-D6|7wBR(cHSJB zv0d}ZzhySm<@g*r!AuSHe(M@ZPH;qW?wH?pJ4q8+#Qd@D zWz=<;b+>l5V18uOd=3uvKwoJn4C&Hh{>19$$4~f7Bqv#yNpgtuc5q6=62ewNJxH1Y zTdTYuyyF16l(S*JzMh|M{$Id~gGDX4)z8p1AHhWqH}e-tn7u~6(B#G+akX6L(iG|| z4L-{d)U_ObLoH`>t#6Yw!eK@fQ$wLyQmwRrs&yLVHo8QE4W5gRsiDLy+21F9yIIS~ zFKvf}n%rnP&qb*sP>F?mwvQusm;*6zTn|AnNOEHLX@ma- z?r88Ew0c}i8xn07idvDav}qJ}^SoTXhGT7JSjs8pXX99H>E_!KiF2BDTYkHMf!s(7 z=}d^=NtIZ_xLTT9cBturnnbfO0k1JrlB<>HEN65 z;j+8^J0Vr%NIG_dtov}a)B=f;L#!Wxu^s>;yKJ=nk~J8XvfExxed`92c$~CEZprp0 zaep%V29P2SLP0PT7a|9zkl~*a#B!F{UnAwS4r0rws%-ZY@Q(RxiZJ6xFuHPM0ayn>s5g>DGW>?Z{f)%hiewHZX~{Ur@nqmO(~%LZabdbGk38%#uSjMeE)0+5 zsqcvq+Do`LJxkh5O(U4RDBhn(6Y~I%_diJ@9<2m5xluxGiFgmh8RH2L_1Zu@l`By# zJ9-B~3G9dx2Bnhw1L8OG5X+OeXNlj0Da4${g%o2PWw9|@Z1Q=*HqK^jfCl!2XI1$I zN#3OUH;iGkmVx9BC5z?Oa#&=tu0;`I+{+V<<35H+Hq)9BEV(>>_8dy8RHcYNB;tZL zUJ#61fl!RQR2#RLIpLu+5cLu{Ddr=4Es@oiho|%DE{->b6{}vT8`*wGM$^o*64{64 z;Wu)FX|b9?Ft3SeL$tZ$LlyS90sC1r)UoEe1eRP8p2zLSY5_}vpC;#H2aAckRZQgA z95InT?oNy$OLG?*$~IIa+J=zNbaO!hd#WPb&wZxrgAhK`HJ^(NPLlMTyq{6nSUwT@ zCSMeoO|gD)eb!G@tfV`TdhoO!Bq_N2TIGcOFm>!ipAL=Qdzf%o$BGtb-!KPK)1b)d zz)Xrd6BVu4;KDQ{>^?whkh*kLrKEgKT0DM&BCcT|oT~>c@m_L*HaoBjCa^ z0+8DlY|Tf>Sr1@xZ4SrlkW1EbV%*`Us1J1uTfHpA9}e~4VEZpHm8@~Z*f}Fx2N2`n zjAA`YjFU4aNqL;O5K{p{I8%{ku-idncaA6A!}|)It#&!`ICRX`6SxM`+3MVlBpgA` z4*{5DFn}wpNr$j#MIDof9Mr}@{(YZDGj-ybQ_eH1{Z;t8k+o}3y5Fl zEaUuUe`qrWSRS&L{z`0WXum)7ds0~8+=+;$hR^Qz9?`iO8jjbhGc~{>*@F>!i>_di!c_`* zyGky{YRTlFPfc$82#O-55}Ov(J7q8%u`*%aWU{-(b`Ac&9VGN;2?9HM{SI5T8V74p zcsv4PJ*3D(WHE(D+NoKT1}xS>=!wB7s7*GeGvXZzHpD^|Wl!Zg zeu=-#pf5Mxh5{2sH&iP+U+7k{7^bngq5n;}q;uBPaLgZin8YK3$ug+nkl!471A6jE zO`*vz7Hk>7Xj;Iah9mfqk9#Fq*?Aga`U%C~yLcMkS(tfs!ieGI$)zpJtzl*B)=6?$ zZ)Axw2@n1bTBe3vbLfvMD_%Wx*l6sdAgKT@dy*gaJ zon2oY<)>3XaXaYnx6mn|cz9n43Zmy<#Tv8-5;L6%L2~4~=&RNqN>zowcKBA!qMwIkREy~UH{n)SGtB%Jdg4|coUuGj0w?d=$mtju1xpq> zT2z-a9h`-Z7S-cA4ypY^T=2k*`*RU`X!i5C$PU$Jvg$||AxO*T`K?)wq)9S+}{b)<=q2q0-X z5=NF$@Vx_wh@V7IG@yD-$+ZVFAur{R8aHRa1sZ=71(h5B0~77u$2CI4UAw^jF=yi* zf&z{(PaCltT)*aQsplJFH)(81=v>X^Xc1qMyx1|zwf80L7*{UoPqCE4yeu6TH2$Ux ziX#*&=H`d?lvL87E#avmi>VG;7o2b&eu(GW7jxF<*-FxBA!MmElz6C6WgoGA+RYSw z27g*t8Wx4l9}XilJ~g1;O_F@4_Lx_S#kWqQim_7lxQ>&fY@X*|h5S^g~W+{oW=EZ7T+9P`HX4zdJB7TW9WcUk||`o{YLvZ`*g1oh1!$l>0a53 zZIUca_htgIvwa&P@j~dZ%N{ut;qfA9vi91r+iKzpOO*wsz(;q41#<%t2!!4KXl`$wx*>tNMlJ+Imt zRHu^WRUOt!)qAt*2IRRzNeQz)uSQ#6R6|dzwn{bS4mGJlb+xF2s@1f5b>IXwp;8^R zxVN9SSRHsA;9_;adNs9PO`f1;KdI)FsFUi|8+rfc47IpKEjq5={G=K?xl$eYx*BE8 zP(An;o~3##)UkJ{;q~emWq3HzWIhY)lwq=J6SLqjg+BSU>fWHr#Ls0jY9`4l+gbC7 zU9TonjLZslCbJnkuc$85GHXV2UhOfHnzwFU*(P@Nq1donm#ix}!;o@Vl6f8;ppq?+tuRGfGWT7(SwLL_arlgK$azk#S#x2uc6NZeKhSUp$S7 z?k7s>{+D>Pr2ha{XtJ9g{Yn4HG0t_~rr;{`6xrOzGVy_L=VQp8!u7Yj5KTW*!}YgE9naVBQZ24ucXX#FSfdGae65CW)^Mj5 z;6V+q?}zWx@TPuvvxXnhaF6g~m*`Umji6-&8~^wMrC>bU`*^1Qb8Ib`6hExOJN);g-85pSqpU8~q|6Pr~ zK)Mkty@-u(%!pZ$EQ~cD(#PCsl;kL4TN^X|8jOcC-hR+r_y5dff&!(epCbA_DO|(* zzc($U@hdK=|JF|B`dTm$mbK6A>3`#_U`6{9mE}on-M*U?eDgTIFC(x22h~@!z|Z32 zJGDvL%)hPS{l7D{vb9e{Mqk#X1^A0AwLC$jUq~vu5jWC50Bc3_*MIY70jJf_pB=S; z61@b{)bxLuDbVn*LPd}-v{-j&c>m9U^wJJhcKbe0{3cB&Gf5at&}?gfC*eD~*S`ln z58Z_Ib=5R}OE|LBpF{PU`A?3cWV3`KCW5zjIUXfh`xOFz<-@4@f44dZeT+6#x`No$ zW@z)!&8|Kb8BMQ|G#P+WxQqq~kjqv2`&X5vNQZum*p@WAcj zby_J5z8MpC(iUsrHVzoyy$bHKwSji)y+s=q94Fj{cw1>n3w z%UU%1I&H6=)KutAgNCcUSqEOMuWESzFVYI;l}{&*VrsJmksNHxfk-t8(iGYeBW~36 z`hOcN08VvKs$~k6x4YPv2O{NF&Hp&?O%S_y=o|L8XNQGpzqaV}48$CV_pp}^M>n56 zY?0YJ=9r_;HL1$}c=q&58NvDicQBKE`qCJ;w!8FQR?3o(W_tAJ6`gKlWkB_(6`d|& z`;TVX#3Kp*XB7MN=op=A&0#Uk0j@2F%>{Rh7)IM9wijHXHmY3qY4aGj#&zckbQDW| zIm@PvKRu7leR-k+vKM4d9{cp=iNPOF7MkBCvXoaw+upcau+OowSH{?uYNd5E+Yj#L pO+qHIFJBoGd~A#0+FUH<)zP;42EqDS*{fr0uDybr#`eFM_ Date: Fri, 17 Jun 2022 17:42:09 +0200 Subject: [PATCH 16/35] cmake and begin test --- .gitignore | 82 ++++- Code-C/CMakeLists.txt | 10 + Code-C/Makefile | 814 +++++++++++++++++++++++++++++++++++++++++- Code-C/Makefileold | 5 + Code-C/main.c | 5 + Code-C/power.c | 1 + Code-C/test.c | 46 +++ 7 files changed, 958 insertions(+), 5 deletions(-) create mode 100644 Code-C/CMakeLists.txt create mode 100644 Code-C/Makefileold create mode 100644 Code-C/test.c diff --git a/.gitignore b/.gitignore index 82c75b8..22d5774 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,84 @@ *.TXT *.png *.exe -*.csv \ No newline at end of file +*.csv + +Code-C/main +Code-C/exec +Makefile + +# Created by https://www.toptal.com/developers/gitignore/api/cmake,c +# Edit at https://www.toptal.com/developers/gitignore?templates=cmake,c + +### C ### +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + +### CMake ### +CMakeLists.txt.user +CMakeCache.txt +CMakeFiles +CMakeScripts +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake +_deps + +### CMake Patch ### +# External projects +*-prefix/ + +# End of https://www.toptal.com/developers/gitignore/api/cmake,c diff --git a/Code-C/CMakeLists.txt b/Code-C/CMakeLists.txt new file mode 100644 index 0000000..3511d88 --- /dev/null +++ b/Code-C/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 2.6) +project(Traitement-signal-plantes C) + +include(CTest) +enable_testing() + +set(CMAKE_C_FLAGS "-std=c99 -g -Wall") +add_executable(exect fileGestion.c getArray.c average.c growthRate.c power.c queue.c simulateFlux.c main.c) +#add_executable(exect main.c simulateFlux.c queue.c power.c growthRate.c average.c getArray.c fileGestion.c) + \ No newline at end of file diff --git a/Code-C/Makefile b/Code-C/Makefile index 44a0a3d..c58b077 100644 --- a/Code-C/Makefile +++ b/Code-C/Makefile @@ -1,5 +1,811 @@ -CC = gcc +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.18 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Disable VCS-based implicit rules. +% : %,v + + +# Disable VCS-based implicit rules. +% : RCS/% + + +# Disable VCS-based implicit rules. +% : RCS/%,v + + +# Disable VCS-based implicit rules. +% : SCCS/s.% + + +# Disable VCS-based implicit rules. +% : s.% + + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/auel/Documents/Code/Traitement-signal-plantes/Code-C + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/auel/Documents/Code/Traitement-signal-plantes/Code-C + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/auel/Documents/Code/Traitement-signal-plantes/Code-C/CMakeFiles /home/auel/Documents/Code/Traitement-signal-plantes/Code-C//CMakeFiles/progress.marks + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /home/auel/Documents/Code/Traitement-signal-plantes/Code-C/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named NightlyMemCheck + +# Build rule for target. +NightlyMemCheck: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 NightlyMemCheck +.PHONY : NightlyMemCheck + +# fast build rule for target. +NightlyMemCheck/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/NightlyMemCheck.dir/build.make CMakeFiles/NightlyMemCheck.dir/build +.PHONY : NightlyMemCheck/fast + +#============================================================================= +# Target rules for targets named NightlyTest + +# Build rule for target. +NightlyTest: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 NightlyTest +.PHONY : NightlyTest + +# fast build rule for target. +NightlyTest/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/NightlyTest.dir/build.make CMakeFiles/NightlyTest.dir/build +.PHONY : NightlyTest/fast + +#============================================================================= +# Target rules for targets named ContinuousConfigure + +# Build rule for target. +ContinuousConfigure: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ContinuousConfigure +.PHONY : ContinuousConfigure + +# fast build rule for target. +ContinuousConfigure/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ContinuousConfigure.dir/build.make CMakeFiles/ContinuousConfigure.dir/build +.PHONY : ContinuousConfigure/fast + +#============================================================================= +# Target rules for targets named ContinuousBuild + +# Build rule for target. +ContinuousBuild: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ContinuousBuild +.PHONY : ContinuousBuild + +# fast build rule for target. +ContinuousBuild/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ContinuousBuild.dir/build.make CMakeFiles/ContinuousBuild.dir/build +.PHONY : ContinuousBuild/fast + +#============================================================================= +# Target rules for targets named NightlyConfigure + +# Build rule for target. +NightlyConfigure: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 NightlyConfigure +.PHONY : NightlyConfigure + +# fast build rule for target. +NightlyConfigure/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/NightlyConfigure.dir/build.make CMakeFiles/NightlyConfigure.dir/build +.PHONY : NightlyConfigure/fast + +#============================================================================= +# Target rules for targets named NightlyMemoryCheck + +# Build rule for target. +NightlyMemoryCheck: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 NightlyMemoryCheck +.PHONY : NightlyMemoryCheck + +# fast build rule for target. +NightlyMemoryCheck/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/NightlyMemoryCheck.dir/build.make CMakeFiles/NightlyMemoryCheck.dir/build +.PHONY : NightlyMemoryCheck/fast + +#============================================================================= +# Target rules for targets named ExperimentalTest + +# Build rule for target. +ExperimentalTest: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ExperimentalTest +.PHONY : ExperimentalTest + +# fast build rule for target. +ExperimentalTest/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ExperimentalTest.dir/build.make CMakeFiles/ExperimentalTest.dir/build +.PHONY : ExperimentalTest/fast + +#============================================================================= +# Target rules for targets named ContinuousUpdate + +# Build rule for target. +ContinuousUpdate: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ContinuousUpdate +.PHONY : ContinuousUpdate + +# fast build rule for target. +ContinuousUpdate/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ContinuousUpdate.dir/build.make CMakeFiles/ContinuousUpdate.dir/build +.PHONY : ContinuousUpdate/fast + +#============================================================================= +# Target rules for targets named NightlyUpdate + +# Build rule for target. +NightlyUpdate: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 NightlyUpdate +.PHONY : NightlyUpdate + +# fast build rule for target. +NightlyUpdate/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/NightlyUpdate.dir/build.make CMakeFiles/NightlyUpdate.dir/build +.PHONY : NightlyUpdate/fast + +#============================================================================= +# Target rules for targets named ExperimentalMemCheck + +# Build rule for target. +ExperimentalMemCheck: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ExperimentalMemCheck +.PHONY : ExperimentalMemCheck + +# fast build rule for target. +ExperimentalMemCheck/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ExperimentalMemCheck.dir/build.make CMakeFiles/ExperimentalMemCheck.dir/build +.PHONY : ExperimentalMemCheck/fast + +#============================================================================= +# Target rules for targets named ExperimentalSubmit + +# Build rule for target. +ExperimentalSubmit: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ExperimentalSubmit +.PHONY : ExperimentalSubmit + +# fast build rule for target. +ExperimentalSubmit/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ExperimentalSubmit.dir/build.make CMakeFiles/ExperimentalSubmit.dir/build +.PHONY : ExperimentalSubmit/fast + +#============================================================================= +# Target rules for targets named Experimental + +# Build rule for target. +Experimental: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 Experimental +.PHONY : Experimental + +# fast build rule for target. +Experimental/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Experimental.dir/build.make CMakeFiles/Experimental.dir/build +.PHONY : Experimental/fast + +#============================================================================= +# Target rules for targets named ContinuousCoverage + +# Build rule for target. +ContinuousCoverage: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ContinuousCoverage +.PHONY : ContinuousCoverage + +# fast build rule for target. +ContinuousCoverage/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ContinuousCoverage.dir/build.make CMakeFiles/ContinuousCoverage.dir/build +.PHONY : ContinuousCoverage/fast + +#============================================================================= +# Target rules for targets named ExperimentalConfigure + +# Build rule for target. +ExperimentalConfigure: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ExperimentalConfigure +.PHONY : ExperimentalConfigure + +# fast build rule for target. +ExperimentalConfigure/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ExperimentalConfigure.dir/build.make CMakeFiles/ExperimentalConfigure.dir/build +.PHONY : ExperimentalConfigure/fast + +#============================================================================= +# Target rules for targets named Continuous + +# Build rule for target. +Continuous: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 Continuous +.PHONY : Continuous + +# fast build rule for target. +Continuous/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Continuous.dir/build.make CMakeFiles/Continuous.dir/build +.PHONY : Continuous/fast + +#============================================================================= +# Target rules for targets named Nightly + +# Build rule for target. +Nightly: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 Nightly +.PHONY : Nightly + +# fast build rule for target. +Nightly/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Nightly.dir/build.make CMakeFiles/Nightly.dir/build +.PHONY : Nightly/fast + +#============================================================================= +# Target rules for targets named NightlySubmit + +# Build rule for target. +NightlySubmit: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 NightlySubmit +.PHONY : NightlySubmit + +# fast build rule for target. +NightlySubmit/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/NightlySubmit.dir/build.make CMakeFiles/NightlySubmit.dir/build +.PHONY : NightlySubmit/fast + +#============================================================================= +# Target rules for targets named NightlyStart + +# Build rule for target. +NightlyStart: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 NightlyStart +.PHONY : NightlyStart + +# fast build rule for target. +NightlyStart/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/NightlyStart.dir/build.make CMakeFiles/NightlyStart.dir/build +.PHONY : NightlyStart/fast + +#============================================================================= +# Target rules for targets named ExperimentalCoverage + +# Build rule for target. +ExperimentalCoverage: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ExperimentalCoverage +.PHONY : ExperimentalCoverage + +# fast build rule for target. +ExperimentalCoverage/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ExperimentalCoverage.dir/build.make CMakeFiles/ExperimentalCoverage.dir/build +.PHONY : ExperimentalCoverage/fast + +#============================================================================= +# Target rules for targets named exect + +# Build rule for target. +exect: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 exect +.PHONY : exect + +# fast build rule for target. +exect/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/build +.PHONY : exect/fast + +#============================================================================= +# Target rules for targets named NightlyCoverage + +# Build rule for target. +NightlyCoverage: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 NightlyCoverage +.PHONY : NightlyCoverage + +# fast build rule for target. +NightlyCoverage/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/NightlyCoverage.dir/build.make CMakeFiles/NightlyCoverage.dir/build +.PHONY : NightlyCoverage/fast + +#============================================================================= +# Target rules for targets named ExperimentalStart + +# Build rule for target. +ExperimentalStart: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ExperimentalStart +.PHONY : ExperimentalStart + +# fast build rule for target. +ExperimentalStart/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ExperimentalStart.dir/build.make CMakeFiles/ExperimentalStart.dir/build +.PHONY : ExperimentalStart/fast + +#============================================================================= +# Target rules for targets named NightlyBuild + +# Build rule for target. +NightlyBuild: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 NightlyBuild +.PHONY : NightlyBuild + +# fast build rule for target. +NightlyBuild/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/NightlyBuild.dir/build.make CMakeFiles/NightlyBuild.dir/build +.PHONY : NightlyBuild/fast + +#============================================================================= +# Target rules for targets named ExperimentalBuild + +# Build rule for target. +ExperimentalBuild: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ExperimentalBuild +.PHONY : ExperimentalBuild + +# fast build rule for target. +ExperimentalBuild/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ExperimentalBuild.dir/build.make CMakeFiles/ExperimentalBuild.dir/build +.PHONY : ExperimentalBuild/fast + +#============================================================================= +# Target rules for targets named ExperimentalUpdate + +# Build rule for target. +ExperimentalUpdate: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ExperimentalUpdate +.PHONY : ExperimentalUpdate + +# fast build rule for target. +ExperimentalUpdate/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ExperimentalUpdate.dir/build.make CMakeFiles/ExperimentalUpdate.dir/build +.PHONY : ExperimentalUpdate/fast + +#============================================================================= +# Target rules for targets named ContinuousStart + +# Build rule for target. +ContinuousStart: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ContinuousStart +.PHONY : ContinuousStart + +# fast build rule for target. +ContinuousStart/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ContinuousStart.dir/build.make CMakeFiles/ContinuousStart.dir/build +.PHONY : ContinuousStart/fast + +#============================================================================= +# Target rules for targets named ContinuousMemCheck + +# Build rule for target. +ContinuousMemCheck: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ContinuousMemCheck +.PHONY : ContinuousMemCheck + +# fast build rule for target. +ContinuousMemCheck/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ContinuousMemCheck.dir/build.make CMakeFiles/ContinuousMemCheck.dir/build +.PHONY : ContinuousMemCheck/fast + +#============================================================================= +# Target rules for targets named ContinuousTest + +# Build rule for target. +ContinuousTest: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ContinuousTest +.PHONY : ContinuousTest + +# fast build rule for target. +ContinuousTest/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ContinuousTest.dir/build.make CMakeFiles/ContinuousTest.dir/build +.PHONY : ContinuousTest/fast + +#============================================================================= +# Target rules for targets named ContinuousSubmit + +# Build rule for target. +ContinuousSubmit: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ContinuousSubmit +.PHONY : ContinuousSubmit + +# fast build rule for target. +ContinuousSubmit/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/ContinuousSubmit.dir/build.make CMakeFiles/ContinuousSubmit.dir/build +.PHONY : ContinuousSubmit/fast + +average.o: average.c.o + +.PHONY : average.o + +# target to build an object file +average.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/average.c.o +.PHONY : average.c.o + +average.i: average.c.i + +.PHONY : average.i + +# target to preprocess a source file +average.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/average.c.i +.PHONY : average.c.i + +average.s: average.c.s + +.PHONY : average.s + +# target to generate assembly for a file +average.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/average.c.s +.PHONY : average.c.s + +fileGestion.o: fileGestion.c.o + +.PHONY : fileGestion.o + +# target to build an object file +fileGestion.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/fileGestion.c.o +.PHONY : fileGestion.c.o + +fileGestion.i: fileGestion.c.i + +.PHONY : fileGestion.i + +# target to preprocess a source file +fileGestion.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/fileGestion.c.i +.PHONY : fileGestion.c.i + +fileGestion.s: fileGestion.c.s + +.PHONY : fileGestion.s + +# target to generate assembly for a file +fileGestion.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/fileGestion.c.s +.PHONY : fileGestion.c.s + +getArray.o: getArray.c.o + +.PHONY : getArray.o + +# target to build an object file +getArray.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/getArray.c.o +.PHONY : getArray.c.o + +getArray.i: getArray.c.i + +.PHONY : getArray.i + +# target to preprocess a source file +getArray.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/getArray.c.i +.PHONY : getArray.c.i + +getArray.s: getArray.c.s + +.PHONY : getArray.s + +# target to generate assembly for a file +getArray.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/getArray.c.s +.PHONY : getArray.c.s + +growthRate.o: growthRate.c.o + +.PHONY : growthRate.o + +# target to build an object file +growthRate.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/growthRate.c.o +.PHONY : growthRate.c.o + +growthRate.i: growthRate.c.i + +.PHONY : growthRate.i + +# target to preprocess a source file +growthRate.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/growthRate.c.i +.PHONY : growthRate.c.i + +growthRate.s: growthRate.c.s + +.PHONY : growthRate.s + +# target to generate assembly for a file +growthRate.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/growthRate.c.s +.PHONY : growthRate.c.s + +main.o: main.c.o + +.PHONY : main.o + +# target to build an object file +main.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/main.c.o +.PHONY : main.c.o + +main.i: main.c.i + +.PHONY : main.i + +# target to preprocess a source file +main.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/main.c.i +.PHONY : main.c.i + +main.s: main.c.s + +.PHONY : main.s + +# target to generate assembly for a file +main.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/main.c.s +.PHONY : main.c.s + +power.o: power.c.o + +.PHONY : power.o + +# target to build an object file +power.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/power.c.o +.PHONY : power.c.o + +power.i: power.c.i + +.PHONY : power.i + +# target to preprocess a source file +power.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/power.c.i +.PHONY : power.c.i + +power.s: power.c.s + +.PHONY : power.s + +# target to generate assembly for a file +power.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/power.c.s +.PHONY : power.c.s + +queue.o: queue.c.o + +.PHONY : queue.o + +# target to build an object file +queue.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/queue.c.o +.PHONY : queue.c.o + +queue.i: queue.c.i + +.PHONY : queue.i + +# target to preprocess a source file +queue.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/queue.c.i +.PHONY : queue.c.i + +queue.s: queue.c.s + +.PHONY : queue.s + +# target to generate assembly for a file +queue.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/queue.c.s +.PHONY : queue.c.s + +simulateFlux.o: simulateFlux.c.o + +.PHONY : simulateFlux.o + +# target to build an object file +simulateFlux.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/simulateFlux.c.o +.PHONY : simulateFlux.c.o + +simulateFlux.i: simulateFlux.c.i + +.PHONY : simulateFlux.i + +# target to preprocess a source file +simulateFlux.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/simulateFlux.c.i +.PHONY : simulateFlux.c.i + +simulateFlux.s: simulateFlux.c.s + +.PHONY : simulateFlux.s + +# target to generate assembly for a file +simulateFlux.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/exect.dir/build.make CMakeFiles/exect.dir/simulateFlux.c.s +.PHONY : simulateFlux.c.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... rebuild_cache" + @echo "... test" + @echo "... Continuous" + @echo "... ContinuousBuild" + @echo "... ContinuousConfigure" + @echo "... ContinuousCoverage" + @echo "... ContinuousMemCheck" + @echo "... ContinuousStart" + @echo "... ContinuousSubmit" + @echo "... ContinuousTest" + @echo "... ContinuousUpdate" + @echo "... Experimental" + @echo "... ExperimentalBuild" + @echo "... ExperimentalConfigure" + @echo "... ExperimentalCoverage" + @echo "... ExperimentalMemCheck" + @echo "... ExperimentalStart" + @echo "... ExperimentalSubmit" + @echo "... ExperimentalTest" + @echo "... ExperimentalUpdate" + @echo "... Nightly" + @echo "... NightlyBuild" + @echo "... NightlyConfigure" + @echo "... NightlyCoverage" + @echo "... NightlyMemCheck" + @echo "... NightlyMemoryCheck" + @echo "... NightlyStart" + @echo "... NightlySubmit" + @echo "... NightlyTest" + @echo "... NightlyUpdate" + @echo "... exect" + @echo "... average.o" + @echo "... average.i" + @echo "... average.s" + @echo "... fileGestion.o" + @echo "... fileGestion.i" + @echo "... fileGestion.s" + @echo "... getArray.o" + @echo "... getArray.i" + @echo "... getArray.s" + @echo "... growthRate.o" + @echo "... growthRate.i" + @echo "... growthRate.s" + @echo "... main.o" + @echo "... main.i" + @echo "... main.s" + @echo "... power.o" + @echo "... power.i" + @echo "... power.s" + @echo "... queue.o" + @echo "... queue.i" + @echo "... queue.s" + @echo "... simulateFlux.o" + @echo "... simulateFlux.i" + @echo "... simulateFlux.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system -all: - $(CC) -g fileGestion.c getArray.c average.c growthRate.c power.c queue.c simulateFlux.c main.c -lm -lpthread -o main - ./main < ../02400031.TXT \ No newline at end of file diff --git a/Code-C/Makefileold b/Code-C/Makefileold new file mode 100644 index 0000000..44a0a3d --- /dev/null +++ b/Code-C/Makefileold @@ -0,0 +1,5 @@ +CC = gcc + +all: + $(CC) -g fileGestion.c getArray.c average.c growthRate.c power.c queue.c simulateFlux.c main.c -lm -lpthread -o main + ./main < ../02400031.TXT \ No newline at end of file diff --git a/Code-C/main.c b/Code-C/main.c index 1bacd00..0257ac9 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -77,9 +77,12 @@ void *threadCalculGrowthRate(void * vargp){ fileName = queueGetTabChar(rawDataQueue); if(i < 2){ if(i == 1){ + printf("zedfghjio\n"); powerFunction(fileName, dataLign[1]); growthRateFunction(**dataLign); }else{ + printf("zedfghjio\n"); + powerFunction(fileName, dataLign[0]); } i++; @@ -87,6 +90,8 @@ void *threadCalculGrowthRate(void * vargp){ for(int y = 0; y < (nCol-1); y++){ dataLign[0][y] = dataLign[1][y]; } + printf("zedfghjio\n"); + powerFunction(fileName, dataLign[1]); growthRateFunction(**dataLign); } diff --git a/Code-C/power.c b/Code-C/power.c index 8f80d43..32d8a31 100644 --- a/Code-C/power.c +++ b/Code-C/power.c @@ -32,6 +32,7 @@ void powerCalculation(long **p, double powerArray[]){ */ void powerFunction(char* rawDataFileName, double **pw){ long **p = getRawDataArray(rawDataFileName); + printArrayData(p,nRow,nCol); double pww[nCol-1]; if(p !=NULL){ if(pw == NULL){ diff --git a/Code-C/test.c b/Code-C/test.c new file mode 100644 index 0000000..eaed558 --- /dev/null +++ b/Code-C/test.c @@ -0,0 +1,46 @@ + + + + +int main(int argc, char *argv[]){ + if (argc == 1) + usage(argc, argv); + + // start test + fprintf(stderr, "=> Start test \"%s\"\n", argv[1]); + int ok = 1; + if (strcmp("dummy", argv[1]) == 0) + ok = test_dummy(); + else if (strcmp("is_lighted",argv[1]) == 0){ + ok = test_game_is_lighted(); + }else if(strcmp("has_error",argv[1]) == 0){ + ok = test_game_has_error(); + }else if(strcmp("check_move",argv[1]) == 0){ + ok = test_game_check_move(); + }else if(strcmp("game_is_over",argv[1]) == 0){ + ok = test_game_is_over(); + }else if(strcmp("play_move",argv[1]) == 0){ + ok = test_game_play_move(); + }else if(strcmp("game_restart",argv[1]) == 0){ + ok = test_game_restart(); + }else if(strcmp("update_flags",argv[1]) == 0){ + ok = test_game_update_flags(); + }else if(strcmp("default_solution",argv[1]) == 0){ + ok = test_game_default_solution(); + }else{ + fprintf(stderr, "Error: test \"%s\" not found!\n", argv[1]); + exit(EXIT_FAILURE); + } + + // print test result + if (ok == 0) + { + fprintf(stderr, "Test \"%s\" finished: SUCCESS\n", argv[1]); + return EXIT_SUCCESS; + } + else + { + fprintf(stderr, "Test \"%s\" finished: FAILURE\n", argv[1]); + return EXIT_FAILURE; + } +} \ No newline at end of file From f4fd64e63c22220f94f5c02de69f4caa6bccfd7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Fri, 17 Jun 2022 17:46:53 +0200 Subject: [PATCH 17/35] forget to save main.c --- Code-C/main.c | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/Code-C/main.c b/Code-C/main.c index bf7038c..5872b31 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -82,15 +82,6 @@ void *threadCalculGrowthRate(void * vargp){ fileName = queueGetTabChar(rawDataQueue); if(i < 2){ if(i == 1){ -<<<<<<< HEAD - printf("zedfghjio\n"); - powerFunction(fileName, dataLign[1]); - growthRateFunction(**dataLign); - }else{ - printf("zedfghjio\n"); - - powerFunction(fileName, dataLign[0]); -======= powerFunction(fileName, dataLignPw); averageFunction(fileName , dataLignAv); growthRateFunction(dataLignPw , "growthRatePw.csv"); @@ -98,7 +89,6 @@ void *threadCalculGrowthRate(void * vargp){ }else{ averageFunction(fileName , dataLignAv); powerFunction(fileName, dataLignPw); ->>>>>>> e06c7602e0dade3bd0d2e88e88cacaab8de6f9ea } i++; }else{ @@ -106,17 +96,10 @@ void *threadCalculGrowthRate(void * vargp){ dataLignPw[0][y] = dataLignPw[1][y]; dataLignAv[0][y] = dataLignAv[1][y]; } -<<<<<<< HEAD - printf("zedfghjio\n"); - - powerFunction(fileName, dataLign[1]); - growthRateFunction(**dataLign); -======= powerFunction(fileName, dataLignPw); averageFunction(fileName , dataLignAv); growthRateFunction(dataLignPw,"growthRatePw.csv"); growthRateFunction(dataLignPw,"growthRateAv.csv"); ->>>>>>> e06c7602e0dade3bd0d2e88e88cacaab8de6f9ea } remove(fileName); } From ade5b4378fe171745184d90b9dd63c199be09ae6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Tue, 21 Jun 2022 15:13:10 +0200 Subject: [PATCH 18/35] CMakelists add few test queue --- .gitignore | 5 +- .vscode/settings.json | 3 +- Code-C/CMakeLists.txt | 23 ++++- Code-C/b2hd.c | 19 ++++- Code-C/b2hd.h | 16 ++-- Code-C/ctest.c | 184 ++++++++++++++++++++++++++++++++++++++++ Code-C/main | Bin 46784 -> 0 bytes Code-C/main.c | 105 ++++++++++++++--------- Code-C/power.c | 44 ++++++---- Code-C/queue.c | 155 ++++++++++++++++++++------------- Code-C/queue.h | 121 +++++++++++++++++++++++--- Code-C/simulateFlux.c | 193 ++++++++++++++++++++++++------------------ Code-C/simulateFlux.h | 1 + Code-C/test.c | 46 ---------- 14 files changed, 641 insertions(+), 274 deletions(-) create mode 100644 Code-C/ctest.c delete mode 100755 Code-C/main delete mode 100644 Code-C/test.c diff --git a/.gitignore b/.gitignore index 22d5774..2a3e17d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,10 @@ *.csv Code-C/main -Code-C/exec +Code-C/exect +Code-C/ctest +Code-C/DartConfiguration.tcl + Makefile # Created by https://www.toptal.com/developers/gitignore/api/cmake,c diff --git a/.vscode/settings.json b/.vscode/settings.json index 5c64e94..332f5c0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -15,6 +15,7 @@ "*.tcc": "c", "type_traits": "c", "simulateflux.h": "c", - "pthread.h": "c" + "pthread.h": "c", + "types.h": "c" } } \ No newline at end of file diff --git a/Code-C/CMakeLists.txt b/Code-C/CMakeLists.txt index 3511d88..ee0dd0f 100644 --- a/Code-C/CMakeLists.txt +++ b/Code-C/CMakeLists.txt @@ -3,8 +3,25 @@ project(Traitement-signal-plantes C) include(CTest) enable_testing() - set(CMAKE_C_FLAGS "-std=c99 -g -Wall") + add_executable(exect fileGestion.c getArray.c average.c growthRate.c power.c queue.c simulateFlux.c main.c) -#add_executable(exect main.c simulateFlux.c queue.c power.c growthRate.c average.c getArray.c fileGestion.c) - \ No newline at end of file + +# add_executable(exect main.c simulateFlux.c queue.c power.c growthRate.c average.c getArray.c fileGestion.c) +find_package(Threads) +target_link_libraries(exect ${CMAKE_THREAD_LIBS_INIT} m) + +set(CTEST_MEMORYCHECK_TYPE "AddressSanitizer") +set(CTEST_MEMORYCHECK_SANITIZER_OPTIONS "verbosity=1:symbolize=1:abort_on_error=1:detect_leaks=1") + +add_executable(ctest fileGestion.c getArray.c average.c growthRate.c queue.c simulateFlux.c ctest.c) +target_link_libraries(ctest ${CMAKE_THREAD_LIBS_INIT} m) + +add_test(test_queueCreateEmpty ./ctest queueCreateEmpty) +add_test(test_queueSetCharLen ./ctest queueSetCharLen) + +# add_test(test_queueGetTabChar ./ctest queueGetTabChar) +add_test(test_queueSetNextE ./ctest queueSetNextE) +add_test(test_queueGetNextE ./ctest queueGetNextE) + +add_test(test_queueGetCharLen ./ctest queueGetCharLen) \ No newline at end of file diff --git a/Code-C/b2hd.c b/Code-C/b2hd.c index 22ce3fe..2de322a 100644 --- a/Code-C/b2hd.c +++ b/Code-C/b2hd.c @@ -1,4 +1,20 @@ #include "b2hd.h" +#include + + + +int64_t millis(){ + //struct timespec now; + struct timespec *now = (struct timespec *) malloc(sizeof(struct timespec)); + //timespec_get(&now, TIME_UTC); + timespec_get(now, TIME_UTC); + + //#ifdef __USE_ISOC11 ???? + int64_t tmp = (((int64_t) now->tv_sec) * 1000 + ((int64_t) now->tv_nsec) / ((int64_t) 1000000)); + free(now); + return tmp; +} + /** * @brief allow to transform all binary hex data send by the Vegetal Signal captor in a .TXT file into decimal values in a .csv * @@ -14,7 +30,7 @@ void b2hd() quartet value; while (fread(&buff, 26, 1, stdin)) { - fprintf(stdout , "%d,", millis()); + fprintf(stdout , "%ld,", millis()); for (int i = 1; i < 9; i++){ /*buff[25] = '\0';*/ if (strncmp(buff, "#################\n", (size_t)18) == 0) { @@ -44,7 +60,6 @@ void b2hd() } } - int main(int argc , char** argv){ b2hd(); } \ No newline at end of file diff --git a/Code-C/b2hd.h b/Code-C/b2hd.h index 5479d31..92a33d4 100644 --- a/Code-C/b2hd.h +++ b/Code-C/b2hd.h @@ -2,23 +2,19 @@ #include #include #include -#include +//#include +#define __USE_ISOC11 1 +#include #include /** * @brief struct used to stock binary 32 bits data from the captor - * + * */ -typedef struct { +typedef struct +{ uint8_t octet1; uint8_t octet2; uint8_t octet3; uint8_t octet4; } quartet; - -int64_t millis() -{ - struct timespec now; - timespec_get(&now, TIME_UTC); - return ((int64_t) now.tv_sec) * 1000 + ((int64_t) now.tv_nsec) / 1000000; -} diff --git a/Code-C/ctest.c b/Code-C/ctest.c new file mode 100644 index 0000000..1cffdd3 --- /dev/null +++ b/Code-C/ctest.c @@ -0,0 +1,184 @@ +#define __USE_GNU +#include +#include +#include +#include +#include + +#include "fileGestion.h" +#include "getArray.h" +#include "growthRate.h" +#include "power.c" +#include "simulateFlux.h" +#include "queue.h" +#include "average.h" +//#include "b2hd.h" + +bool rawDataWriteFlag; +int nRowRawData = 500; +int nRowGR = 150; +int nCol = 1; +double freqEch = 250; + +int nbRowBinFile = 900011; +int nbRowIgnore = 19; + +Pqueue firstRawDataQueue; +// Captor 1 2 3 4 5 6 7 8 +bool selectionCaptors[] = {true, false, true, false, false, false, true, false}; + +int cptData = 0; +int cptFile = 1; +int cptValue = 0; + +double period = 0; +double invTimeBandWidth = 0; + +bool test_queueCreateEmpty() +{ + Pqueue new = queueCreateEmpty(); + + assert(queueGetCharLen(new) == 0); + assert(queueGetTabChar(new) == NULL); + assert(queueGetNextE(new) == NULL); + + // queueDelAll(new); + queueRmFrstE(new); + + return EXIT_SUCCESS; +} + +bool test_queueSetCharLen() +{ + Pqueue new = queueCreateEmpty(); + + queueSetCharLen(new, 13); + + assert(queueGetCharLen(new) == 13); + assert(queueGetTabChar(new) == NULL); + assert(queueGetNextE(new) == NULL); + + // queueDelAll(new); + queueRmFrstE(new); + return EXIT_SUCCESS; +} + +bool test_queueGetTabChar() +{ // Define later + Pqueue new = queueCreateEmpty(); + + // const char tabChar[12] = "PetitNavire\0" + queueSetTabChar(new, 13, NULL); + + assert(queueGetCharLen(new) == 13); + assert(queueGetTabChar(new) == NULL); + assert(queueGetNextE(new) == NULL); + + // queueDelAll(new); + queueRmFrstE(new); + + return EXIT_SUCCESS; +} + +bool test_queueSetNextE() +{ + Pqueue new = queueCreateEmpty(), next = queueCreateEmpty(); + + queueSetNextE(new, next); + + assert(queueGetNextE(new) == next); + assert(queueGetNextE(next) == NULL); + + queueDelAll(new); + return EXIT_SUCCESS; +} + +bool test_queueGetNextE() +{ + Pqueue new = queueCreateEmpty(), next = queueCreateEmpty(); + + queueSetNextE(new, next); + + assert(queueGetNextE(new) == next); + assert(queueGetNextE(next) == NULL); + + queueDelAll(new); + return EXIT_SUCCESS; +} + +bool test_queueGetCharLen() +{ + Pqueue new = queueCreateEmpty(); + + assert(queueGetCharLen(new) == 0); + + queueSetCharLen(new, 13); + + assert(queueGetCharLen(new) == 13); + + queueDelAll(new); + return EXIT_SUCCESS; +} + +void usage(int argc, char *argv[]) +{ + fprintf(stderr, "Usage: %s [<...>]\n", argv[0]); + exit(EXIT_FAILURE); +} + +int main(int argc, char *argv[]) +{ + if (argc == 1) + usage(argc, argv); + + // start test + fprintf(stderr, "=> Start test \"%s\"\n", argv[1]); + int ok = 1; + if (strcmp("queueCreateEmpty", argv[1]) == 0) + ok = test_queueCreateEmpty(); + else if (strcmp("queueSetCharLen", argv[1]) == 0) + { + ok = test_queueSetCharLen(); + } + else if (strcmp("queueGetTabChar", argv[1]) == 0) + { + ok = test_queueGetTabChar(); + } + else if (strcmp("queueSetNextE", argv[1]) == 0) + { + ok = test_queueSetNextE(); + } + else if (strcmp("queueGetNextE", argv[1]) == 0) + { + ok = test_queueGetNextE(); + } + else if (strcmp("queueGetCharLen", argv[1]) == 0) + { + ok = test_queueGetCharLen(); + } + else if (strcmp("queueGetTabChar", argv[1]) == 0) + { + ok = test_queueGetTabChar(); + // }else if(strcmp("update_flags",argv[1]) == 0){ + // ok = test_game_update_flags(); + // }else if(strcmp("default_solution",argv[1]) == 0){ + // ok = test_game_default_solution(); + } + else + { + fprintf(stderr, "Error: test \"%s\" not found!\n", argv[1]); + exit(EXIT_FAILURE); + } + + // print test result + if (ok == 0) + { + fprintf(stderr, "Test \"%s\" finished: SUCCESS\n", argv[1]); + return EXIT_SUCCESS; + } + else + { + fprintf(stderr, "Test \"%s\" finished: FAILURE\n", argv[1]); + return EXIT_FAILURE; + } +} \ No newline at end of file diff --git a/Code-C/main b/Code-C/main deleted file mode 100755 index e87cfdbeb8ec346c128f09a750fee30663244d1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46784 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 #include "power.h" #include "getArray.h" #include "fileGestion.h" @@ -6,43 +7,50 @@ /** * @brief realize the powerThreadFunction calcul - * + * * @param p array with all the values that will be used for the calcul * @param powerArray array where results are stocked */ -void powerCalculation(long **p, double powerArray[]){ - for(int i = 0; i < nCol; i++){ +void powerCalculation(long **p, double powerArray[]) +{ + for (int i = 0; i < nCol; i++) + { int j = 0; powerArray[i] = 0; - while(j < nRowRawData){ - powerArray[i] += pow(p[j][i+1],2); + while (j < nRowRawData) + { + powerArray[i] += pow(p[j][i + 1], 2); j++; } powerArray[i] /= nRowRawData; } - } /** * @brief function that realize all the action to write one lign in the file powerData.csv - * + * * @param rawDataFileName name of the raw data file to use to realize the calcul * @param N number of rows in the file * @param M number of columns in the file */ -void powerFunction(char* rawDataFileName, double **pw){ +void powerFunction(char *rawDataFileName, double **pw) +{ long **p = getRawDataArray(rawDataFileName); - printArrayData(p,nRow,nCol); - double pww[nCol-1]; - if(p !=NULL){ - if(pw == NULL){ - powerCalculation(p,pww); - appendDataInFile("powerData.csv",pww,nCol-1); - }else{ - powerCalculation(p,pw[1]); - appendDataInFile("powerData.csv",pw[1],nCol-1); + printArrayData(p, nRowRawData, nCol); + double pww[nCol - 1]; + if (p != NULL) + { + if (pw == NULL) + { + powerCalculation(p, pww); + appendDataInFile("powerData.csv", pww, nCol - 1); } - freeArray(p,nRowRawData); + else + { + powerCalculation(p, pw[1]); + appendDataInFile("powerData.csv", pw[1], nCol - 1); + } + freeArray(p, nRowRawData); } } \ No newline at end of file diff --git a/Code-C/queue.c b/Code-C/queue.c index 6bcf99c..c44378e 100644 --- a/Code-C/queue.c +++ b/Code-C/queue.c @@ -5,27 +5,29 @@ #include "queue.h" /** - * @brief struct queue struct used for queueing string name - * + * @brief struct queue struct used for queueing string name + * * @param charLen lenght of tabChar pointeur * @param tabChar char array pointer - * @param pNextE point next element + * @param pNextE point next element */ -struct queue { +struct queue +{ int charLen; - char* tabChar; - Pqueue pNextE; + char *tabChar; + Pqueue pNextE; }; typedef struct queue *Pqueue; /** * @brief create an empty element of queue - * - * @return Pqueue + * + * @return Pqueue */ -Pqueue queueCreateEmpty(){ - Pqueue new = (Pqueue) malloc(sizeof(struct queue)); +Pqueue queueCreateEmpty() +{ + Pqueue new = (Pqueue)malloc(sizeof(struct queue)); assert(new); new->charLen = 0; new->tabChar = NULL; @@ -33,92 +35,100 @@ Pqueue queueCreateEmpty(){ return new; } - /************ SETTER ************/ +/************ SETTER ************/ /** * @brief set char size array - * + * * @param elem targeted element * @param _charLen size of char array */ -void queueSetCharLen(Pqueue elem, int _charLen){ +void queueSetCharLen(Pqueue elem, int _charLen) +{ assert(elem); elem->charLen = _charLen; } /** * @brief set the char array in the element - * + * * @param elem targeted element * @param _charLen char array size * @param _tabChar pointer to static char array */ -void queueSetTabChar(Pqueue elem, int _charLen, const char *_tabChar){ +void queueSetTabChar(Pqueue elem, int _charLen, const char *_tabChar) +{ assert(elem); assert(_tabChar); elem->charLen = _charLen; - elem->tabChar = calloc(_charLen , sizeof(char)); - for(int i = 0; i < _charLen; i++){ + elem->tabChar = calloc(_charLen, sizeof(char)); + for (int i = 0; i < _charLen; i++) + { elem->tabChar[i] = _tabChar[i]; } } /** * @brief set next pqueue element - * + * * @param elem target element * @param next next element */ -void queueSetNextE(Pqueue elem , Pqueue next){ +void queueSetNextE(Pqueue elem, Pqueue next) +{ assert(elem); assert(next); - elem -> pNextE = next; + elem->pNextE = next; } - /************ GETTER ************/ +/************ GETTER ************/ /** * @brief switch to the next element - * + * * @param elem current element * @return Pqueue next element */ -Pqueue queueGetNextE(Pqueue elem){ +Pqueue queueGetNextE(Pqueue elem) +{ assert(elem); return elem->pNextE; } /** * @brief get the size char array - * + * * @param elem targeted element - * @return int + * @return int */ -int queueGetCharLen(Pqueue elem){ +int queueGetCharLen(Pqueue elem) +{ assert(elem); return elem->charLen; } /** * @brief get the pointer of char array - * + * * @param elem targeted elemnt - * @return char* + * @return char* */ -char * queueGetTabChar(Pqueue elem){ +char *queueGetTabChar(Pqueue elem) +{ assert(elem); return elem->tabChar; } - /************ ************/ +/************ ************/ /** * @brief Create Element of queue - * - * @param lenChar size of char array that will be created + * + * @param lenChar size of char array that will be created * @return Pqueue new element created */ -Pqueue queueCreateE(int lenChar, const char* _tabChar){ - Pqueue new = (Pqueue) malloc(sizeof(struct queue)); +Pqueue queueCreateE(int lenChar, const char *_tabChar) +{ + Pqueue new = (Pqueue)malloc(sizeof(struct queue)); assert(new); queueSetTabChar(new, lenChar, _tabChar); new->pNextE = NULL; @@ -127,14 +137,16 @@ Pqueue queueCreateE(int lenChar, const char* _tabChar){ /** * @brief remove and free the last element of queue - * + * * @param elem current element * @return Pqueue current element */ -Pqueue queueRmLastE(Pqueue elem){ +Pqueue queueRmLastE(Pqueue elem) +{ assert(elem); Pqueue tmp = elem, previous = NULL; - while(elem->pNextE != NULL){ + while (elem->pNextE != NULL) + { previous = tmp; tmp = queueGetNextE(tmp); } @@ -146,22 +158,27 @@ Pqueue queueRmLastE(Pqueue elem){ /** * @brief remove and free the first element of queue - * + * * @param elem target to remove (the element need to be the first) */ -void queueRmFrstE(Pqueue elem){ +void queueRmFrstE(Pqueue elem) +{ assert(elem); - free(elem->tabChar); + if (elem->tabChar != NULL) + { + free(elem->tabChar); + } free(elem); } /** * @brief delete the first value and return the next value - * - * @param elem - * @return Pqueue + * + * @param elem + * @return Pqueue */ -Pqueue queueNextDelFrst(Pqueue elem){ +Pqueue queueNextDelFrst(Pqueue elem) +{ assert(elem); Pqueue tmp = elem->pNextE; queueRmFrstE(elem); @@ -169,52 +186,70 @@ Pqueue queueNextDelFrst(Pqueue elem){ } /** - * @brief add in the end of queue element with string parameter - * + * @brief add in the end of queue element with string parameter + * * @param elem Pqueue will be added at the end of queue * @param str the string will be bind at the element * @param len the lenght of char array */ -void queueAddLastQ(Pqueue elem, const char* str, int len){ +void queueAddLastQ(Pqueue elem, const char *str, int len) +{ assert(elem); assert(str); Pqueue next = elem, previous = NULL; - while(next->pNextE != NULL){ + while (next->pNextE != NULL) + { previous = next; next = queueGetNextE(next); } previous = next; - next = queueCreateE(len,str); - queueSetNextE(previous,next); + next = queueCreateE(len, str); + queueSetNextE(previous, next); } /** * @brief Print targeted element - * + * * @param elem targeted element */ -void queuePrintE(Pqueue elem){ +void queuePrintE(Pqueue elem) +{ Pqueue next = queueGetNextE(elem); - printf("\nFile Name : %s \n(size of the file name : %d)\n",elem -> tabChar , elem -> charLen ); - if(next != NULL){ - printf("Next File : %s\n", next ->tabChar); + printf("\nFile Name : %s \n(size of the file name : %d)\n", elem->tabChar, elem->charLen); + if (next != NULL) + { + printf("Next File : %s\n", next->tabChar); } - else{ + else + { printf("No nextFile existing (null)\n"); } } /** * @brief Print all the element starting from @param firstE till the end of the linked list - * - * @param firstE + * + * @param firstE */ -void queuePrintWholeQ(Pqueue firstE){ +void queuePrintWholeQ(Pqueue firstE) +{ queuePrintE(firstE); Pqueue elem = firstE; - while(queueGetNextE(elem) != NULL){ + while (queueGetNextE(elem) != NULL) + { elem = queueGetNextE(elem); queuePrintE(elem); } } +void queueDelAll(Pqueue elem) +{ + assert(elem); + Pqueue condemned = elem, tmp; + while (condemned != NULL) + { + tmp = queueGetNextE(condemned); + queueRmFrstE(condemned); + condemned = tmp; + } +} diff --git a/Code-C/queue.h b/Code-C/queue.h index c2ec7a5..156d3f0 100644 --- a/Code-C/queue.h +++ b/Code-C/queue.h @@ -1,27 +1,126 @@ typedef struct queue *Pqueue; -//Constructors -Pqueue queueCreateE(int lenChar, const char* _tabChar); -Pqueue queueCreateEmpty(); +/** + * @brief Create Element of queue + * + * @param lenChar size of char array that will be created + * @return Pqueue new element created + */ +Pqueue queueCreateE(int lenChar, const char *_tabChar); +/** + * @brief create an empty element of queue + * + * @return Pqueue + */ +Pqueue queueCreateEmpty(); -//Getters +/************** Getters **************/ + +/** + * @brief switch to the next element + * + * @param elem current element + * @return Pqueue next element + */ Pqueue queueGetNextE(Pqueue elem); + +/** + * @brief get the size char array + * + * @param elem targeted element + * @return int + */ int queueGetCharLen(Pqueue elem); -char* queueGetTabChar(Pqueue elem); -//Setters +/** + * @brief get the pointer of char array + * + * @param elem targeted elemnt + * @return char* + */ +char *queueGetTabChar(Pqueue elem); + +/************** Setters **************/ + +/** + * @brief set char size array + * + * @param elem targeted element + * @param _charLen size of char array + */ void queueSetCharLen(Pqueue elem, int _charLen); + +/** + * @brief set the char array in the element + * + * @param elem targeted element + * @param _charLen char array size + * @param _tabChar pointer to static char array + */ void queueSetTabChar(Pqueue elem, int _charLen, const char *_tabChar); -void queueSetNextE(Pqueue elem , Pqueue next); -void queueAddLastQ(Pqueue elem, const char* str, int len); +/** + * @brief set next pqueue element + * + * @param elem target element + * @param next next element + */ +void queueSetNextE(Pqueue elem, Pqueue next); -//Removers +/** + * @brief add in the end of queue element with string parameter + * + * @param elem Pqueue will be added at the end of queue + * @param str the string will be bind at the element + * @param len the lenght of char array + */ +void queueAddLastQ(Pqueue elem, const char *str, int len); + +/************** Removers **************/ + +/** + * @brief remove and free the last element of queue + * + * @param elem current element + * @return Pqueue current element + */ Pqueue queueRmLastE(Pqueue elem); + +/** + * @brief remove and free the first element of queue + * + * @param elem target to remove (the element need to be the first) + */ void queueRmFrstE(Pqueue elem); + +/** + * @brief delete the first value and return the next value + * + * @param elem + * @return Pqueue + */ Pqueue queueNextDelFrst(Pqueue elem); -//print function +/************** print function **************/ + +/** + * @brief Print targeted element + * + * @param elem targeted element + */ void queuePrintE(Pqueue elem); -void queuePrintWholeQ(Pqueue firstE); \ No newline at end of file + +/** + * @brief Print all the element starting from @param firstE till the end of the linked list + * + * @param firstE + */ +void queuePrintWholeQ(Pqueue firstE); + +/** + * @brief free all queue list + * + * @param elem the first element of comdemned queue + */ +void queueDelAll(Pqueue elem); \ No newline at end of file diff --git a/Code-C/simulateFlux.c b/Code-C/simulateFlux.c index e19d0a5..460dd7b 100644 --- a/Code-C/simulateFlux.c +++ b/Code-C/simulateFlux.c @@ -1,93 +1,109 @@ #include "simulateFlux.h" #include "initialParameters.h" #include "queue.h" +//#include + +#include "time.h" /** * @brief convert an interger N into a char* - * - * @param N - * @return char* + * + * @param N + * @return char* */ -char* convertIntegerToChar(int N) +char *convertIntegerToChar(int N) { // Count digits in number N int m = N; int digit = 0; - while (m) { + while (m) + { digit++; m /= 10; } - char* arr; + char *arr; char arr1[digit]; - arr = (char*)malloc(digit*sizeof(char)); + arr = (char *)malloc(digit * sizeof(char)); int index = 0; - while (N) { + while (N) + { arr1[++index] = N % 10 + '0'; N /= 10; } int i; - for (i = 0; i < index; i++) { + for (i = 0; i < index; i++) + { arr[i] = arr1[index - i]; } arr[i] = '\0'; - return (char*)arr; + return (char *)arr; } /** - * @brief Create a New Raw Data File Name - * - * @return char* + * @brief Create a New Raw Data File Name + * + * @return char* */ -char *createNewRawDataFileName(){ - char *fileName = "../RawDataFiles/RawData"; +char *createNewRawDataFileName() +{ + char *fileName = "../RawDataFiles/RawData"; char *extension = ".csv\0"; char *fileNumber = convertIntegerToChar(cptFile); - //char *fileNumber; - //sprintf(fileNumber, "%d", cptFile); - //printf("%s\n" , fileNumber); + // char *fileNumber; + // sprintf(fileNumber, "%d", cptFile); + // printf("%s\n" , fileNumber); - char fileNameNumber[strlen(fileName)+strlen(fileNumber)]; - char *fullFileName = malloc((strlen(fileNameNumber)+strlen(extension)) * sizeof(char*)); + char fileNameNumber[strlen(fileName) + strlen(fileNumber)]; + char *fullFileName = malloc((strlen(fileNameNumber) + strlen(extension)) * sizeof(char *)); - strcpy( fileNameNumber, fileName ); - strcat( fileNameNumber, fileNumber ); + strcpy(fileNameNumber, fileName); + strcat(fileNameNumber, fileNumber); + + strcpy(fullFileName, fileNameNumber); + strcat(fullFileName, extension); - strcpy( fullFileName, fileNameNumber ); - strcat( fullFileName, extension ); - return fullFileName; } -int intInArray(int number , int *array , int N){ - for(int i = 0 ; i < N ; i++){ - if(array[i] == number) return 0; +int intInArray(int number, int *array, int N) +{ + for (int i = 0; i < N; i++) + { + if (array[i] == number) + return 0; } return -1; } -int maxInArray(int *array , int N){ - int max = 0; - for(int i = 0 ; i < N ; i++){ - if(array[i]>max) max = array[i]; +int maxInArray(int *array, int N) +{ + int max = 0; + for (int i = 0; i < N; i++) + { + if (array[i] > max) + max = array[i]; } return max; } /** * @brief return the unix time in millisecond - * - * @return int64_t + * + * @return int64_t */ + int64_t millis() { struct timespec now; timespec_get(&now, TIME_UTC); - return ((int64_t) now.tv_sec) * 1000 + ((int64_t) now.tv_nsec) / 1000000; + return ((int64_t)now.tv_sec) * 1000 + ((int64_t)now.tv_nsec) / 1000000; } - -int lastIndexCaptor(){ +int lastIndexCaptor() +{ int lastIndex = 0; - for(int i = 1 ; i < 8 ; i++){ - if(selectionCaptors[i]){ + for (int i = 1; i < 8; i++) + { + if (selectionCaptors[i]) + { lastIndex = i; } } @@ -96,82 +112,97 @@ int lastIndexCaptor(){ /** * @brief write one lign of rawData in the file @param rawDataFile (simulate of freq of the Vegetal Signals Captor) - * - * @param rawDataFile + * + * @param rawDataFile * @return true if the lign is correctly write , else : - * @return false + * @return false */ -bool writeOneRawData(FILE *rawDataFile){ +bool writeOneRawData(FILE *rawDataFile) +{ char buff[26]; char buff2[18]; int32_t values[8]; uint32_t valbin[8]; quartet value; - if(fread(&buff, 26, 1, stdin)) { - //printf("%d\n",cptValue); - if(cptValue < nbRowBinFile - nbRowIgnore){ - FILE *timeFile = fopen("timeFile.csv" , "a+"); - fprintf(timeFile , "%ld\n", millis()); + if (fread(&buff, 26, 1, stdin)) + { + // printf("%d\n",cptValue); + if (cptValue < nbRowBinFile - nbRowIgnore) + { + FILE *timeFile = fopen("timeFile.csv", "a+"); + fprintf(timeFile, "%ld\n", millis()); fclose(timeFile); - fprintf(rawDataFile , "%ld,", millis()); - if (strncmp(buff, "#################\n", (size_t)18) == 0) { - if (!(fread(&buff2, 18, 1, stdin))) { + fprintf(rawDataFile, "%ld,", millis()); + if (strncmp(buff, "#################\n", (size_t)18) == 0) + { + if (!(fread(&buff2, 18, 1, stdin))) + { fprintf(stderr, "Erreur lecture après ###...#"); - } else { + } + else + { strncpy(buff, &buff[18], 8); strncpy(&buff[8], buff2, 18); } } int lastIndex = lastIndexCaptor(); - for (int i = 1; i < 9; i++){ - if(selectionCaptors[i-1]){ - value.octet1 = buff[3*i+1]; - value.octet2 = buff[3*i+2]; - value.octet3 = buff[3*i+3]; + for (int i = 1; i < 9; i++) + { + if (selectionCaptors[i - 1]) + { + value.octet1 = buff[3 * i + 1]; + value.octet2 = buff[3 * i + 2]; + value.octet3 = buff[3 * i + 3]; value.octet4 = 0; - - valbin[i] = buff[3*i+1]*256*256*256 + buff[3*i+2]*256*256 + buff[3*i+3]*256; + + valbin[i] = buff[3 * i + 1] * 256 * 256 * 256 + buff[3 * i + 2] * 256 * 256 + buff[3 * i + 3] * 256; memcpy(&values[i], &valbin[i], sizeof(uint32_t)); - FILE* allRawDataFile = fopen("AllRawData.csv" , "a+"); - if(i-1==lastIndex){ - fprintf(rawDataFile, "%d\n", values[i]/256); - fprintf(allRawDataFile, "%d\n", values[i]/256); + FILE *allRawDataFile = fopen("AllRawData.csv", "a+"); + if (i - 1 == lastIndex) + { + fprintf(rawDataFile, "%d\n", values[i] / 256); + fprintf(allRawDataFile, "%d\n", values[i] / 256); } - else{ - fprintf(rawDataFile, "%d,", values[i]/256); - fprintf(allRawDataFile, "%d,", values[i]/256); + else + { + fprintf(rawDataFile, "%d,", values[i] / 256); + fprintf(allRawDataFile, "%d,", values[i] / 256); } - fclose(allRawDataFile); + fclose(allRawDataFile); } } - cptData++; - //sleep(0.004); //simul freq here + cptData++; + // sleep(0.004); //simul freq here - cptValue++; - return true; - } - else { + cptValue++; + return true; + } + else + { return false; } } } -void *threadSimulateFlux(void *vargp){ +void *threadSimulateFlux(void *vargp) +{ char *fileName = createNewRawDataFileName(); - FILE *rawDataFile = fopen(fileName,"w+"); + FILE *rawDataFile = fopen(fileName, "w+"); - while(writeOneRawData(rawDataFile)){ - if(cptData == nRowRawData){ + while (writeOneRawData(rawDataFile)) + { + if (cptData == nRowRawData) + { fclose(rawDataFile); cptData = 0; cptFile++; - //create struct here - queueAddLastQ(firstRawDataQueue , fileName , strlen(fileName)); - //prepare next file now + // create struct here + queueAddLastQ(firstRawDataQueue, fileName, strlen(fileName)); + // prepare next file now fileName = createNewRawDataFileName(); - FILE *rawDataFile = fopen(fileName,"w+"); + FILE *rawDataFile = fopen(fileName, "w+"); } } rawDataWriteFlag = false; diff --git a/Code-C/simulateFlux.h b/Code-C/simulateFlux.h index ea865bf..36363f9 100644 --- a/Code-C/simulateFlux.h +++ b/Code-C/simulateFlux.h @@ -4,6 +4,7 @@ #include #include #include +#define __USE_ISOC11 1 #include typedef struct { diff --git a/Code-C/test.c b/Code-C/test.c deleted file mode 100644 index eaed558..0000000 --- a/Code-C/test.c +++ /dev/null @@ -1,46 +0,0 @@ - - - - -int main(int argc, char *argv[]){ - if (argc == 1) - usage(argc, argv); - - // start test - fprintf(stderr, "=> Start test \"%s\"\n", argv[1]); - int ok = 1; - if (strcmp("dummy", argv[1]) == 0) - ok = test_dummy(); - else if (strcmp("is_lighted",argv[1]) == 0){ - ok = test_game_is_lighted(); - }else if(strcmp("has_error",argv[1]) == 0){ - ok = test_game_has_error(); - }else if(strcmp("check_move",argv[1]) == 0){ - ok = test_game_check_move(); - }else if(strcmp("game_is_over",argv[1]) == 0){ - ok = test_game_is_over(); - }else if(strcmp("play_move",argv[1]) == 0){ - ok = test_game_play_move(); - }else if(strcmp("game_restart",argv[1]) == 0){ - ok = test_game_restart(); - }else if(strcmp("update_flags",argv[1]) == 0){ - ok = test_game_update_flags(); - }else if(strcmp("default_solution",argv[1]) == 0){ - ok = test_game_default_solution(); - }else{ - fprintf(stderr, "Error: test \"%s\" not found!\n", argv[1]); - exit(EXIT_FAILURE); - } - - // print test result - if (ok == 0) - { - fprintf(stderr, "Test \"%s\" finished: SUCCESS\n", argv[1]); - return EXIT_SUCCESS; - } - else - { - fprintf(stderr, "Test \"%s\" finished: FAILURE\n", argv[1]); - return EXIT_FAILURE; - } -} \ No newline at end of file From 8bd977ba6220aff94ef13a939853aa74267ad074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Tue, 21 Jun 2022 17:47:27 +0200 Subject: [PATCH 19/35] fix some warnings --- Code-C/getArray.c | 84 +++++++++++++++++++++++++------------------ Code-C/getArray.h | 4 +-- Code-C/main.c | 13 +++++-- Code-C/simulateFlux.c | 7 ++-- 4 files changed, 67 insertions(+), 41 deletions(-) diff --git a/Code-C/getArray.c b/Code-C/getArray.c index bdc7a79..a74282c 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -8,9 +8,9 @@ long **getlongArray(int N, int M) /* Allocate the array */ /* Check if allocation succeeded. (check for NULL pointer) */ int i; long **array; - array = (long **) malloc(N*sizeof(long *)); - for(i = 0 ; i < N ; i++) - array[i] = (long *) malloc( M*sizeof(long) ); + array = (long **)malloc(N * sizeof(long *)); + for (i = 0; i < N; i++) + array[i] = (long *)malloc(M * sizeof(long)); return array; } @@ -19,69 +19,82 @@ double **getDoubleArray(int N, int M) /* Allocate the array */ /* Check if allocation succeeded. (check for NULL pointer) */ int i; double **array; - array = (double **) malloc(N*sizeof(double *)); - for(i = 0 ; i < N ; i++) - array[i] = (double *) malloc( M*sizeof(double)); + array = (double **)malloc(N * sizeof(double *)); + for (i = 0; i < N; i++) + array[i] = (double *)malloc(M * sizeof(double)); return array; } -void fillArrayWithRawData(char *rawDataFileName,long** p, int N, int M) { +void fillArrayWithRawData(char *rawDataFileName, long **p, int N, int M) +{ int i, j; char *buffer; size_t bufsize = 200; buffer = (char *)malloc(bufsize * sizeof(char)); - char* token; + int token; - FILE *f = fopen(rawDataFileName,"r"); + FILE *f = fopen(rawDataFileName, "r"); - for(i = 0 ; i < N ; i++){ - if (!getline(&buffer, &bufsize, f)) break; // condition d'arret de la boucle si fichier fini + for (i = 0; i < N; i++) + { + if (!getline(&buffer, &bufsize, f)) + break; // condition d'arret de la boucle si fichier fini j = 0; - while((token = strsep(&buffer,",")) != NULL){ // séparation valeur par virgule initiale : csv - p[i][j] = atoi(token); + while ((token = strsep(&buffer, ",")) != 0) + { // séparation valeur par virgule initiale : csv + p[i][j] = token; j++; } } fclose(f); - } /** * @brief print all the element of a bidimensionnal array p of shape : N x M */ -void printArrayData(long** p, int N, int M) { - int i, j; - for(i = 0 ; i < N ; i++){ - printf("line n°%d : " , i); - for(int j = 0 ; j < M ; j++){ - printf("%ld , " , p[i][j]); - if(j==(M-1)) printf("\n"); +void printArrayData(long **p, int N, int M) +{ + for (int i = 0; i < N; i++) + { + printf("line n°%d : ", i); + for (int j = 0; j < M; j++) + { + printf("%ld , ", p[i][j]); + if (j == (M - 1)) + printf("\n"); } } } /** - * @brief verify if all the element of an array are not NULL, return - * + * @brief verify if all the element of an array are not NULL, return + * * @param p array to check * @param N number of rows in p * @param M number of columns in p * @return true if the array contaign no NULL element * @return false if at least one element is null */ -bool checkArrayFullyFill(long **p, int N){ - for(int i = 0 ; i < N ; i++){ - if(p[i][0] == '\0'){ return false; } +bool checkArrayFullyFill(long **p, int N) +{ + for (int i = 0; i < N; i++) + { + if (p[i][0] == '\0') + { + return false; + } } return true; } /** * @brief free memory allocate to an array p - * + * * @param p array to free memory * @param N number of rows in array */ -void freeArray(long **p, int N) { - for(int i = 0 ; i < N ; i++){ +void freeArray(long **p, int N) +{ + for (int i = 0; i < N; i++) + { free(p[i]); } free(p); @@ -89,19 +102,20 @@ void freeArray(long **p, int N) { /** * @brief Get the Raw Data Array object - * + * * @param rawDataFileName name of the file to use to file the array * @param N numbers of rows to have i the array * @param M numbers of columns to have i the array * @return long** the array fill with raw data */ -long **getRawDataArray(char* rawDataFileName){ +long **getRawDataArray(char *rawDataFileName) +{ long **p; p = getlongArray(nRowRawData, nCol); - fillArrayWithRawData(rawDataFileName,p ,nRowRawData, nCol); - //if(checkArrayFullyFill(p,nRow)){ - //clearRawData(N); - return p; + fillArrayWithRawData(rawDataFileName, p, nRowRawData, nCol); + // if(checkArrayFullyFill(p,nRow)){ + // clearRawData(N); + return p; /*} else{ return NULL; diff --git a/Code-C/getArray.h b/Code-C/getArray.h index a53bd0c..6cd847e 100644 --- a/Code-C/getArray.h +++ b/Code-C/getArray.h @@ -6,7 +6,7 @@ #include long **getRawDataArray(char *rawDataFileName); -void printArrayData(long** p, int N, int M); +void printArrayData(long **p, int N, int M); void freeArray(long **p, int N); -bool checkArrayFullyFill(long **p, int N ); +bool checkArrayFullyFill(long **p, int N); double **getDoubleArray(int N, int M); \ No newline at end of file diff --git a/Code-C/main.c b/Code-C/main.c index dd1fe9b..3bcb289 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -42,6 +42,7 @@ void *threadCalculPower(void *vargp) remove(fileName); } } + return NULL; } void *threadCalculAverage(void *vargp) @@ -58,6 +59,7 @@ void *threadCalculAverage(void *vargp) remove(fileName); } } + return NULL; } void *threadCalculBoth(void *vargp) @@ -75,6 +77,7 @@ void *threadCalculBoth(void *vargp) remove(fileName); } } + return NULL; } void *threadCalculGrowthRate(void *vargp) @@ -124,6 +127,7 @@ void *threadCalculGrowthRate(void *vargp) remove(fileName); } } + return NULL; } int main(int argc, char **argv) @@ -144,9 +148,14 @@ int main(int argc, char **argv) firstRawDataQueue = queueCreateEmpty(); // change this for create empty pthread_t rawData; - pthread_create(&rawData, NULL, threadSimulateFlux, (void *)&rawData); + if (pthread_create(&rawData, NULL, threadSimulateFlux, "threadSimulflux") != 0) + { + perror("pthread_create() error"); + exit(1); + } + pthread_t calcul; - pthread_create(&calcul, NULL, threadCalculGrowthRate, (void *)&calcul); + pthread_create(&calcul, NULL, threadCalculGrowthRate, "threadCalcul"); pthread_exit(NULL); } \ No newline at end of file diff --git a/Code-C/simulateFlux.c b/Code-C/simulateFlux.c index 460dd7b..fd31523 100644 --- a/Code-C/simulateFlux.c +++ b/Code-C/simulateFlux.c @@ -123,7 +123,6 @@ bool writeOneRawData(FILE *rawDataFile) char buff2[18]; int32_t values[8]; uint32_t valbin[8]; - quartet value; if (fread(&buff, 26, 1, stdin)) { @@ -146,11 +145,13 @@ bool writeOneRawData(FILE *rawDataFile) strncpy(&buff[8], buff2, 18); } } + int lastIndex = lastIndexCaptor(); for (int i = 1; i < 9; i++) { if (selectionCaptors[i - 1]) { + quartet value; value.octet1 = buff[3 * i + 1]; value.octet2 = buff[3 * i + 2]; value.octet3 = buff[3 * i + 3]; @@ -183,6 +184,7 @@ bool writeOneRawData(FILE *rawDataFile) return false; } } + return false; } void *threadSimulateFlux(void *vargp) @@ -202,8 +204,9 @@ void *threadSimulateFlux(void *vargp) queueAddLastQ(firstRawDataQueue, fileName, strlen(fileName)); // prepare next file now fileName = createNewRawDataFileName(); - FILE *rawDataFile = fopen(fileName, "w+"); + rawDataFile = fopen(fileName, "w+"); } } rawDataWriteFlag = false; + return NULL; } From 5e57356f85d5e2e7dac05e740098acc8bd406cd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Thu, 23 Jun 2022 16:24:47 +0200 Subject: [PATCH 20/35] add test and modification on queue --- Code-C/CMakeLists.txt | 17 +++-- Code-C/average.c | 47 ++++++++------ Code-C/ctest.c | 144 +++++++++++++++++++++++++++++++++++++++--- Code-C/main.c | 9 ++- Code-C/queue.c | 45 +++++++++---- Code-C/queue.h | 5 +- 6 files changed, 216 insertions(+), 51 deletions(-) diff --git a/Code-C/CMakeLists.txt b/Code-C/CMakeLists.txt index ee0dd0f..3fdd809 100644 --- a/Code-C/CMakeLists.txt +++ b/Code-C/CMakeLists.txt @@ -6,8 +6,8 @@ enable_testing() set(CMAKE_C_FLAGS "-std=c99 -g -Wall") add_executable(exect fileGestion.c getArray.c average.c growthRate.c power.c queue.c simulateFlux.c main.c) - # add_executable(exect main.c simulateFlux.c queue.c power.c growthRate.c average.c getArray.c fileGestion.c) + find_package(Threads) target_link_libraries(exect ${CMAKE_THREAD_LIBS_INIT} m) @@ -18,10 +18,19 @@ add_executable(ctest fileGestion.c getArray.c average.c growthRate.c queue.c sim target_link_libraries(ctest ${CMAKE_THREAD_LIBS_INIT} m) add_test(test_queueCreateEmpty ./ctest queueCreateEmpty) -add_test(test_queueSetCharLen ./ctest queueSetCharLen) +add_test(test_queueCreateE ./ctest queueCreateE) + +add_test(test_queueSetCharLen ./ctest queueSetCharLen) +add_test(test_queueGetCharLen ./ctest queueGetCharLen) + +add_test(test_queueSetTabChar ./ctest queueSetTabChar) +add_test(test_queueGetTabChar ./ctest queueGetTabChar) -# add_test(test_queueGetTabChar ./ctest queueGetTabChar) add_test(test_queueSetNextE ./ctest queueSetNextE) add_test(test_queueGetNextE ./ctest queueGetNextE) -add_test(test_queueGetCharLen ./ctest queueGetCharLen) \ No newline at end of file +add_test(test_queueAddLastQ ./ctest queueAddLastQ) +add_test(test_queueRmLastE ./ctest queueRmLastE) +add_test(test_queueRmFrstE ./ctest queueRmFrstE) +add_test(test_queueNextDelFrst ./ctest queueNextDelFrst) + diff --git a/Code-C/average.c b/Code-C/average.c index 317acd9..749881d 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -5,41 +5,50 @@ #include "queue.h" /** * @brief realize the average calcul - * + * * @param p array with all the values that will be used for the calcul * @param averageArray array where results are stocked */ -void averageCalculation(long **p, double averageArray[]){ - for(int i = 1; i < nCol; i++){ +void averageCalculation(long **p, double averageArray[]) +{ + for (int i = 1; i < nCol; i++) + { int j = 0; averageArray[i] = 0; - while(j < nRowRawData){ - averageArray[i] += p[i][j]; + while (j < nRowRawData) + { + averageArray[i - 1] += p[i][j]; j++; } - //printf("%f , %f\n", averageArray[i] , averageArray[i] / nRowRawData); + // printf("%f , %f\n", averageArray[i] , averageArray[i] / nRowRawData); averageArray[i] /= nRowRawData; } } /** * @brief function that realize all the action to write one lign in the file averageData.csv - * + * * @param rawDataFileName name of the raw data file to use to realize the calcul */ -void averageFunction(char* rawDataFileName , double **aver){ +void averageFunction(char *rawDataFileName, double **aver) +{ long **p = getRawDataArray(rawDataFileName); - double averN[nCol -1]; - if(p !=NULL){ - if(p !=NULL){ - if(aver == NULL){ - averageCalculation(p,averN); - appendDataInFile("averageData.csv",averN,nCol-1); - }else{ - averageCalculation(p,aver[1]); - appendDataInFile("averageData.csv",aver[1],nCol-1); + double averN[nCol - 1]; + if (p != NULL) + { + if (p != NULL) + { + if (aver == NULL) + { + averageCalculation(p, averN); + appendDataInFile("averageData.csv", averN, nCol - 1); } - freeArray(p,nRowRawData); - } + else + { + averageCalculation(p, aver[1]); + appendDataInFile("averageData.csv", aver[1], nCol - 1); + } + freeArray(p, nRowRawData); + } } } \ No newline at end of file diff --git a/Code-C/ctest.c b/Code-C/ctest.c index 1cffdd3..f5dfdb2 100644 --- a/Code-C/ctest.c +++ b/Code-C/ctest.c @@ -24,7 +24,7 @@ int nbRowBinFile = 900011; int nbRowIgnore = 19; Pqueue firstRawDataQueue; -// Captor 1 2 3 4 5 6 7 8 +// Captor 1 2 3 4 5 6 7 8 bool selectionCaptors[] = {true, false, true, false, false, false, true, false}; int cptData = 0; @@ -48,6 +48,22 @@ bool test_queueCreateEmpty() return EXIT_SUCCESS; } +bool test_queueCreateE() +{ + const char tabChar[12] = "PetitNavire\0"; + Pqueue new = queueCreateE(12, tabChar); + + const char *test = queueGetTabChar(new); + + assert(queueGetCharLen(new) == 12); + assert(test != NULL); + assert(strcmp(test, tabChar) == 0); + assert(queueGetNextE(new) == NULL); + + queueRmFrstE(new); + return EXIT_SUCCESS; +} + bool test_queueSetCharLen() { Pqueue new = queueCreateEmpty(); @@ -63,20 +79,38 @@ bool test_queueSetCharLen() return EXIT_SUCCESS; } -bool test_queueGetTabChar() -{ // Define later +bool test_queueSetTabChar() +{ + // Set and Get tabChar are similar because use for same test Pqueue new = queueCreateEmpty(); - // const char tabChar[12] = "PetitNavire\0" - queueSetTabChar(new, 13, NULL); + const char tabChar[12] = "PetitNavire\0"; + queueSetTabChar(new, 12, tabChar); + const char *test = queueGetTabChar(new); - assert(queueGetCharLen(new) == 13); - assert(queueGetTabChar(new) == NULL); + assert(queueGetCharLen(new) == 12); + assert(test != NULL); + assert(strcmp(test, tabChar) == 0); assert(queueGetNextE(new) == NULL); - // queueDelAll(new); queueRmFrstE(new); + return EXIT_SUCCESS; +} +bool test_queueGetTabChar() +{ + Pqueue new = queueCreateEmpty(); + + const char tabChar[12] = "PetitNavire\0"; + queueSetTabChar(new, 12, tabChar); + const char *test = queueGetTabChar(new); + + assert(queueGetCharLen(new) == 12); + assert(test != NULL); + assert(strcmp(test, tabChar) == 0); + assert(queueGetNextE(new) == NULL); + + queueRmFrstE(new); return EXIT_SUCCESS; } @@ -120,6 +154,70 @@ bool test_queueGetCharLen() return EXIT_SUCCESS; } +bool test_queueAddLastQ() +{ + Pqueue new = queueCreateEmpty(), next = NULL; + const char tabChar[12] = "PetitNavire\0"; + queueAddLastQ(new, tabChar, 12); + next = queueGetNextE(new); + + assert(next != NULL); + assert(queueGetCharLen(next) == 12); + assert(strcmp(queueGetTabChar(next), tabChar) == 0); + assert(queueGetNextE(next) == NULL); + + queueDelAll(new); + return EXIT_SUCCESS; +} +bool test_queueRmLastE() +{ + Pqueue new = queueCreateEmpty(); + const char tabChar[12] = "PetitNavire\0"; + queueAddLastQ(new, tabChar, 12); + queueAddLastQ(new, tabChar, 12); + + assert(queueGetNextE(new) != NULL && queueGetNextE(queueGetNextE(new)) != NULL && queueGetNextE(queueGetNextE(queueGetNextE(new))) == NULL); + queueRmLastE(new); + assert(queueGetNextE(new) != NULL && queueGetNextE(queueGetNextE(new)) == NULL); + + queueDelAll(new); + return EXIT_SUCCESS; +} + +bool test_queueRmFrstE() +{ + Pqueue new = queueCreateEmpty(), second; + const char tabChar[12] = "PetitNavire\0"; + queueAddLastQ(new, tabChar, 12); + queueAddLastQ(new, tabChar, 12); + second = queueGetNextE(new); + + assert(queueGetNextE(new) != NULL && queueGetNextE(queueGetNextE(new)) != NULL && queueGetNextE(queueGetNextE(queueGetNextE(new))) == NULL); + new = queueRmFrstE(new); + assert((new == second) && (queueGetNextE(new) != NULL) && (queueGetNextE(queueGetNextE(new)) == NULL)); + + queueDelAll(new); + return EXIT_SUCCESS; +} + +bool test_queueNextDelFrst() +{ + Pqueue new = queueCreateEmpty(), second; + const char tabChar[12] = "PetitNavire\0"; + queueAddLastQ(new, tabChar, 12); + queueAddLastQ(new, tabChar, 12); + second = queueGetNextE(new); + + assert(queueGetNextE(new) != NULL && queueGetNextE(queueGetNextE(new)) != NULL && queueGetNextE(queueGetNextE(queueGetNextE(new))) == NULL); + new = queueNextDelFrst(new); + assert((new == second) && (queueGetNextE(new) != NULL) && (queueGetNextE(queueGetNextE(new)) == NULL)); + + queueDelAll(new); + return EXIT_SUCCESS; +} + +/***************** Main test start *****************/ + void usage(int argc, char *argv[]) { fprintf(stderr, "Usage: %s [<...>]\n", argv[0]); @@ -135,7 +233,13 @@ int main(int argc, char *argv[]) fprintf(stderr, "=> Start test \"%s\"\n", argv[1]); int ok = 1; if (strcmp("queueCreateEmpty", argv[1]) == 0) + { ok = test_queueCreateEmpty(); + } + else if (strcmp("queueCreateE", argv[1]) == 0) + { + ok = test_queueCreateE(); + } else if (strcmp("queueSetCharLen", argv[1]) == 0) { ok = test_queueSetCharLen(); @@ -159,8 +263,28 @@ int main(int argc, char *argv[]) else if (strcmp("queueGetTabChar", argv[1]) == 0) { ok = test_queueGetTabChar(); - // }else if(strcmp("update_flags",argv[1]) == 0){ - // ok = test_game_update_flags(); + } + else if (strcmp("queueSetTabChar", argv[1]) == 0) + { + ok = test_queueSetTabChar(); + } + else if (strcmp("queueAddLastQ", argv[1]) == 0) + { + ok = test_queueAddLastQ(); + } + else if (strcmp("queueRmLastE", argv[1]) == 0) + { + ok = test_queueRmLastE(); + } + else if (strcmp("queueRmFrstE", argv[1]) == 0) + { + ok = test_queueRmFrstE(); + } + else if (strcmp("queueNextDelFrst", argv[1]) == 0) + { + ok = test_queueNextDelFrst(); + // }else if(strcmp("default_solution",argv[1]) == 0){ + // ok = test_game_default_solution(); // }else if(strcmp("default_solution",argv[1]) == 0){ // ok = test_game_default_solution(); } diff --git a/Code-C/main.c b/Code-C/main.c index 3bcb289..b3b69ae 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -150,12 +150,15 @@ int main(int argc, char **argv) pthread_t rawData; if (pthread_create(&rawData, NULL, threadSimulateFlux, "threadSimulflux") != 0) { - perror("pthread_create() error"); + perror("threadSimulflux() error"); exit(1); } pthread_t calcul; - pthread_create(&calcul, NULL, threadCalculGrowthRate, "threadCalcul"); - + if (pthread_create(&calcul, NULL, threadCalculAverage, "threadCalcul")) + { + perror("threadCalculAverage() error"); + exit(1); + } pthread_exit(NULL); } \ No newline at end of file diff --git a/Code-C/queue.c b/Code-C/queue.c index c44378e..72e5f7c 100644 --- a/Code-C/queue.c +++ b/Code-C/queue.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "queue.h" /** @@ -144,15 +145,15 @@ Pqueue queueCreateE(int lenChar, const char *_tabChar) Pqueue queueRmLastE(Pqueue elem) { assert(elem); - Pqueue tmp = elem, previous = NULL; - while (elem->pNextE != NULL) + Pqueue tmp = elem, current = NULL; + while (tmp->pNextE != NULL) { - previous = tmp; + current = tmp; tmp = queueGetNextE(tmp); } free(tmp->tabChar); free(tmp); - previous->pNextE = NULL; + current->pNextE = NULL; return elem; } @@ -160,15 +161,18 @@ Pqueue queueRmLastE(Pqueue elem) * @brief remove and free the first element of queue * * @param elem target to remove (the element need to be the first) + * @return next element of the queue */ -void queueRmFrstE(Pqueue elem) +Pqueue queueRmFrstE(Pqueue elem) { assert(elem); + Pqueue next = queueGetNextE(elem); if (elem->tabChar != NULL) { free(elem->tabChar); } free(elem); + return next; } /** @@ -195,16 +199,31 @@ Pqueue queueNextDelFrst(Pqueue elem) void queueAddLastQ(Pqueue elem, const char *str, int len) { assert(elem); - assert(str); - Pqueue next = elem, previous = NULL; - while (next->pNextE != NULL) + bool str1 = true; + if (len == 0) { - previous = next; - next = queueGetNextE(next); + str = false; } - previous = next; - next = queueCreateE(len, str); - queueSetNextE(previous, next); + else + { + assert(str); + } + + Pqueue current = elem, next = NULL; + while (current->pNextE != NULL) + { + current = queueGetNextE(current); + } + + if (str1 == true) + { + next = queueCreateE(len, str); + } + else + { + next = queueCreateEmpty(); + } + queueSetNextE(current, next); } /** diff --git a/Code-C/queue.h b/Code-C/queue.h index 156d3f0..ecb311e 100644 --- a/Code-C/queue.h +++ b/Code-C/queue.h @@ -91,8 +91,9 @@ Pqueue queueRmLastE(Pqueue elem); * @brief remove and free the first element of queue * * @param elem target to remove (the element need to be the first) + * @return the next element of elem */ -void queueRmFrstE(Pqueue elem); +Pqueue queueRmFrstE(Pqueue elem); // same of queueNextDelFrst() /** * @brief delete the first value and return the next value @@ -100,7 +101,7 @@ void queueRmFrstE(Pqueue elem); * @param elem * @return Pqueue */ -Pqueue queueNextDelFrst(Pqueue elem); +Pqueue queueNextDelFrst(Pqueue elem); // same of queueRmFrstE() /************** print function **************/ From ee3d1315c0d2cb409f7f2219c514701ff001123f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Fri, 24 Jun 2022 15:42:25 +0200 Subject: [PATCH 21/35] modif on frequency in simulflux and fix average --- Code-C/CMakeLists.txt | 3 +++ Code-C/main.c | 17 +++++++++++++---- Code-C/power.c | 2 +- Code-C/simulateFlux.c | 17 ++++++++++++----- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/Code-C/CMakeLists.txt b/Code-C/CMakeLists.txt index 3fdd809..5b391f7 100644 --- a/Code-C/CMakeLists.txt +++ b/Code-C/CMakeLists.txt @@ -5,6 +5,9 @@ include(CTest) enable_testing() set(CMAKE_C_FLAGS "-std=c99 -g -Wall") +file(MAKE_DIRECTORY RawDataFiles) +file(MAKE_DIRECTORY Executable) + add_executable(exect fileGestion.c getArray.c average.c growthRate.c power.c queue.c simulateFlux.c main.c) # add_executable(exect main.c simulateFlux.c queue.c power.c growthRate.c average.c getArray.c fileGestion.c) diff --git a/Code-C/main.c b/Code-C/main.c index b3b69ae..e5f6c0e 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -49,6 +49,7 @@ void *threadCalculAverage(void *vargp) { Pqueue rawDataQueue = firstRawDataQueue; char *fileName; + while (rawDataWriteFlag) { while (queueGetNextE(rawDataQueue) != NULL) @@ -124,7 +125,7 @@ void *threadCalculGrowthRate(void *vargp) growthRateFunction(dataLignPw, "growthRatePw.csv"); growthRateFunction(dataLignPw, "growthRateAv.csv"); } - remove(fileName); + // remove(fileName); } } return NULL; @@ -154,11 +155,19 @@ int main(int argc, char **argv) exit(1); } - pthread_t calcul; - if (pthread_create(&calcul, NULL, threadCalculAverage, "threadCalcul")) + // pthread_t calculAverage; + // if (pthread_create(&calculAverage, NULL, threadCalculAverage, "threadCalculAverage")) + // { + // perror("threadCalculAverage() error"); + // exit(1); + // } + + pthread_t calculGrowthRate; + if (pthread_create(&calculGrowthRate, NULL, threadCalculGrowthRate, "threadCalculGrowthRate")) { - perror("threadCalculAverage() error"); + perror("threadcalculGrowthRate() error"); exit(1); } + pthread_exit(NULL); } \ No newline at end of file diff --git a/Code-C/power.c b/Code-C/power.c index 4202d9f..596110f 100644 --- a/Code-C/power.c +++ b/Code-C/power.c @@ -37,7 +37,7 @@ void powerCalculation(long **p, double powerArray[]) void powerFunction(char *rawDataFileName, double **pw) { long **p = getRawDataArray(rawDataFileName); - printArrayData(p, nRowRawData, nCol); + // printArrayData(p, nRowRawData, nCol); double pww[nCol - 1]; if (p != NULL) { diff --git a/Code-C/simulateFlux.c b/Code-C/simulateFlux.c index fd31523..14b5e2e 100644 --- a/Code-C/simulateFlux.c +++ b/Code-C/simulateFlux.c @@ -1,9 +1,9 @@ #include "simulateFlux.h" #include "initialParameters.h" #include "queue.h" -//#include -#include "time.h" +#include +#include /** * @brief convert an interger N into a char* @@ -46,7 +46,7 @@ char *convertIntegerToChar(int N) */ char *createNewRawDataFileName() { - char *fileName = "../RawDataFiles/RawData"; + char *fileName = "RawDataFiles/RawData"; char *extension = ".csv\0"; char *fileNumber = convertIntegerToChar(cptFile); // char *fileNumber; @@ -94,7 +94,7 @@ int64_t millis() { struct timespec now; timespec_get(&now, TIME_UTC); - return ((int64_t)now.tv_sec) * 1000 + ((int64_t)now.tv_nsec) / 1000000; + return ((int64_t)((int64_t)now.tv_sec) * 1000 + ((int64_t)now.tv_nsec) / 1000000); } int lastIndexCaptor() @@ -133,6 +133,7 @@ bool writeOneRawData(FILE *rawDataFile) fprintf(timeFile, "%ld\n", millis()); fclose(timeFile); fprintf(rawDataFile, "%ld,", millis()); + if (strncmp(buff, "#################\n", (size_t)18) == 0) { if (!(fread(&buff2, 18, 1, stdin))) @@ -174,7 +175,12 @@ bool writeOneRawData(FILE *rawDataFile) } } cptData++; - // sleep(0.004); //simul freq here + + // simul freq here + // struct timespec ts; + // ts.tv_sec = 0; + // ts.tv_nsec = 4 * 1000000; + // nanosleep(&ts, &ts); cptValue++; return true; @@ -195,6 +201,7 @@ void *threadSimulateFlux(void *vargp) while (writeOneRawData(rawDataFile)) { + if (cptData == nRowRawData) { fclose(rawDataFile); From 1eb7ec26b3461ceb389458576f3b2fdaf50eac12 Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Fri, 24 Jun 2022 15:45:25 +0200 Subject: [PATCH 22/35] create code py for testing calcul --- Code-C/rmRawData.sh | 6 ------ Py-Script/data.py | 2 ++ 2 files changed, 2 insertions(+), 6 deletions(-) delete mode 100644 Code-C/rmRawData.sh create mode 100644 Py-Script/data.py diff --git a/Code-C/rmRawData.sh b/Code-C/rmRawData.sh deleted file mode 100644 index d734d9a..0000000 --- a/Code-C/rmRawData.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -cd ../RawDataFiles -for i in * -do - rm $i -done \ No newline at end of file diff --git a/Py-Script/data.py b/Py-Script/data.py new file mode 100644 index 0000000..07ff604 --- /dev/null +++ b/Py-Script/data.py @@ -0,0 +1,2 @@ +import numpy as np + From b464ff154139611730e66850c1506e5d17b438b6 Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Fri, 24 Jun 2022 17:17:28 +0200 Subject: [PATCH 23/35] try to fix getArray --- Code-C/average.c | 5 +- Code-C/getArray.c | 15 +++--- Py-Script/courbe.py | 112 ++++++++------------------------------------ 3 files changed, 30 insertions(+), 102 deletions(-) diff --git a/Code-C/average.c b/Code-C/average.c index 749881d..73ba64f 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -17,10 +17,11 @@ void averageCalculation(long **p, double averageArray[]) averageArray[i] = 0; while (j < nRowRawData) { - averageArray[i - 1] += p[i][j]; + printf("pij = %ld\n" , p[i][j]); + averageArray[i - 1] += (double)p[i][j]; + printf("%f , %ld\n", averageArray[i] , p[i][j]); j++; } - // printf("%f , %f\n", averageArray[i] , averageArray[i] / nRowRawData); averageArray[i] /= nRowRawData; } } diff --git a/Code-C/getArray.c b/Code-C/getArray.c index a74282c..f14b10c 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -31,19 +31,20 @@ void fillArrayWithRawData(char *rawDataFileName, long **p, int N, int M) char *buffer; size_t bufsize = 200; buffer = (char *)malloc(bufsize * sizeof(char)); - int token; + char * token; FILE *f = fopen(rawDataFileName, "r"); for (i = 0; i < N; i++) { - if (!getline(&buffer, &bufsize, f)) - break; // condition d'arret de la boucle si fichier fini - j = 0; - while ((token = strsep(&buffer, ",")) != 0) + char *t , *c1, *c2 , *c3; + while (fscanf(f , "%s,%s,%s,%s\n",t,c1,c2,c3)) { // séparation valeur par virgule initiale : csv - p[i][j] = token; - j++; + printf("%s,%s,%s,%s",t,c1,c2,c3); + p[i][0] = atol(t); + p[i][1] = atol(c1); + p[i][2] = atol(c2); + p[i][3] = atol(c3); } } fclose(f); diff --git a/Py-Script/courbe.py b/Py-Script/courbe.py index 392ff7d..f6591a2 100644 --- a/Py-Script/courbe.py +++ b/Py-Script/courbe.py @@ -5,100 +5,26 @@ import struct import csv import sys -#"C:\Users\quent\OneDrive\Bureau\ENSC\TransD\Framboisier\02400001.TXT" -#! /usr/bin/env python3 -# -*- coding: UTF-8 -*- +def function(): + + for i in range(1, 10): + rawdata = 'Code-C/RawDataFiles/RawData' + str(i) + '.csv' #Définit le fichier à ouvrir + + with open(rawdata, newline='') as csvfile: + reader = csv.reader(csvfile, quoting=csv.QUOTE_NONNUMERIC) + x = [row for row in reader] + int_x = np.array(x, int) -csv_reader1 = csv.reader(open('./RawDataFiles/RawData1.csv')) #Ouvre le fichier .csv -bigx = float(-sys.maxsize-1) -bigy = float(-sys.maxsize-1) -smallx = float(sys.maxsize) -smally = float(sys.maxsize) -capteurs = [] + for j in range(1,len(int_x[0])): + aver = average(int_x[:,j]) + print("I = " , i ," J = " ,j ," aver = " , aver , '\0') -for ligne in csv_reader1: - capteurs.append(ligne) - if float(ligne[0]) > bigx: - bigx = float(ligne[0]) - if float(ligne[1]) > bigy: - bigy = float(ligne[1]) - if float(ligne[0]) < smallx: - smallx = float(ligne[0]) - if float(ligne[1]) < smally: - smally = float(ligne[1]) + +def average(x): + res = 0 + for i in range(len(x)): + res += x[i] + return res / len(x) -capteurs.sort() -x_arr = [] -y_arr = [] -for capteur in capteurs: - x_arr.append(capteur[0]) - y_arr.append(capteur[1]) - -fig1 = plt.figure(1, figsize = (5.91, 2.758)) -fig2 = plt.figure(1, figsize = (5.91, 2.758)) -fig3 = plt.figure(1, figsize = (5.91, 2.758)) -fig4 = plt.figure(1, figsize = (5.91, 2.758)) -fig5 = plt.figure(1, figsize = (5.91, 2.758)) -fig6 = plt.figure(1, figsize = (5.91, 2.758)) -fig7 = plt.figure(1, figsize = (5.91, 2.758)) -fig8 = plt.figure(1, figsize = (5.91, 2.758)) -fig9 = plt.figure(1, figsize = (5.91, 2.758)) -fig10 = plt.figure(1, figsize = (5.91, 2.758)) - -fig1.xlabel('Temps') -fig1.ylabel('Tension') -fig1.title("Données tableau 1") -fig1.plot(x_arr, y_arr, 'r') - -#fig, (ax1) = plt.subplots(2, 1) - -# Fe = 250000 #Fréquence d'échantillonage -# tstep = 1 / Fe -# y = capteur[:][0] -# y2 = capteur[:][0] -# N = len(y) -# t = np.linspace(0, (N-1) * tstep, N) - -#Légende des plot 1, 2, 3, 4, 5, 6, 7 et 8 -# ax1.set_xlabel('Temps') -# ax1.set_ylabel('Tension') -# ax1.set_title("Données du premier capteur") -# ax1.plot(t, y) - -# ax2.set_xlabel('Temps') -# ax2.set_ylabel('Tension') -# ax2.set_title("Données du deuxième capteur") -# ax2.plot(t, y2) - -# ax3.set_xlabel('Temps') -# ax3.set_ylabel('Tension') -# ax3.set_title("Données du troisième capteur") -# ax3.plot(t, y3) - -# ax4.set_xlabel('Temps') -# ax4.set_ylabel('Tension') -# ax4.set_title("Données du quatrième capteur") -# ax4.plot(t, y4) - -# ax5.set_xlabel('Temps') -# ax5.set_ylabel('Tension') -# ax5.set_title("Données du cinquième capteur") -# ax5.plot(t, y5) - -# ax6.set_xlabel('Temps') -# ax6.set_ylabel('Tension') -# ax6.set_title("Données du sixième capteur") -# ax6.plot(t, y6) - -# ax7.set_xlabel('Temps') -# ax7.set_ylabel('Tension') -# ax7.set_title("Données du septième capteur") -# ax7.plot(t, y7) - -# ax8.set_xlabel('Temps') -# ax8.set_ylabel('Tension') -# ax8.set_title("Données du huitième capteur") -# ax8.plot(t, y8) - -plt.show() #Affiche le tableau à l'écran \ No newline at end of file +function() From fecd2124d74282f66e98c3b688046bded1ace903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Fri, 24 Jun 2022 17:22:33 +0200 Subject: [PATCH 24/35] fix strsep --- Code-C/getArray.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Code-C/getArray.c b/Code-C/getArray.c index f14b10c..635189c 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -31,20 +31,20 @@ void fillArrayWithRawData(char *rawDataFileName, long **p, int N, int M) char *buffer; size_t bufsize = 200; buffer = (char *)malloc(bufsize * sizeof(char)); - char * token; + char *token; FILE *f = fopen(rawDataFileName, "r"); for (i = 0; i < N; i++) { - char *t , *c1, *c2 , *c3; - while (fscanf(f , "%s,%s,%s,%s\n",t,c1,c2,c3)) + long t, c1, c2, c3; + while (fscanf(f, "%ld,%ld,%ld,%ld\n", &t, &c1, &c2, &c3)) { // séparation valeur par virgule initiale : csv - printf("%s,%s,%s,%s",t,c1,c2,c3); - p[i][0] = atol(t); - p[i][1] = atol(c1); - p[i][2] = atol(c2); - p[i][3] = atol(c3); + printf("%ld,%ld,%ld,%ld\n", t, c1, c2, c3); + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + p[i][3] = c3; } } fclose(f); From a8c235bc65673fdb67a474ee36367f93dc4165b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Fri, 24 Jun 2022 17:50:54 +0200 Subject: [PATCH 25/35] first try after first fix strsep --- Code-C/average.c | 6 ++++-- Code-C/getArray.c | 4 ++-- Code-C/main.c | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Code-C/average.c b/Code-C/average.c index 73ba64f..82c72c4 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -11,15 +11,17 @@ */ void averageCalculation(long **p, double averageArray[]) { + printArrayData(p, nRowRawData, nCol); + printf("\n"); for (int i = 1; i < nCol; i++) { int j = 0; averageArray[i] = 0; while (j < nRowRawData) { - printf("pij = %ld\n" , p[i][j]); + printf("pij = %ld\n", p[i][j]); averageArray[i - 1] += (double)p[i][j]; - printf("%f , %ld\n", averageArray[i] , p[i][j]); + // printf("%f , %ld\n", averageArray[i], p[i][j]); j++; } averageArray[i] /= nRowRawData; diff --git a/Code-C/getArray.c b/Code-C/getArray.c index 635189c..f276180 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -38,9 +38,9 @@ void fillArrayWithRawData(char *rawDataFileName, long **p, int N, int M) for (i = 0; i < N; i++) { long t, c1, c2, c3; - while (fscanf(f, "%ld,%ld,%ld,%ld\n", &t, &c1, &c2, &c3)) + while (fscanf(f, "%ld,%ld,%ld,%ld\n", &t, &c1, &c2, &c3) != EOF) { // séparation valeur par virgule initiale : csv - printf("%ld,%ld,%ld,%ld\n", t, c1, c2, c3); + // printf("%ld,%ld,%ld,%ld\n", t, c1, c2, c3); p[i][0] = t; p[i][1] = c1; p[i][2] = c2; diff --git a/Code-C/main.c b/Code-C/main.c index e5f6c0e..3b90d1a 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -96,6 +96,7 @@ void *threadCalculGrowthRate(void *vargp) { rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); + printf("%s\n", fileName); if (i < 2) { if (i == 1) From 1c7d7edaaed0245806ce2b0f5538935709632a03 Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Fri, 24 Jun 2022 18:30:58 +0200 Subject: [PATCH 26/35] ad comment for next time fix --- Code-C/average.c | 6 +++--- Code-C/getArray.c | 43 +++++++++++++++++++++++-------------------- Code-C/getArray.h | 2 +- Code-C/main.c | 12 ++++++------ Code-C/simulateFlux.c | 1 + Py-Script/data.py | 2 -- 6 files changed, 34 insertions(+), 32 deletions(-) delete mode 100644 Py-Script/data.py diff --git a/Code-C/average.c b/Code-C/average.c index 82c72c4..3fde2bf 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -11,15 +11,15 @@ */ void averageCalculation(long **p, double averageArray[]) { - printArrayData(p, nRowRawData, nCol); - printf("\n"); + // printArrayData(p, nRowRawData, nCol); + // printf("\n"); for (int i = 1; i < nCol; i++) { int j = 0; averageArray[i] = 0; while (j < nRowRawData) { - printf("pij = %ld\n", p[i][j]); + //printf("pij = %ld\n", p[i][j]); averageArray[i - 1] += (double)p[i][j]; // printf("%f , %ld\n", averageArray[i], p[i][j]); j++; diff --git a/Code-C/getArray.c b/Code-C/getArray.c index f276180..49db610 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -24,10 +24,24 @@ double **getDoubleArray(int N, int M) /* Allocate the array */ array[i] = (double *)malloc(M * sizeof(double)); return array; } - +/** + * @brief print all the element of a bidimensionnal array p of shape : N x M + */ +void printArrayData(long **p) +{ + for (int i = 0; i < nRowRawData; i++) + { + printf("line n°%d : ", i); + for (int j = 0; j < nCol; j++) + { + printf("%ld , ", p[i][j]); + if (j == (nCol - 1)) + printf("\n"); + } + } +} void fillArrayWithRawData(char *rawDataFileName, long **p, int N, int M) { - int i, j; char *buffer; size_t bufsize = 200; buffer = (char *)malloc(bufsize * sizeof(char)); @@ -35,35 +49,24 @@ void fillArrayWithRawData(char *rawDataFileName, long **p, int N, int M) FILE *f = fopen(rawDataFileName, "r"); - for (i = 0; i < N; i++) + for (int i = 0; i < N; i++) { long t, c1, c2, c3; while (fscanf(f, "%ld,%ld,%ld,%ld\n", &t, &c1, &c2, &c3) != EOF) { // séparation valeur par virgule initiale : csv - // printf("%ld,%ld,%ld,%ld\n", t, c1, c2, c3); + //printf("%ld,%ld,%ld,%ld\n", t, c1, c2, c3); p[i][0] = t; p[i][1] = c1; p[i][2] = c2; p[i][3] = c3; } - } - fclose(f); -} -/** - * @brief print all the element of a bidimensionnal array p of shape : N x M - */ -void printArrayData(long **p, int N, int M) -{ - for (int i = 0; i < N; i++) - { - printf("line n°%d : ", i); - for (int j = 0; j < M; j++) - { - printf("%ld , ", p[i][j]); - if (j == (M - 1)) - printf("\n"); + printf("%ld,%ld,%ld,%ld,\n",p[0][0],p[0][1],p[0][2],p[0][3]); + for(int j = 0; j < nCol; j++){ + printf("p[%d][%d] : %ld\n",i,j,p[i][j]); } } + printArrayData(p); + fclose(f); } /** * @brief verify if all the element of an array are not NULL, return diff --git a/Code-C/getArray.h b/Code-C/getArray.h index 6cd847e..556d0ee 100644 --- a/Code-C/getArray.h +++ b/Code-C/getArray.h @@ -6,7 +6,7 @@ #include long **getRawDataArray(char *rawDataFileName); -void printArrayData(long **p, int N, int M); +void printArrayData(long **p); void freeArray(long **p, int N); bool checkArrayFullyFill(long **p, int N); double **getDoubleArray(int N, int M); \ No newline at end of file diff --git a/Code-C/main.c b/Code-C/main.c index 3b90d1a..9c242a2 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -163,12 +163,12 @@ int main(int argc, char **argv) // exit(1); // } - pthread_t calculGrowthRate; - if (pthread_create(&calculGrowthRate, NULL, threadCalculGrowthRate, "threadCalculGrowthRate")) - { - perror("threadcalculGrowthRate() error"); - exit(1); - } + // pthread_t calculGrowthRate; + // if (pthread_create(&calculGrowthRate, NULL, threadCalculGrowthRate, "threadCalculGrowthRate")) + // { + // perror("threadcalculGrowthRate() error"); + // exit(1); + // } pthread_exit(NULL); } \ No newline at end of file diff --git a/Code-C/simulateFlux.c b/Code-C/simulateFlux.c index 14b5e2e..75fcf77 100644 --- a/Code-C/simulateFlux.c +++ b/Code-C/simulateFlux.c @@ -212,6 +212,7 @@ void *threadSimulateFlux(void *vargp) // prepare next file now fileName = createNewRawDataFileName(); rawDataFile = fopen(fileName, "w+"); + //add test to get p then print it here // p is gotten from fileName file } } rawDataWriteFlag = false; diff --git a/Py-Script/data.py b/Py-Script/data.py deleted file mode 100644 index 07ff604..0000000 --- a/Py-Script/data.py +++ /dev/null @@ -1,2 +0,0 @@ -import numpy as np - From 70e01e558f4fa101a670d00c9155d2a652b7c74b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Mon, 27 Jun 2022 16:35:30 +0200 Subject: [PATCH 27/35] create readme.md and fix issue on recovery data array from file and adaptative array size frome the number of captors --- Code-C/average.c | 4 +- Code-C/fileGestion.c | 46 +++++++++++------- Code-C/getArray.c | 110 +++++++++++++++++++++++++++++++++++++++--- Code-C/main.c | 4 +- Code-C/simulateFlux.c | 2 +- README.md | 13 +++++ chaien.PNG | Bin 0 -> 28981 bytes 7 files changed, 149 insertions(+), 30 deletions(-) create mode 100644 README.md create mode 100644 chaien.PNG diff --git a/Code-C/average.c b/Code-C/average.c index 82c72c4..e913de7 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -11,7 +11,7 @@ */ void averageCalculation(long **p, double averageArray[]) { - printArrayData(p, nRowRawData, nCol); + // printArrayData(p, nRowRawData, nCol); printf("\n"); for (int i = 1; i < nCol; i++) { @@ -19,9 +19,7 @@ void averageCalculation(long **p, double averageArray[]) averageArray[i] = 0; while (j < nRowRawData) { - printf("pij = %ld\n", p[i][j]); averageArray[i - 1] += (double)p[i][j]; - // printf("%f , %ld\n", averageArray[i], p[i][j]); j++; } averageArray[i] /= nRowRawData; diff --git a/Code-C/fileGestion.c b/Code-C/fileGestion.c index 7749080..544d311 100644 --- a/Code-C/fileGestion.c +++ b/Code-C/fileGestion.c @@ -1,37 +1,47 @@ #include "fileGestion.h" - /** * @brief function that delete nRow lign in the beginning of the file rawData.csv . This function is necessary to not deal with the same ligns over and over - * + * * @param nRow number of lign in the beginning of the file rawData.csv that has to be delete */ -void clearRawData(int nRow){ +void clearRawData(int nRow) +{ char buffer[256]; - FILE *f = fopen("newFile.csv","w+"); - FILE *g = fopen("rawData.csv","r"); - for(int i = 0; i < nRow; i++){ //first the program read the first nRow ligns of the csv file but do nothing - fgets(buffer , sizeof buffer , g); + FILE *f = fopen("newFile.csv", "w+"); + FILE *g = fopen("rawData.csv", "r"); + for (int i = 0; i < nRow; i++) + { // first the program read the first nRow ligns of the csv file but do nothing + fgets(buffer, sizeof buffer, g); } - while(1){ //then, till the end of the csv file it copy the lign to a new csv : newFile.csv - if(!fgets(buffer,sizeof buffer , g)) break; - fprintf(f,"%s",buffer); + while (1) + { // then, till the end of the csv file it copy the lign to a new csv : newFile.csv + if (!fgets(buffer, sizeof buffer, g)) + break; + fprintf(f, "%s", buffer); } - remove("rawData.csv"); rename("newFile.csv", "rawData.csv"); //finally we remove the original file and rename the new one to replace rawData.csv - fclose(f); fclose(g); + remove("rawData.csv"); + rename("newFile.csv", "rawData.csv"); // finally we remove the original file and rename the new one to replace rawData.csv + fclose(f); + fclose(g); } /** * @brief use to write one lign in the file "fileName" - * + * * @param array array that contaign all the values to write in the file * @param nCol size of the array (correspond to the number of captor used) */ -void appendDataInFile(char* fileName , double array[], int nCol){ - FILE *f = fopen(fileName,"a+"); - for(int i = 0 ; i < nCol ; i++){ - if( i < nCol-1){ +void appendDataInFile(char *fileName, double array[], int nCol) +{ + FILE *f = fopen(fileName, "a+"); + for (int i = 0; i < nCol; i++) + { + if (i < nCol - 1) + { fprintf(f, "%f , ", array[i]); - } else { + } + else + { fprintf(f, "%f\n", array[i]); } } diff --git a/Code-C/getArray.c b/Code-C/getArray.c index f276180..1fe1691 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -27,7 +27,7 @@ double **getDoubleArray(int N, int M) /* Allocate the array */ void fillArrayWithRawData(char *rawDataFileName, long **p, int N, int M) { - int i, j; + int i = 0, j; char *buffer; size_t bufsize = 200; buffer = (char *)malloc(bufsize * sizeof(char)); @@ -35,20 +35,118 @@ void fillArrayWithRawData(char *rawDataFileName, long **p, int N, int M) FILE *f = fopen(rawDataFileName, "r"); - for (i = 0; i < N; i++) + long t, c1, c2, c3, c4, c5, c6, c7, c8; + switch (M) { - long t, c1, c2, c3; - while (fscanf(f, "%ld,%ld,%ld,%ld\n", &t, &c1, &c2, &c3) != EOF) - { // séparation valeur par virgule initiale : csv - // printf("%ld,%ld,%ld,%ld\n", t, c1, c2, c3); + case 2: + while (fscanf(f, "%ld,%ld[^\n] ", &t, &c1) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + i++; + } + break; + case 3: + while (fscanf(f, "%ld,%ld,%ld[^\n] ", &t, &c1, &c2) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + i++; + } + break; + case 4: + while (fscanf(f, "%ld,%ld,%ld,%ld[^\n] ", &t, &c1, &c2, &c3) != EOF) + { p[i][0] = t; p[i][1] = c1; p[i][2] = c2; p[i][3] = c3; + i++; } + break; + case 5: + while (fscanf(f, "%ld,%ld,%ld,%ld,%ld[^\n] ", &t, &c1, &c2, &c3, &c4) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + p[i][3] = c3; + p[i][4] = c4; + i++; + } + break; + case 6: + while (fscanf(f, "%ld,%ld,%ld,%ld,%ld,%ld[^\n] ", &t, &c1, &c2, &c3, &c4, &c5) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + p[i][3] = c3; + p[i][4] = c4; + p[i][5] = c5; + i++; + } + break; + case 7: + while (fscanf(f, "%ld,%ld,%ld,%ld,%ld,%ld,%ld[^\n] ", &t, &c1, &c2, &c3, &c4, &c5, &c6) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + p[i][3] = c3; + p[i][4] = c4; + p[i][5] = c5; + p[i][6] = c6; + i++; + } + break; + case 8: + while (fscanf(f, "%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld[^\n] ", &t, &c1, &c2, &c3, &c4, &c5, &c6, &c7) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + p[i][3] = c3; + p[i][4] = c4; + p[i][5] = c5; + p[i][6] = c6; + p[i][7] = c7; + i++; + } + break; + case 9: + while (fscanf(f, "%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld[^\n] ", &t, &c1, &c2, &c3, &c4, &c5, &c6, &c7, &c8) != EOF) + { + p[i][0] = t; + p[i][1] = c1; + p[i][2] = c2; + p[i][3] = c3; + p[i][4] = c4; + p[i][5] = c5; + p[i][6] = c6; + p[i][7] = c7; + p[i][8] = c8; + i++; + } + break; + default: + printf("bad column size -> time + nbr captor\n"); } + + /************** Debug part **************/ + // for (int ii = 0; ii < nRowRawData; ii++) + // { + // for (int y = 0; y < nCol; y++) + // { + // printf("%ld,", p[ii][y]); + // if (y == nCol - 1) + // printf("lol\n"); + // } + // } fclose(f); } + /** * @brief print all the element of a bidimensionnal array p of shape : N x M */ diff --git a/Code-C/main.c b/Code-C/main.c index 3b90d1a..ec59c73 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -104,7 +104,7 @@ void *threadCalculGrowthRate(void *vargp) powerFunction(fileName, dataLignPw); averageFunction(fileName, dataLignAv); growthRateFunction(dataLignPw, "growthRatePw.csv"); - growthRateFunction(dataLignPw, "growthRateAv.csv"); + growthRateFunction(dataLignAv, "growthRateAv.csv"); } else @@ -126,7 +126,7 @@ void *threadCalculGrowthRate(void *vargp) growthRateFunction(dataLignPw, "growthRatePw.csv"); growthRateFunction(dataLignPw, "growthRateAv.csv"); } - // remove(fileName); + remove(fileName); } } return NULL; diff --git a/Code-C/simulateFlux.c b/Code-C/simulateFlux.c index 14b5e2e..fb93392 100644 --- a/Code-C/simulateFlux.c +++ b/Code-C/simulateFlux.c @@ -176,7 +176,7 @@ bool writeOneRawData(FILE *rawDataFile) } cptData++; - // simul freq here + /************** simul freq here **************/ // struct timespec ts; // ts.tv_sec = 0; // ts.tv_nsec = 4 * 1000000; diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2cd6a1 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# [Robot Go West](https://projets.cohabit.fr/redmine/projects/communication-racinaire/wiki/Robot_Go-West) + +### Introduction +This projet is a part of larger projet [_Communication Racinaire_](https://projets.cohabit.fr/redmine/projects/communication-racinaire/wiki/Wiki#section-8) which aims to drive plante into the direction of the sun. + +When a plant received the solar radiation, a **difference of potential** will be created inside the plant. This physical reaction interest us to **measure** it and **interpret** the signal to drive the robot. + + + +## Embedded C sources + +## Graphic visualization Python script + diff --git a/chaien.PNG b/chaien.PNG new file mode 100644 index 0000000000000000000000000000000000000000..afd17da66948ab309b1ccfda88b7af1e54e6ffe0 GIT binary patch literal 28981 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

@f|vx0+dhDT|8)ZE3BT1`yvT@Q0H@zi$o25wj?< zL@%oSK!L757M^n>ft}!jb^7J4G*w}ITe#?PBlo<>1(MnlHP=RbyrllQt!5)&L4U(y zXfv4ri~S-nWDWvrt73ckH&&baX=@u@D`NrVV2viGe}o|nOa4LuvU#t}JGWwP%j{P` z4}yzHw3))tD;ASE4;=wOdN7vutotv!Y)TP4CdKM*gS_~HUtfbike7ICqoHgMrJ&i8 zL+w2xKhk|Bg4yn3)E$04bTf9L*J;$2>Hh0JpJFX34Ens$F)kjYs)hEv-`a zupJ@$XoO+N2&?1{e!&iG#dePNTa^lfkjnXp8$8kw4=5viYiwAv<@vP6UbWfBI!X1=8Y3x^>jvgoCk8-v0X3aVXtels7 zo;y8k`ldsBF>p_ZCbiq#g%)pGSPW)<2z&+E)ys~$oIBXJZM|GTk=-+E_RZcNkMw2w zKBJ(^+aRWJKAI4{5hfVT$T&p$A`R97_J6J`EW^Q-f~Hu2lckKjX7A2XlZiq49)-z9 zp}}bBh{t!yCdXl_u3uSr0x@M2-f&Eq&X7wItT?HXe4BRAx4BidY^@!k@tJ!O9xdy1 z*0UN5^%Wp=$%x3 zvmxou4Oq;ec@V1lh-7l1vM_Ub{4t?KX^Ysj&mXUaMZ}_ z(YYIBgcs)4)~PYTYgIX9`Z9-&z^Ps=Fbi1TQ?_uZ0I50j$i;m0x^g-6z^t z(KiezZn9KYJ)N1qYx4J~8Xud@oN)9R8R}e_QA=uJHB1Mqs2TDn3+wio?(eKRr?xW{ zpglMV+SvVy6C%#Jb==>|@VGafH<(f8PG%);d1p8u>VHsNQ6a^_=Zd~8Pay)$V1Q-C zzbZnP16s?%{!aM9_%)hJ1h7vm@yxx&h`>SYYx=F_rVP8v=JxRRXhOO2=Jqp<8F+#V zJOQ5jwLK)+#t|2~XuO^DV#TMysVH$hZc$C*@67L?;LIQiYoA>^rTmu@{OM#uM(X|^ zp41J0LTD(NJrirtyApwg{#%ebP@QJ9%_1y!Az*AY9T$KT#qh_UV9rcIf~xio#KOO} z(h~A3!$9n^%uRtXt3O?Qb-Eer_Ts<;sw5?D;EOWe-sU|kA^lgw)EtNSIIJ-AG1j36 zjkHpWg|rEMiS3&-9maZc?8nKIjxSShn(0H_mm?TyA}~|CHBe_4LmZZp1pSp+PNjUA zdQk;dzC8&h^TIknFrSW2V$N^Rk2C64-CW2(|0(b*h`nu2to**04$r|onO$7WL^?H9 zXkqhp3M+L}6+V^De=QyFdqRA6qZ6`7llzgk(p&<(@?Pd5z=Z$%-C-i0OQ;vOEj$vQgYi;E#m^KaCrCv#THi_9?5 z!4{#^n`9rQyom3lTG+6i)!v|Hx0RFGECqxpQ$839YT`uErgU0M`_**ud_)-kiBbNfp&p;0*7%O#r;4W`f&=x7=(slMjqz!3xDy>(U@KX}hpi?(GV#I* zXFDBi&h?0_cyNhVKD-v-z{VnlR*6)3U_87V!5uN-K!9n}7wAOiVx3+K#Z7jRLMb9jK zSgmo*tjZ=idQ^;MVYXzJQ`S-S$9|(|I0G|hN9cC4<0J=^D$(dRtkWdNv4lxEM$J~u zOIUy=wCH=(TDhe9x7Df1$+4L?^DFQfSP9E@gddgJe`e1|m(-az7*z+^*`TfVUK2ER z_ueny{I|mcrpUBG-3^2m^rTw?M z?WItPnM;%xj6@i)0$STian16~51c68hEuKYih5}C4(Q@9`e8bYNhS7_Ru;dVQV=|i z)BD=$TEnf{h#N^TDT;h6pl(abRAMo6|NhboVFzO^Iu2H?bo^lDN*-7x_@ZzGkw$M2RE{ixmIw*2c&Bs z4gGH;By8QI6My8?l)i95+tYkGHRBkq{VKUR7?TV8biPShO*?e{JwNc$i7Dwz7FuRy z{+l0D3a8@PKcPoB)eJIPgEPU!VX_=GI+*#yoEUDBV(&T3dgW)v zg^(zX`Fgr4>-PSe_B9P(hBYr)P_eZtKBLrwdl)a zeWNKnplXIowCA6D@hY^31-B-vsQeA?Cr*2W90Fcxz(q{r-2H;GzD7{&#E0)ce#Ctl zpHU@yVv+KeBkv*vlw>xQjbtW|(j}(R4Bq?mfMQ-s*oRcoaZ- zvWUT{uj|94$nvV6j}DiH^C0fWk8gI^TZXfgIgfh#_tS+Cz5}6M81^k|`dHr)STGIM zH1H7e_m_$d1Jq6?CUbUeDF7wK!M!+spaXFmGg?bN>ySN%^D3TfTjqT$rXMW|izXT( z!0GUBBKXDX>15Se?0wY!l4Kn zwRfi#7o-#v1E3-PvUeCf+B)%`|^gum&o;}F}!WA3QG$`_50cMOZ!Fu;e9fY2aQSf_?)^niQ!M-gbw2Vyg(4a zX*1%OYWKy0C1CTC3NKO=!_#Q*_+$S!J6J_9WDeEeXOua)y}i2TV<{BS>rfv-!(-OKw10>m#biKOU)iWQs4 z1mHi*pS!7r3o-fRk@`IJd!Xy-;fUm<&+!cZ>oJSuIDL(V$s`nyH=ko;Rn^timDRJW zs_+zs1%EdBhx{Jqkjc)A)EZaUl)7h<`Ocu=@@}55jK{PV83JBIzdsYxxYj-i0Pz5)ig`%Sk((!> z>E24abn+$_#UR^Rt-AEdoT*T5yZsAk_du^w*y%- zsYjMb39%hs!Vd>vrJ!|pb4BnhAxlI;T|R?Jy?pWBYM%7Myi} zRXl_kyil^tlsPTM4n+3U-*fKnCa79ii|m=?`@HDebuTG-h%D*MsU*Y3FLPLnaCR$! z4t9;iAeJf3cE&I%iW0|huaNB?hn46HhK-#kMzsO_9-0J^o^SZPw>2i+Pcdjfnv)Xa zWP{Wo8bOr(mK*wGfYp?U%=gPrF8N-NHbYzyF^;9=y&&PbzaQ|=y9}7}10nQ5)tbC# zZcb@8gYn;V>LbXBigwZ0YiQBImPttMSGlWlbW**CC*})3j`&ia7;Lq7x_q@ayPWVy zeFAzRa=`5lH#a0KRbQ4|W!ZBmZ)`hjDTaxzChMha8ksuvQ83G%Cy8Ry7crqseo& zhijYK&i!S=2-YKXHt$kj=DKEx&vWX*v?GFDA^oeP8rLATvM?aZcxB0~Xv?=}JqwJ}bK#-a)i0hy5X@SM={V19H0RN|Vv>Q`svXk6r|v_CXc_`6&Cn+)=SEMo-Q zcBvlgc)&X#Uc(+b!impESU2lBThHUzaSM4s{Swj+DYRQ@;l-c(Vm0hgItx61C{=o7 zI(Y)3KGSM;LnBY9+;>`GL#Z|RKB%$GEy4BUD8X7@qwcX9HVkgwKakxh5Of``orY<% z1Z}Qju5-GuUB}Bx!wz|>%UH+DpPv+8O}msUeAeB36#FT}J`iS1 z-vv^K|J@iXp9rf^ysl0}Xu0;8{G^$k_ZeY))AR>DdV2}^)%S`l8%)YUH+M6}qGk4Z zJ z8S0QfCZ7xX-`g`hra%$2wBg!9yInsirQ#G>fo&;6C(?bLCct|1SRH}DHM}#&WLAC? z(bU_rqt^YjAW8on>)y3mjO?`Qi?+qx%3#cBVq^<+t%Vfjj5!0tm53)}jO;Un7wBX< zEK=GQjIu+6%AY<(<_mEH$1$y^Z8^B7bB9XGXdSA%NJA(^K4@w|Zu0iuJJ(GXTugIj z=FCKC=>@NF7J5RGo2;E<6ezIJI>u*s=j)s&3peVmYATwsTwGktPmV>b%=)@B`cB^A-X>q9!(xE5HI(R#M`EjkyXM)49Rm>&$-U6n~)u*N4~xFj!KxkKjn5h zY{;T~!)+&b!gu%&B*WyO7@e{B+OCZxZm6c%4Dw|zdUGBwE)ChyBRYcg;vKP-vi1UU zxZoEA{qO7J6hZv^Dmv2$DKpU_qhZNaOwL-QV;c?#dKw&Y?o+P(S#cpZyF1Af*c{MV zEKY27$rtlR_){u=uCWC>ea>wa=}8*{&<1oU59UjkrPUxhhSZ$}AiG%CqFMQOSm=JEWqs6ozFO zf-v!AhBstn+LKS1b8^Iyw$96{35rvV8LB%b=E5<>1Sl&jlUm7)i%JsbSkdPrfjR6+k`N?-y^T>BtQ#cXwxQNt0wCj5GFwo@f>5 zL?Ox^D%4T^^k;60kwVY@raqd&C{HQt}@278~t(+0zTn%SwVaSrPGKbb@8^i~T?wO1c z3-zk=kv@lcRZ=ShivQl_!CndLLeAV8IsQE*D-!{IeAqGjuI?tUca1UlWFT7EmisB= z)6@CcwY6x&mWAx7g8NcZ-ngN-;cC1x^0Y*{UaMid(lo#^>!m^(0CR=yM>#7iI^Vm4 zFZwwt<>^?}gAs{m2)BWMdb8WZk`aHj6}91QO-8*8C+v1wp+fdR8vi{a=#NVii$;)j zZMhNj;jvqvCLh=NVeeW~Vpp6&?zFHk6Rhd{`MI2fA|)Mn9$0!U|6NuN{p3k&$1@9I@7U#~k&*8O(X$#dqklwG^mL1AYDm z5vZ3yaTIE-(J*aZBAq5II!gIonO#I36&)RajS|vva|G&mE>1TqRk5TqxKwl`uraBp zIQ47Gj}|hFrN@{YUL(pNnlI@Z$1zr&nf+y+58x+?Y-bZCm3tf{Z1!jjz-J^T=^i5f zdj><#W8%^AA$pJqpKHMqVgmig9hKnWi7-pPm3MVNJ-=o1NN4w8cc_Gu@OXU2Y^4!g zHpf0n=eYwiLg2X!{KXS#;blgt3+J-1ObjqN1VAih?Sl zDS>j+SP4i#UGW>v9&N*wFI*+M?+|n~Rf6`3$ihlBaW0ve`i23_%pxY5=~?pK(N7~9 zlQUB}S#5Z=>XNw77piT}(b_VS5dU4Pk^++wQM9Qc8!KyT2`MR7a10MHi5G|7xCZ0~+1gja3r893_Y9>dFqi}qhuE#i&GFGpn>oDX7?QLl?h#Ukc0AvJynnp>c2 zTq;Eui9&Cm!G4cVK6kvLx3}(22T`iJReOEpD0Ulsx6n9PH=XgIkq6PCHC1Sll-$gh zJE^W`bHX-?9^Ny&#eMj}!hO;Vcms-wZq@vthq5z?E zd!;P`W1i9_^PKa8gM+cz@lYQ-f=WocdO0=QL^u~V*ZXcDMsYgtjuE#`vUH;K%^geY z?*8saF{Dr!qa5W71j(+LxlpYPJ{!*<^O*~itLb`i3v@Qbc6{j%itqDuzMR_wk@QI` z;S^6ja9i?E>F1;mvPkIblIwM1>a~`cTiOPgX{iC@$EbfoCtz%=gEXZ0L#r$Ee9G-? zp`f7P?#Z60_X3=MQr|_gd^k)KRz!LJvb= z{`VFkMJNQm2si8aGytzUaW%0h?rWMgNQm~YL731j(gmAS0ldEU9JYT;d`#|vNF@c( zD0uW*=aDZ+L)O(Bda;$elb%I^b$x;wkfs+jprN#zlM9lY`Yqd3QB_x>-lDhks!6`X zdw_fHyT+jXkg=~|JB-k|>`I_3%j?ZEPQdI%6yE=T?R{lblx^EC1|^L!s7MGyN)1X#N_UEM4${>#pI*Al)V1Eet7x zbmxG?(A}|bpZ9sb_x<;+z1QA*?H~K+teJb=*IaR4XB@|IHiu9pRAO{!@+@_G=%EDm zP8%!S8NZw=->;Aty6q@St2!6eRQO!onjGsgZ%3$Sbh#2p%mjJu^l|G`RIQP`Q^P)Y zO=0|P#DVi0*~uvi^}&tXHy}I{r-8K-(3#%|fxDRI%t}WSa|_O%j^~plkAN8psVW7y zR8s8@4%wP=>MVuRd^la4c%DoNTHG7Bebu(0CRL3v+`9m)Hw=kmttDhdvQLa(Hki`5q?Sdl4 z5(s}LS_y}CC80wOjMYVYN1|*QiH&(Qu6E#x>Ii3_2M<;!?L8@GhAkkF^ zodycsy32fl(o~dVm$SpH^m8>Y6mqy?J!V9;K?0rPXrdHNsAb59-3BM?n~l6mBlRSH zcR3=p33QD?g|pC?ddEx&C7MSqZ}N9h?VzTGjxfg!!Hz;v)g1>&=}^}tO<@-p)` z^M-X=hr?K_R`$pm4m8UmjhOG|AK|5Ib*`$Ws;!-8A{K3_QCXbqOn8~?$v-&e&$V|{ zuA5mySt&33wW3xg@Yp;p0|GB@NiLfq&DxvY!t8_)exPV|?U65RDD!$k>r`g=YToAi z^Nn-17U7pKF=yM6~pPJGOFYH3McA^{HrU~*G}%FH%7dlbhSaR6`MkD z1?w4E4ajIEACf!FWc);6tkcO@W^O$@8$&N>v69)Xv{=l&am2h|eh_<*RLfa}=TyR+ z&)u9}s1u@9N0u6wAdF%$9rt@CgoumRVNdKobYV)Jg4t58Cm!`336zeN<_d9p4* zmfAhyq{c-q)-?TwTn*^8*gOY5eLXK_xJVH@`TQ0YA7|n_dved(U}{gy3jERxTW!SN z^J|H*ZnG3BamX3Y4iqs-Z-bUmwxTBQNjIM*4-XIfoKDcc9($i%+3I(TtoUIC#F!7I-Inrnb*f3^_krsnOXX94%{UtgSd4mrQnHy;f)St7YhgD6ozN3 z*E6*c@a&u*H&dS}&Xad?QwhgKccj1M@^opyF|$5H#_T+6ZTJ=N8Qd=5_36ot6Ro~h z36j?)F?jlkIATLv`tz3)J}=p7A?oQQrH*5v`SbM=g+*eDbnXD7IszOf*2Qfy{EOkG zsLbT70dh%HFhOz9NM+YMSq$B0AUkbl+hIGjh@|S0xLW_;Hi9?Fhsu0xJl|tsDmS{j zR}*O3C;~;rVw$%^W5{)VHrcJHz=}Mc`M?XXBMbAMi-)q7oDv8G)$N4`R0vI4(8 zqKH%UNT|=CkYChUau|sd{p6s5nutbaUh?zztrYJR*g&o^BiQs>s+6CwgR>}klzsDT zN$m2{D2lLGkeXY^7^Vv?x2((LqU!;CB>xvC2jO)1p%vS2WnbV zwNrf!*TswMjZ8;g5;@=7M4*7#PO|^|CiB*%CPzZc?afbV%Ws#M$d%96Nv}-OAcEWQOuJEL=T*{1`QP7CF5kCiY8tZL#dpl7_QTO4U$^ z66^7j&*|||^!3@%Px`i)BL3v8{Q_&S{ISMGtj_$o!1z^^+FnJ|jpni(b@5}$#(kl- z9>338;+(atUwBxFQd%Yg$`bsIatDuQwAp`wrv;kydx8OEFpa4bKM(H57g|gDNx5L{ zS=8Dsqz`LxZtH&chFN+D!(;O&hXu&WPfY>^cwId#4KXRpXiD^n(M&N zmg6hebo4N24Q5HFm=cCxzX&v#n*2#kKcKKuslt-(k*_mUR*4zAK!kxMvRXf$>1}|MUGK!oPd)2fT zGg1S6VL+r43s^91Bwj$pSj=ww^zQI*8G56PO#xrTpkM3nRCdV z!&WB`^{-#>BO~uA>LbphKBv6|Y+7Vj-RrlNalzR$Ywz!$7?lNT>l3Dos+OP6G>dRu zUwKE7Cu@cm+A&Mw;T^@MUca{FJ}>n4ZhY-U*@JIlQ;9A)Xi&p1f3mNtJXdrLICin{ z+oyWO@v>sd4M-+NqV@INLP0^a&*8g1$KVUP2O?bP)RH69(9tow^(^GqO}9#322j;@ zj+P+og? zUi%G62Ud;Q$Ec?}v`9_C4LJQzctzKmlpaTE;Lc%4l2TOm0P>v@$FH5yA@Ry(9I5h! zj@99chOD82v{q55;90Mp`CqsEks#8Pim8*J<*` zpv62GOy@!cI#e!@-4e-F3R0wMRpPu5ereiFUHX!+13J^)Z}*WN+aim*@I|{m-pM_& z62WPMw}{i^Yo(KV8KJtbZ|(P{gFx(-_wC>R`p_9ZYjJkY5w&Ry(Xl1S>>`uEOkD)= zwUKiIr+m4nK$kM+HzqwxQs(Mhru;7C$Um#V;bDbwXH<Zs>r@7bLiy>)Eg9UyHX zfi_PDq$2?PwX*P>HnX_l1B>Z2Qkrr^O^J2nY}!b6S7CNnN&b8Y3kT~g)Hzm}WfLjD z_R&fF2f@pz!43RDsj$82fnuHObNw)tEhvE)v|1yqmc`})nI1i zO0HaUd$r-A8%+2~XL*`_P)t;E)CFT)neD%cBcSN({2(@_9}rc;hFx0ke-dU zyCySFz4OUsR$u5-;rOHyc48joS8@6&2@IQwSEFKKD_!zEE zhtQpb&QcBV!ZyrotlZlOK)dldp4cZC{)mS4Q~vBCsjp`$cIHbB!)9mw!u zr|_VAJk^_J)8w85G;KVHJBFLm0YO^z#t&Q)$6Z%)ZQHwvoujd{cVL)kc6ahq zvt0WlYVjUb54SB1t7aU6VkzVnr7s5>&vg=Vzt5K{?Dxx!=Rec&;yDpyCG;ZC`Jt#m(>*}9M}%1#nqYQkgeSCX@j(p{?yr4j zhdyYWm3;2oj;0G{TG4?!c6@Ua^^(MQ?HyLCtfA$9(VCp&>(5Gosys*a34)FEi5Y22 zjdAwKV-s@1d;^wgW&8K)e!u7kHW=KaI-Lq1CgvvTms1GowaSZl{EC&;)RWJRHa=FuZ=e>< z1uvh@LSMMgY^|?P*L4BrC$7rMAc_Lv1|kufkJ*zU+XP10TvfZ;d68c0-?kLau+&wv zN49!bwZGovxEVzP6y}3?bxl(-B z>>F2en`A-%)35jR)070~WgL))K@~wGYy%2%i+dTBeDFYG3dLggjb#j3nXi?o(=cx; z?Q?|(aohz`72`!lkZ~Pic}9p)y&|RRd(>6))T$hN<p^sB@{Pc*2yREr!FU-`0GT7Bt(zVa`)rSQBx{H-Nz4Ta2dcJ3S*`qAFkSmSj>8sl$a z$OblRilY(;9*#LY)2f$J2-`G2@-H{}5k~sPnI$WoXV%aB(FQ8$0iz&_m5-hmKR#$v zb6`&xfQJHZ(o^|1m`Xqzwc(j5H-h-QRocNnwDfpzRD4%Ck2+lHkL+vv2Y@^G7?@S; zKlkNdI$5KC2$Q1!x)lNeVD=yMGvQx)uz+k9w*s&$>BawdKPtgss@och7&P^n1w=Rj z*{DDAv$00n5aZ~+h`t{tJv105TG>Fz$=XtZ>`W4IL)jmuHhz~5c zpv0XsgzyGIlzCI};n8thGuT`ze8m41>cT4JXD@x!=&iY_M=b)N3o!2RbjJ_mhaIgZ z^zRH==+G$fSE8h5-&!=ts|<+!y%75fgKE$sy)!Mwr`?2P9(x$rHhB_4Gp|z9I zDFKDJY(WqG5Jm<=3gj3Rm^g%=2i?Y96w{f~k4#3R7D4NtB;b45AGVgPneo=M_oR+K zoUVW9!`Tz=fOhl6OLwdAe@D)<<%dRj2u@{p5&jfhdtPman+%lGGWsP@dgmFFVZWsB zJAuU?dF`Ts&Ug>>^P1;efs|T9Ef!FWcvWCPUemW5Wq6bkcvgrwV+5VLsqDNW%ybF2 z#qKw1>yIKR5U_y<2~v(pN&i0N(c;DW+p}0?RA4f-l0n>e=kxNNS+hqYFaE*`=04@f z2>LPt%BW2Ike}LFf@hxl8ZXY4-`e(M$Vba(e&EN#J?icbiTk7{_voriVrnG{=Q!fW zCos2jtaZo>pI>SVS&GESun0b^QJq$6wG(tHWaRCxh9Z^(uccD$N`!Pe8)MBePx%Uxhyhl?)$)C6K%$=?UPO=R%0= zoxK7t7ITZ?WkX0Z4@uxFT2q;#MY3TPMJR7wPXvL*XPcQQk9kc&;=t6A_0tqoU}TFr zL9Se#&*&gk=2$NT17A?jmjd`&*_Twu5AmZT3QF<>jf9b4)H z+2|roOq3b1XsH=bt_6e2k@7Tu;heKBzKot9I%D>s<}JN1MaM&^DL88?g{UgZUDq`T zyq;=9@Y9Pg>rEQm!q}c-_G(_XaZP!~NePDO3^sLI3kGZNfNfYz)qefVL@UzG94-Km zri2`Xzp&JTy@Q%C1dE!_q&wFL&dU==-mAvVJkT6p?-ng4h(OLQl#@JfB}~v6IphxV zkM!6R+CInQphMVT%#MZ%MwJs(vXGz4S3<8=%;N|s0mbuIZ_At`l2G6T4?02us>c#dC5VIfE z>nQ{rrp8TRR%+~KmCg4`(3ITrivuQMreo*Mdgi$L%%DT}#i=U!Hj6d7yWJGEJe?^U zOD^~1lz?lxIO+jkK3;TZ!3Gd}KMT@@!NtNS(D+gXt~I3*BP}-AMYQCyy^QhCM7f+k zl1mdvwN7q{SbzE1yFHjSBb9Vs?Z`lW_dFu^=-|4NbZmjr0Bef{g&Z6Qf1;GtS^AEH z3FtKaxif}Z2Cp3vuF{YtTKggzqD{1qal#g+V$YweL3b>nO= zHB;cANRjfc-O=%0EjRV8vmye2P!!FRf5D^NegpCg> zhBvUECNT)T+YiXroKFOGxZMaHS9npN?bbMAh-wZe+eo=_guGRgy7(GMAicl#?oEkt zpkRO>aH0J9Q{~3M)leHNUGf5;`8IRJJdFSs#{_|8zK*?18dLY;gi7+ta-<=j@bYt$s;~J)v1@BiL^M8lc=@f@&VOeiCZifYz zd_)UWvt_R!eN&=g3>03JER>Hr6xtqus)#-l%BgviC47ZV^b!)Xj|FMR;5RCR@Ljo!xAG5S@l+{c{jS z>gmB*_Uwk)LN`FZi%$tz4X<;2!=hp7f$KRa09jLU_d(ug7WsBpk;Ml#q#1mz=0zpS<*t+We2*uu~+#sdJ9S7rLQ)>A(O61bt`)&J49&r`4s}q_) zW4{^zU3aP4$nmIgh1vPA-e*lqYZiVAS;^;|*6YEXOb+f*iAk!yRbIKuF?B+}RofIhv;ou(6*s6f~DSb|(_Evl8{3VqX@i;u~I2o;A zmspr0*ly_Wa13Aw`Qp!hhjtfCQsU)ktbT494T!qDE|0}F@u;FFd9`a{3|SEnv_aIl zN*dqmBKD?xOeXpygm-4!n`L>Gy>YZ%(CFw@dy65?)kSI&Wc$g|0+;OQx|o^k_Ey#t zp#*Q%FHwayLJ6z1L|g+(lCKHy|LuFj#1YFfF=^gW-^yyHv!i|uET2K~zi#Zmj5_aH zv!YNLf0cVWtWhWYg%0fG=-y%uhRA)^R^4#MERXxS%)r@$nOI}^HT{QtB7EcEVPmt= zc7F z*^+ODb-aLInX}QxNI;>wfB3k8CR-mKH{B!lwSg~g$%L8n%IT8A^z7h}RNzC>0FRJs zM1_1%lJDmmfwJ&P+WrKdZwbEZi3hq>+d|%hrZ%^_nonq_ok%!gZu|ely(*zFg$FET z^n|ZOdjGc3|CfRld+|<$0+jpvJ$vH#X<`-=l?RMlh?HOy&?)0Dv2j4kmKQ2$3PhT- zL$|{MXs@+=CfcvB2A;)Quu~-i;Sh@;Z@Xd1BXz<^1{y?|`y!AVwUmC#F*k6=?A;U0ChH;sigtzt|Zw0sp_W^|9)6jqU z8vp%Ad_R~<2s1wEKZtNFdSLM$!Jv?pWzhqYg^lnJwVn=tV-El1UWlrgmN-JD2k2T6 z2}+Uw9vcw(q4z51aftm_nE3985n)v!!0Y{IM*jQ3{7;Si|ICkhb)gB;IfhTtsW0a^ zHcL2Y4z90o#0An+dtSwZ`^@UM?Rb5Z&3&=DiJoE8jF}F$-BHu@8Wge#eSYWj@7aKi zL%Ub$VwreT_%MQ?m{c|RxVzi%46c~ZcMl=2pZm=k%O?$e2tmm-3!6PT6PSx^qBKwD z-L=gvd+v5hAwFks@Y1HOj#N(&DUXAX_wThaF6s)GI;sDJ$`w8_UdW2}i*gf#@tC0< zfo2Z((y8^m2SU$;DFIwm&Hav5uh)Ztw?2&9_&4P}OUh~#N@a907VVjTz~X{V}UPk4Nuys4ld3Tc^ zmQCBm`*p_%`B0zU|*kU-KW)gc|DToFE`k?Kv! z08R-E2B>Cd@chCL&w|ptik4)8~Y+xX4UC@_Q_CZy|v-}L9ovRgUu>(z3**O~y218`GI3$Df)uDZ*wQJL_T*xEANo}b$Du`i zJLL9z_B;0&X|9S_BPnYC@IhSEh(&d3A|}L~e-Q7;zCmAXC(O>vlUfQ$p#9Yb;7`&D z7wU3B%IdnDqOrfA76n^F9+8rO@Rv{1)4Tpq?0_$`L>Nq!B405Wif49 zYp~m{x2SiUTd*}27s57!Be~>C>Q@smJl7BT<_^NqXUVgIV;CuA{^QDc7d-vG#1+}{ zqS;P|!sb$jCt5+So`%6)n!I2%N;KD$4e z*l53AgI9m|hJ3R`WvqMDbS>TYj4515sar3mf{kZF}0e9a^k&5ENje);b<) zWn%%iU2|I+yLR1SV68u1P~5h$U#S7ObL!806UA4CUs~DkJeb$i1-)>S1q$t529#D{ zA4_;vAS3RlC+yc*q=|E5KF+ji8uzi>{9Jbu_;fuq_!p+1d>J)1ESL}C@tz2lv)SwF zPTR=o+J1C-F_BJ?)%P^0lz~HyE0}72CU`3iB^K57qt_63;su4IE|B^JNZ@}3J}l7F z_0?ydskE-=r}Vm4_2?&7EcFMq^m8}GFPx^D&#lxEvc7f`kxR3}1zkIX+7*-Ed__h` zYl6y`*{$o(H!-d)vajo&c_ug}j%_=1sf0}1Zru5#2(RrL&aue~wjMF2hXGO_eM2Yz=nddj=?Y*zw7QhNQ9(AuVJy4yJc% zC(IJZ@Fdh|&=beowF~Ic)9_SShti)XMHL{xobZ0U5n{RO4K?$Y^mUQL@ji(r*FNuk z6#Z`lYXpLLI7bk;vxHb5dDtJES?!_t4|PLB_hdVnnGKZYGaYwFFlJ^3E><1tuou`vh#tOX?rOAilU4c5}a zlJx&=mW|FcH|H;BYu+94sdnj7C)sW_g7y5U`^#po>;~UN^F#!BX=x7~57)}+A}-X- ziX^hpNWekracO;~%xcqx6vhDM(mWgS`47cE<)Oh;7(D^>vesB{eJzAHlfs}V8T3Z zjlJ>}vOy>0Z4du`FT2NnyD1fhbSdD#X6dRYliLa{23(ony|azTs9b!@@i8NNCS+27 zy92J|v~-)#cMuk3J@qC7PO3;Pd4F`a5P6a~vMO|R$>Fl=vNW9Ew123IcM9{-JG$Ec z?I?J@Rm$<&JD#M5VJXt^1fU>euOdBd5sq2&ASr33HNjKVBM>KmTK?O^#|TTJBNS_R zLo#E)NY&H6J2=6m(mHn|MPoTL^H^A{%uv>oiHvIE7V zyQIMs&4y)v7h{0q^Z!B*zCYao|JNJ(-P^xITQS0rEdN5m4YWE$laWvqFBLWP{U6`5 Bj&uM3 literal 0 HcmV?d00001 From d5cc41f26abbfa939ed8c33333b94b9b46a24a96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Mon, 27 Jun 2022 16:44:56 +0200 Subject: [PATCH 28/35] test image readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d2cd6a1..721859a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ This projet is a part of larger projet [_Communication Racinaire_](https://proje When a plant received the solar radiation, a **difference of potential** will be created inside the plant. This physical reaction interest us to **measure** it and **interpret** the signal to drive the robot. - +![schema](https://git.cohabit.fr/pgp/Traitement-signal-plantes/src/branch/Data/chaien.PNG) ## Embedded C sources From a95809bfd9936cd09ffcb872ba0f0860ea2172d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Tue, 28 Jun 2022 12:12:50 +0200 Subject: [PATCH 29/35] finalisation of readme.md and add image folder --- Image_Diagram/ResumeWorkingDiagram.dia | Bin 0 -> 4908 bytes chaien.PNG => Image_Diagram/chaien.PNG | Bin README.md | 17 ++++++++++++++++- 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 Image_Diagram/ResumeWorkingDiagram.dia rename chaien.PNG => Image_Diagram/chaien.PNG (100%) diff --git a/Image_Diagram/ResumeWorkingDiagram.dia b/Image_Diagram/ResumeWorkingDiagram.dia new file mode 100644 index 0000000000000000000000000000000000000000..4a204ff7dd6f6982af836170e297d3e65a7166e6 GIT binary patch literal 4908 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 literal 0 HcmV?d00001 diff --git a/chaien.PNG b/Image_Diagram/chaien.PNG similarity index 100% rename from chaien.PNG rename to Image_Diagram/chaien.PNG diff --git a/README.md b/README.md index 721859a..308efaf 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,24 @@ This projet is a part of larger projet [_Communication Racinaire_](https://proje When a plant received the solar radiation, a **difference of potential** will be created inside the plant. This physical reaction interest us to **measure** it and **interpret** the signal to drive the robot. -![schema](https://git.cohabit.fr/pgp/Traitement-signal-plantes/src/branch/Data/chaien.PNG) +![Diagram](https://git.cohabit.fr/pgp/Traitement-signal-plantes/src/branch/Data/chaien.PNG) + +On the diagram we can see a "**Pi**" symbole which represents the micro-controller who calculate and drive the robot, who will make the **C sources** work. After many hours of working or test phase the microcontroller create and store data interpretable by the **Python script**. ## Embedded C sources +![Graphical representation](https://git.cohabit.fr/pgp/Traitement-signal-plantes/src/branch/Data/chaien.PNG) +The scheme represents well the program operation on the raspberry, the diagram is read from left to right. + +**The first** represent the stream from vegetalsignal's captor through the USB port. This part block us because we don't have stream for now with the captor then we have create a thread to similate it. The stream send Raw data correspond to the electrique tension generated by the plant. + +**The second** part with the thread storeRawData catch the raw data and store it in the memory in several files.(Usable data for python script) + + +**The third** part is used to gather data files and calculate to have pertinante data (Power or GrowthRate) and store it in file. + + +**The fourth** is not yet done, the thread drive will recovers the power and/or the gorwthRate data recognize events in the data and drive the robot. ## Graphic visualization Python script +The Python script is used to print the tension data on a graph. \ No newline at end of file From f86e4380c1dc94aff5d9c45db98d6a978b1d4658 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Tue, 28 Jun 2022 12:19:03 +0200 Subject: [PATCH 30/35] extension type issue --- Image_Diagram/ResumeWorkingDiagram.PNG | Bin 0 -> 33053 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Image_Diagram/ResumeWorkingDiagram.PNG diff --git a/Image_Diagram/ResumeWorkingDiagram.PNG b/Image_Diagram/ResumeWorkingDiagram.PNG new file mode 100644 index 0000000000000000000000000000000000000000..dcca55b8502ecbb91cf4930d11cf0d057c9c14b7 GIT binary patch literal 33053 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%0Af(aKtIP6nu`7 z%-3}cSu`c9kB48&P z$0~y7vXRZK-L}t0!A;E&^c6@pP|D}dodb(31-`aQLIccHmHOyY1V@N!X?=ZsoG}Rj zE&R1_&LdHgP`X%2z5?`lUQtnm&t%V3CVGbv{{Nq5gi& zs!iGE9Z1k&94E&8{l@jnzkUV9>t!z&M6J9GI9=K~Z8wY}%L0f^u^aH0Oot4!HTmzuE|2o2DUFVJaMEwQq)g2>tn

yCMjtPg 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 z zg4bsK8#-7w1ZS(QBats&`jc)AGU|!qDb=S?KI}KWFO0YA+$6)PuT~h9+BXrqCFQ-v zepNko-OJet#UIa!oM8>UWN9fq@|WVTi%k!;U9(uIH_EKNP|!v(Nc_BN6Vu-H*RMwf z8x9x|YxZAxSSdwD9$)Qy|C>B4&ho!ppa0(<{v~QahpUm#pE;%WAJ?6DB50Bx^~QB; zI)(qUOYw>zV?_JLs7Az_(p35$B+};}7wEm8e>_fodDGh3lu&<7g34?oq^w@X{jZHA zu039;dr{tn7TUElaxp(cOBC_>XF~ixOVht(Ze*3hAYH%GA$*zWH7A`vt8^ws`tq&+ E1Eq_lRsaA1 literal 0 HcmV?d00001 From c91ba029e2e945701bd5544d79aaf5a0de242454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Tue, 28 Jun 2022 12:20:11 +0200 Subject: [PATCH 31/35] add right path image readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 308efaf..8cd5253 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,12 @@ This projet is a part of larger projet [_Communication Racinaire_](https://proje When a plant received the solar radiation, a **difference of potential** will be created inside the plant. This physical reaction interest us to **measure** it and **interpret** the signal to drive the robot. -![Diagram](https://git.cohabit.fr/pgp/Traitement-signal-plantes/src/branch/Data/chaien.PNG) +![Diagram](https://git.cohabit.fr/pgp/Traitement-signal-plantes/src/branch/Data/Image_Diagram/chaien.PNG) On the diagram we can see a "**Pi**" symbole which represents the micro-controller who calculate and drive the robot, who will make the **C sources** work. After many hours of working or test phase the microcontroller create and store data interpretable by the **Python script**. ## Embedded C sources -![Graphical representation](https://git.cohabit.fr/pgp/Traitement-signal-plantes/src/branch/Data/chaien.PNG) +![Graphical representation](https://git.cohabit.fr/pgp/Traitement-signal-plantes/src/branch/Data/Image_Diagram/ResumeWorkingDiagram.PNG) The scheme represents well the program operation on the raspberry, the diagram is read from left to right. From 83a308bb9619896fb840541108ccf17cbb470698 Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Tue, 6 Sep 2022 16:44:13 +0200 Subject: [PATCH 32/35] update gitignore + solve printArrayData issue --- .gitignore | 2 ++ Code-C/getArray.c | 22 +--------------------- Code-C/getArray.h | 2 +- Code-C/main.c | 2 +- 4 files changed, 5 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index 2a3e17d..7ecb25c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ *.png *.exe *.csv +*.png +*.dia Code-C/main Code-C/exect diff --git a/Code-C/getArray.c b/Code-C/getArray.c index 51e26db..1fe1691 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -24,28 +24,10 @@ double **getDoubleArray(int N, int M) /* Allocate the array */ array[i] = (double *)malloc(M * sizeof(double)); return array; } -/** - * @brief print all the element of a bidimensionnal array p of shape : N x M - */ -void printArrayData(long **p) -{ - for (int i = 0; i < nRowRawData; i++) - { - printf("line n°%d : ", i); - for (int j = 0; j < nCol; j++) - { - printf("%ld , ", p[i][j]); - if (j == (nCol - 1)) - printf("\n"); - } - } -} + void fillArrayWithRawData(char *rawDataFileName, long **p, int N, int M) { -<<<<<<< HEAD int i = 0, j; -======= ->>>>>>> 1c7d7edaaed0245806ce2b0f5538935709632a03 char *buffer; size_t bufsize = 200; buffer = (char *)malloc(bufsize * sizeof(char)); @@ -180,8 +162,6 @@ void printArrayData(long **p, int N, int M) printf("\n"); } } - printArrayData(p); - fclose(f); } /** * @brief verify if all the element of an array are not NULL, return diff --git a/Code-C/getArray.h b/Code-C/getArray.h index 556d0ee..575eb7f 100644 --- a/Code-C/getArray.h +++ b/Code-C/getArray.h @@ -6,7 +6,7 @@ #include long **getRawDataArray(char *rawDataFileName); -void printArrayData(long **p); +void printArrayData(long **p , int N , int M); void freeArray(long **p, int N); bool checkArrayFullyFill(long **p, int N); double **getDoubleArray(int N, int M); \ No newline at end of file diff --git a/Code-C/main.c b/Code-C/main.c index d1ed804..6ee1fb8 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -18,7 +18,7 @@ int nbRowBinFile = 900011; int nbRowIgnore = 19; Pqueue firstRawDataQueue; -// Captor 1 2 3 4 5 6 7 8 +// Captor 1 2 3 4 5 6 7 8 bool selectionCaptors[] = {true, false, true, false, false, false, true, false}; int cptData = 0; From 011eecc81b76f322e371cd8ff06b2fe5e3e358ec Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Tue, 6 Sep 2022 17:33:54 +0200 Subject: [PATCH 33/35] beginning code to write json file --- Code-C/csv2json.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Code-C/csv2json.c diff --git a/Code-C/csv2json.c b/Code-C/csv2json.c new file mode 100644 index 0000000..17be9cd --- /dev/null +++ b/Code-C/csv2json.c @@ -0,0 +1,25 @@ +#include +#include +#include +#include +#include + +void writeCaptorNumber(int N) +{ + fprintf(stdout ,"{\n\"captorNumber\" : %d , " , N); +} + +void writeTimeArray() +{ + while +} + +void writeValuesArray(int N) +{ + +} + +int main(int argc, char **argv) +{ + +} \ No newline at end of file From bf4f35ca292140d43b82c33f062b46f0c4624042 Mon Sep 17 00:00:00 2001 From: "quentin.perret" Date: Thu, 1 Dec 2022 17:29:47 +0100 Subject: [PATCH 34/35] move .h in include --- .vscode/launch.json | 7 +++++ .vscode/settings.json | 6 ++++- Code-C/average.c | 10 +++---- Code-C/b2hd.c | 2 +- Code-C/ctest.c | 14 +++++----- Code-C/fileGestion.c | 2 +- Code-C/getArray.c | 6 ++--- Code-C/growthRate.c | 8 +++--- Code-C/{ => include}/average.h | 0 Code-C/{ => include}/b2hd.h | 0 Code-C/{ => include}/fileGestion.h | 0 Code-C/{ => include}/getArray.h | 0 Code-C/{ => include}/growthRate.h | 0 Code-C/{ => include}/initialParameters.h | 0 Code-C/{ => include}/power.h | 0 Code-C/{ => include}/queue.h | 0 Code-C/{ => include}/simulateFlux.h | 0 Code-C/main.c | 33 +++++++++++++----------- Code-C/power.c | 11 ++++---- Code-C/queue.c | 3 ++- Code-C/simulateFlux.c | 6 ++--- 21 files changed, 62 insertions(+), 46 deletions(-) create mode 100644 .vscode/launch.json rename Code-C/{ => include}/average.h (100%) rename Code-C/{ => include}/b2hd.h (100%) rename Code-C/{ => include}/fileGestion.h (100%) rename Code-C/{ => include}/getArray.h (100%) rename Code-C/{ => include}/growthRate.h (100%) rename Code-C/{ => include}/initialParameters.h (100%) rename Code-C/{ => include}/power.h (100%) rename Code-C/{ => include}/queue.h (100%) rename Code-C/{ => include}/simulateFlux.h (100%) diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..5c7247b --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,7 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 332f5c0..4a323d6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -16,6 +16,10 @@ "type_traits": "c", "simulateflux.h": "c", "pthread.h": "c", - "types.h": "c" + "types.h": "c", + "average.h": "c", + "queue.h": "c", + "growthrate.h": "c", + "stdbool.h": "c" } } \ No newline at end of file diff --git a/Code-C/average.c b/Code-C/average.c index 3da32f2..afdc6bc 100644 --- a/Code-C/average.c +++ b/Code-C/average.c @@ -1,8 +1,8 @@ -#include "average.h" -#include "getArray.h" -#include "fileGestion.h" -#include "initialParameters.h" -#include "queue.h" +#include "include/average.h" +#include "include/getArray.h" +#include "include/fileGestion.h" +#include "include/initialParameters.h" +#include "include/queue.h" /** * @brief realize the average calcul * diff --git a/Code-C/b2hd.c b/Code-C/b2hd.c index 2de322a..25c0a2d 100644 --- a/Code-C/b2hd.c +++ b/Code-C/b2hd.c @@ -1,4 +1,4 @@ -#include "b2hd.h" +#include "include/b2hd.h" #include diff --git a/Code-C/ctest.c b/Code-C/ctest.c index f5dfdb2..3043142 100644 --- a/Code-C/ctest.c +++ b/Code-C/ctest.c @@ -5,13 +5,13 @@ #include #include -#include "fileGestion.h" -#include "getArray.h" -#include "growthRate.h" -#include "power.c" -#include "simulateFlux.h" -#include "queue.h" -#include "average.h" +#include "include/fileGestion.h" +#include "include/getArray.h" +#include "include/growthRate.h" +#include "include/power.h" +#include "include/simulateFlux.h" +#include "include/queue.h" +#include "include/average.h" //#include "b2hd.h" bool rawDataWriteFlag; diff --git a/Code-C/fileGestion.c b/Code-C/fileGestion.c index 544d311..99e0a62 100644 --- a/Code-C/fileGestion.c +++ b/Code-C/fileGestion.c @@ -1,4 +1,4 @@ -#include "fileGestion.h" +#include "include/fileGestion.h" /** * @brief function that delete nRow lign in the beginning of the file rawData.csv . This function is necessary to not deal with the same ligns over and over diff --git a/Code-C/getArray.c b/Code-C/getArray.c index 1fe1691..3b775d4 100644 --- a/Code-C/getArray.c +++ b/Code-C/getArray.c @@ -1,6 +1,6 @@ -#include "getArray.h" -#include "fileGestion.h" -#include "initialParameters.h" +#include "include/getArray.h" +#include "include/fileGestion.h" +#include "include/initialParameters.h" //#include long **getlongArray(int N, int M) /* Allocate the array */ diff --git a/Code-C/growthRate.c b/Code-C/growthRate.c index 64a0a2e..8188a8f 100644 --- a/Code-C/growthRate.c +++ b/Code-C/growthRate.c @@ -1,7 +1,7 @@ -#include "initialParameters.h" -#include "fileGestion.h" -#include "getArray.h" -#include "growthRate.h" +#include "include/initialParameters.h" +#include "include/fileGestion.h" +#include "include/getArray.h" +#include "include/growthRate.h" /** * @brief calculate de growth rate between to point next to each other * diff --git a/Code-C/average.h b/Code-C/include/average.h similarity index 100% rename from Code-C/average.h rename to Code-C/include/average.h diff --git a/Code-C/b2hd.h b/Code-C/include/b2hd.h similarity index 100% rename from Code-C/b2hd.h rename to Code-C/include/b2hd.h diff --git a/Code-C/fileGestion.h b/Code-C/include/fileGestion.h similarity index 100% rename from Code-C/fileGestion.h rename to Code-C/include/fileGestion.h diff --git a/Code-C/getArray.h b/Code-C/include/getArray.h similarity index 100% rename from Code-C/getArray.h rename to Code-C/include/getArray.h diff --git a/Code-C/growthRate.h b/Code-C/include/growthRate.h similarity index 100% rename from Code-C/growthRate.h rename to Code-C/include/growthRate.h diff --git a/Code-C/initialParameters.h b/Code-C/include/initialParameters.h similarity index 100% rename from Code-C/initialParameters.h rename to Code-C/include/initialParameters.h diff --git a/Code-C/power.h b/Code-C/include/power.h similarity index 100% rename from Code-C/power.h rename to Code-C/include/power.h diff --git a/Code-C/queue.h b/Code-C/include/queue.h similarity index 100% rename from Code-C/queue.h rename to Code-C/include/queue.h diff --git a/Code-C/simulateFlux.h b/Code-C/include/simulateFlux.h similarity index 100% rename from Code-C/simulateFlux.h rename to Code-C/include/simulateFlux.h diff --git a/Code-C/main.c b/Code-C/main.c index 6ee1fb8..77e17c5 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -1,15 +1,16 @@ #include #include -#include "simulateFlux.h" -#include "power.h" -#include "initialParameters.h" -#include "queue.h" -#include "average.h" -#include "growthRate.h" -#include "getArray.h" + +#include "include/simulateFlux.h" +#include "include/power.h" +#include "include/initialParameters.h" +#include "include/queue.h" +#include "include/average.h" +#include "include/growthRate.h" +#include "include/getArray.h" bool rawDataWriteFlag; -int nRowRawData = 500; +int nRowRawData = 5000; int nRowGR = 150; int nCol = 1; double freqEch = 250; @@ -19,7 +20,7 @@ int nbRowIgnore = 19; Pqueue firstRawDataQueue; // Captor 1 2 3 4 5 6 7 8 -bool selectionCaptors[] = {true, false, true, false, false, false, true, false}; +bool selectionCaptors[] = {true, false, false, false, false, false, true, false}; int cptData = 0; int cptFile = 1; @@ -56,6 +57,7 @@ void *threadCalculAverage(void *vargp) { rawDataQueue = queueGetNextE(rawDataQueue); fileName = queueGetTabChar(rawDataQueue); + printf("%s\n", fileName); averageFunction(fileName, NULL); remove(fileName); } @@ -142,6 +144,7 @@ int main(int argc, char **argv) nCol++; } } + printf("%d", nCol); rawDataWriteFlag = true; @@ -156,12 +159,12 @@ int main(int argc, char **argv) exit(1); } - // pthread_t calculAverage; - // if (pthread_create(&calculAverage, NULL, threadCalculAverage, "threadCalculAverage")) - // { - // perror("threadCalculAverage() error"); - // exit(1); - // } + pthread_t calculAverage; + if (pthread_create(&calculAverage, NULL, threadCalculAverage, "threadCalculAverage")) + { + perror("threadCalculAverage() error"); + exit(1); + } // pthread_t calculGrowthRate; // if (pthread_create(&calculGrowthRate, NULL, threadCalculGrowthRate, "threadCalculGrowthRate")) diff --git a/Code-C/power.c b/Code-C/power.c index 596110f..87ae6a3 100644 --- a/Code-C/power.c +++ b/Code-C/power.c @@ -1,9 +1,10 @@ #include -#include "power.h" -#include "getArray.h" -#include "fileGestion.h" -#include "initialParameters.h" -#include "queue.h" + +#include "include/power.h" +#include "include/getArray.h" +#include "include/fileGestion.h" +#include "include/initialParameters.h" +#include "include/queue.h" /** * @brief realize the powerThreadFunction calcul diff --git a/Code-C/queue.c b/Code-C/queue.c index 72e5f7c..b311c39 100644 --- a/Code-C/queue.c +++ b/Code-C/queue.c @@ -3,7 +3,8 @@ #include #include #include -#include "queue.h" + +#include "include/queue.h" /** * @brief struct queue struct used for queueing string name diff --git a/Code-C/simulateFlux.c b/Code-C/simulateFlux.c index fbe6337..dd5cef2 100644 --- a/Code-C/simulateFlux.c +++ b/Code-C/simulateFlux.c @@ -1,6 +1,6 @@ -#include "simulateFlux.h" -#include "initialParameters.h" -#include "queue.h" +#include "include/simulateFlux.h" +#include "include/initialParameters.h" +#include "include/queue.h" #include #include From 5be8eaa7c94457d7f09cdc4e2e6dbee839e1db8b Mon Sep 17 00:00:00 2001 From: QuentinPerret Date: Tue, 9 May 2023 13:37:36 +0200 Subject: [PATCH 35/35] change cmake params --- .gitignore | 4 ++++ Code-C/CMakeLists.txt | 6 ++++-- Code-C/ctest.c | 2 +- Code-C/main.c | 4 ++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 7ecb25c..3680055 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,7 @@ Makefile *.i*86 *.x86_64 *.hex +*/Executable # Debug files *.dSYM/ @@ -86,4 +87,7 @@ _deps # External projects *-prefix/ +### DataFiles ### +*/RawDataFiles + # End of https://www.toptal.com/developers/gitignore/api/cmake,c diff --git a/Code-C/CMakeLists.txt b/Code-C/CMakeLists.txt index 5b391f7..49a188a 100644 --- a/Code-C/CMakeLists.txt +++ b/Code-C/CMakeLists.txt @@ -3,11 +3,13 @@ project(Traitement-signal-plantes C) include(CTest) enable_testing() -set(CMAKE_C_FLAGS "-std=c99 -g -Wall") +set(CMAKE_C_FLAGS "-std=c99 -g -Wall") #what are the flag for ? -file(MAKE_DIRECTORY RawDataFiles) +file(MAKE_DIRECTORY RawDataFiles) #why do we make this folder each time ? file(MAKE_DIRECTORY Executable) +set (CMAKE_RUNTIME_OUTPUT_DIRECTORY Executable) #Set Executable directory as default exectutable file location + add_executable(exect fileGestion.c getArray.c average.c growthRate.c power.c queue.c simulateFlux.c main.c) # add_executable(exect main.c simulateFlux.c queue.c power.c growthRate.c average.c getArray.c fileGestion.c) diff --git a/Code-C/ctest.c b/Code-C/ctest.c index 3043142..8beca7e 100644 --- a/Code-C/ctest.c +++ b/Code-C/ctest.c @@ -24,7 +24,7 @@ int nbRowBinFile = 900011; int nbRowIgnore = 19; Pqueue firstRawDataQueue; -// Captor 1 2 3 4 5 6 7 8 +// Captor 1 2 3 4 5 6 7 8 bool selectionCaptors[] = {true, false, true, false, false, false, true, false}; int cptData = 0; diff --git a/Code-C/main.c b/Code-C/main.c index 77e17c5..4ce20ad 100644 --- a/Code-C/main.c +++ b/Code-C/main.c @@ -19,8 +19,8 @@ int nbRowBinFile = 900011; int nbRowIgnore = 19; Pqueue firstRawDataQueue; -// Captor 1 2 3 4 5 6 7 8 -bool selectionCaptors[] = {true, false, false, false, false, false, true, false}; +// Captor 1 2 3 4 5 6 7 8 +bool selectionCaptors[] = {true, false, true, false, false, false, true, false}; int cptData = 0; int cptFile = 1;