Se connecter avec
S'enregistrer | Connectez-vous

Erreur de compilation

Dernière réponse : dans Programmation

J ai un ti soucis au niveau de la compilation de mon programme :

voici la partie qui fait erreur : :fou: 

  1. while(1) {
  2. int buf_size = 0;
  3. int nb_read = 0;
  4. float* volume;
  5. unsigned char from_board[6];
  6. unsigned char from_board2[4];
  7. unsigned char to_board[32];
  8. float z_be;
  9. float z_le;
  10. unsigned char* pz_be;
  11. unsigned char* pz_le;
  12. unsigned char* answer_ptr = from_board;
  13.  
  14. float z_noise;
  15. pz_be = (unsigned char *)&z_be;
  16. pz_le = (unsigned char *)&z_le;
  17. while ((nb_read = read(answer_ptr, 6 - buf_size)) > 0){
  18. buf_size += nb_read;
  19. answer_ptr += nb_read;
  20. printf("POUET %d\n", nb_read);
  21. if(buf_size >= 6)
  22. break;
  23. }
  24. if(buf_size != 6)
  25. continue;


Apres compilation les erreus sont les suivantes : :fou: 

c:\documents and settings\nicolas\desktop\simulator_profile_tvarminne\simu_finlande.c(98) : warning C4013: 'lis_parametres_flotteur' undefined; assuming extern returning int
c:\documents and settings\nicolas\desktop\simulator_profile_tvarminne\simu_finlande.c(135) : warning C4047: 'function' : 'int ' differs in levels of indirection from 'unsigned char *'
c:\documents and settings\nicolas\desktop\simulator_profile_tvarminne\simu_finlande.c(135) : warning C4024: 'read' : different types for formal and actual parameter 1
c:\documents and settings\nicolas\desktop\simulator_profile_tvarminne\simu_finlande.c(135) : warning C4022: 'read' : pointer mismatch for actual parameter 2
c:\documents and settings\nicolas\desktop\simulator_profile_tvarminne\simu_finlande.c(135) : error C2198: 'read' : too few actual parameters
Error executing cl.exe.

Je trouve pourtant que ma syntaxe n a pas d erreur... Il me semble hein ^^
Le problemes etant que je n est trouves aucune infornation a se sujet (bien sure cette partie en commentaire tous fonctionne),
Si quelqun peut m eclairer merci beaucoup! :hello: 

Autres pages sur : erreur compilation

Lassé par la pub ? Créez un compte

voici le code complet :

  1. #include "automatique.h"
  2. #include "simu_finlande.h"
  3.  
  4. #define DT (2.0)
  5. #define PATH "C:\\simulator_profile\\profil_swarm_conductivity.txt"
  6.  
  7.  
  8. double param_phys[10];
  9. double etat_systeme[3];
  10. double Temperature, Conductivity, Salinity;
  11. double RHO;
  12. double Table_profile[78][4];
  13. FILE* profil_fd;
  14.  
  15.  
  16. #ifdef WIN32 //allow Gettimeofday fonction to works.
  17.  
  18. #include <time.h>
  19. #include <sys/timeb.h>
  20.  
  21. int gettimeofday (struct timeval *tp, void *tz)
  22.  
  23. {
  24.  
  25. struct _timeb timebuffer;
  26.  
  27. _ftime (&timebuffer);
  28.  
  29. tp->tv_sec = timebuffer.time;
  30.  
  31. tp->tv_usec = timebuffer.millitm * 1000;
  32.  
  33. return 0;
  34.  
  35. }
  36.  
  37. #endif
  38.  
  39.  
  40.  
  41. /*int open_port(char port[10]) {
  42. int fd;
  43. struct termios options;
  44. //fd = open(port, O_RDWR | O_NOCTTY);
  45. fd = open(port, O_RDWR | O_NOCTTY | O_NDELAY);
  46. if (fd == -1) {
  47. fprintf(stderr, "open_port: Unable to open %s - %s\n", port, strerror(errno));
  48. }
  49. bzero(&options, sizeof(options));
  50. cfsetispeed(&options, B9600);
  51.  
  52. //no parity bit
  53. options.c_cflag &= ~PARENB;
  54. options.c_cflag &= ~CSTOPB;
  55. options.c_cflag &= ~CSIZE;
  56. options.c_cflag |= CS8;
  57. //not owner of the port
  58. options.c_cflag |= (CLOCAL | CREAD);
  59. //raw input characters are passed through exactely as they arrived
  60. options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
  61. //raw output
  62. options.c_oflag &= ~OPOST;
  63.  
  64. options.c_cc[VMIN] = 0;
  65. options.c_cc[VTIME] = 20; // 2 seconds
  66.  
  67. tcflush(fd, TCIOFLUSH);
  68. tcsetattr(fd, TCSANOW, &options);
  69.  
  70. return fd;
  71. }*/
  72.  
  73.  
  74. float noisify()
  75.  
  76. {
  77. float noise;
  78. noise = (int)(11.0*rand()/(RAND_MAX + 1.0))-5.0;
  79. if (noise == 0)
  80. noise = 1;
  81. // noise = 3.0e-2 * fabs(noise)/noise;
  82. noise = 0.0;
  83. return noise;
  84. }
  85.  
  86. int main(int argc, char *argv[]) {
  87. // int serial_fd;
  88. FILE* log_fd;
  89. struct timeval tv,tv1;
  90.  
  91. //initialisation de la seed pour le générateur de nombres aléatoires */
  92.  
  93.  
  94. srand((unsigned)time(NULL));
  95. log_fd = fopen("log", "w+");
  96. //serial_fd = open_port("/dev/ttyS0");
  97. printf("Port ouvert\n");
  98. lis_parametres_flotteur("config_flotteur");
  99. printf("Config lue\n");
  100.  
  101.  
  102. /*reading of the profile which simulate the environment*/
  103. profil_fd=fopen(PATH, "r");
  104. if (profil_fd == NULL) {
  105. printf("no profile in the folder\n");
  106. }
  107. read_profile();
  108.  
  109. /*initialisation*/
  110. etat_systeme[0]=1.5; /*simulate the position of the sensor in the bottom of the float*/
  111. etat_systeme[1]=0;
  112. //initialize temperature, conductivity and salinity
  113. read_sensors(etat_systeme[0]);
  114. RHO = density_computing(etat_systeme[0], Temperature, Salinity);
  115. printf("init %g %g %g %g %g\n\n", etat_systeme[0], Temperature, Conductivity, Salinity, RHO);
  116.  
  117. gettimeofday(&tv, NULL);
  118. gettimeofday(&tv1, NULL);
  119. while(1) {
  120. int buf_size = 0;
  121. int nb_read = 0;
  122. float* volume;
  123. unsigned char from_board[6];
  124. unsigned char from_board2[4];
  125. unsigned char to_board[32];
  126. float z_be;
  127. float z_le;
  128. unsigned char* pz_be;
  129. unsigned char* pz_le;
  130. unsigned char* answer_ptr = from_board;
  131.  
  132. float z_noise;
  133. pz_be = (unsigned char *)&z_be;
  134. pz_le = (unsigned char *)&z_le;
  135. /* while ((nb_read = read(answer_ptr, 6 - buf_size)) > 0){
  136. buf_size += nb_read;
  137. answer_ptr += nb_read;
  138. printf("POUET %d\n", nb_read);
  139. if(buf_size >= 6)
  140. break;
  141. }
  142. if(buf_size != 6)
  143. continue;
  144. */
  145. printf("from board %x%x%x%x%x%x\n", from_board[0], from_board[1], from_board[2], from_board[3],
  146. from_board[4], from_board[5]);
  147.  
  148. from_board2[0] = from_board[1];
  149. from_board2[1] = from_board[2];
  150. from_board2[2] = from_board[3];
  151. from_board2[3] = from_board[4];
  152.  
  153. volume=(float *)from_board2;
  154.  
  155. etat_systeme[2]=(double)*volume;
  156. printf("VOLUME: %g\n", etat_systeme[2]);
  157.  
  158. merson(etat_systeme[2], 0.0, DT, Temperature);
  159.  
  160. z_noise = noisify();
  161. z_le = (float)((etat_systeme[0] + z_noise)/(10.0));
  162. // conversion en big endian
  163. //for(buf_size=3; buf_size>=0; buf_size--)
  164. // *(pz_be+buf_size)=*(pz_le+3-buf_size);
  165.  
  166. /*update value of temperature et conductivity*/
  167. read_sensors(etat_systeme[0]);
  168.  
  169. //sprintf(to_board,"$AQCTD,12.000,0%2.3f,10.000*ff\n",fabs(z_le+1));
  170. sprintf(to_board,"$AQCTD,%2.3f,0%2.3f,%2.3f*ff\n",Temperature, fabs(z_le+1), Conductivity);
  171.  
  172. // write(serial_fd, to_board, 32);
  173. gettimeofday(&tv, NULL);
  174. printf("delay between 2 interrupts : %g\n", (tv.tv_sec - tv1.tv_sec +
  175. (tv.tv_usec-tv1.tv_usec)*1.0e-6));
  176. printf("%s", to_board);
  177. printf("%g %g %g %g %g %g %g %g\n\n", etat_systeme[0], z_le, etat_systeme[1], etat_systeme[2], Temperature,
  178. Conductivity, Salinity, RHO);
  179. fprintf(log_fd, "%g %g %g %g %d.%d %g %g %g %g %x%x%x%x%x%x\n", etat_systeme[0],
  180. etat_systeme[1], etat_systeme[2], z_noise, tv.tv_sec, tv.tv_usec,
  181. Temperature, Conductivity, Salinity, RHO,
  182. from_board[0], from_board[1], from_board[2], from_board[3],from_board[4], from_board[5]);
  183. fflush(log_fd);
  184. tv1.tv_sec=tv.tv_sec;
  185. tv1.tv_usec=tv.tv_usec;
  186. }
  187.  
  188. exit(0);
  189. }
  190.  
  191. int lis_parametres_flotteur(char* config_file){
  192. int i = 0;
  193. double valeur_lue;
  194. FILE* config_fd;
  195. config_fd = fopen(config_file, "r");
  196. if (config_fd == NULL){
  197. exit(1);
  198. }
  199. while(fscanf(config_fd, "%lf", &valeur_lue) == 1) {
  200. param_phys[i]=valeur_lue;
  201. if(i>10){
  202. exit(1);
  203. }
  204. i++;
  205. }
  206. return EXIT_SUCCESS;
  207. }
  208.  
  209.  
  210. void read_profile(void)
  211. {
  212. int i;
  213. double value;
  214. for (i = 0; i<78; i++)
  215. {
  216. if (fscanf(profil_fd, "%lf\n", &value) == 1){
  217. Table_profile[i][0] = value;
  218. }
  219. if (fscanf(profil_fd, "%lf\n", &value) == 1){
  220. Table_profile[i][1] = value;
  221. }
  222. if (fscanf(profil_fd, "%lf\n", &value) == 1){
  223. Table_profile[i][2] = value;
  224. }
  225. if (fscanf(profil_fd, "%lf\n", &value) == 1){
  226. Table_profile[i][3] = value;
  227. }
  228. }
  229. }
  230.  
  231. void read_sensors(double depth)
  232. {
  233. int i = 0;
  234. //double delta;
  235.  
  236. while(Table_profile[i][0] < depth){
  237. i++;
  238. }
  239. Temperature = Table_profile[i][1];
  240. Conductivity = Table_profile[i][2];
  241. Salinity = Table_profile[i][3];
  242. }


j ai pas encore trouver pourquoi sa plante ...

Bien au contraire les messages d erreur je les regarde! mais je sais pas ce que sa veut dire surtout celui la.


c:\documents and settings\nicolas\desktop\simulator_profile_tvarminne\simu_finlande.c(135) : error C2198: 'read' : too few actual parameters
Error executing cl.exe.

Citation :
Oki. C est le prototype de la fonction qui n est pas bon?
je ne vois pas comment y palier.

Il faut qu'il y ait cohérence entre l'appel et le prototype. C'est ton code...

Si il s'agit de l'appel de read() qui est une fonction système, le prototype est bon (si tu as bien inclus le header qui va bien). C'est à toi de modifier l'appel pour qu'il soit cohérent.
Si il s'agit de cet appel (il est commenté)
  1. read(answer_ptr, 6 - buf_size)

il y a effectivement un problème...
  1. ssize_t read(int fd, void *buf, size_t count);

Citation :
Citation :
ssize_t read(int fd, void *buf, size_t count);


oui le prototype est bon.pourtant je n arrive pas a voir l erreur, mon code me semble bon. l appel est bienune fonctionsysteme auquel j ai inclus les header qu il convient.

Tu ne vois donc pas que la fonction read() attend 3 paramètres et que tu lui en passes que 2 ?

Citation :
en utilisant fread() j enleve la plus part des warnings mais toujours pas l erreur.

Il ne faut pas utiliser les fonctions au hasard...

C'est soit
open() read() close() (fonctions systèmes)
soit
fopen() fread() fclose() (fonctions standards du C)
Mais pas un mélange entre les deux. Encore une fois il faut être cohérent. Tu as appris le C comment ?

Quelques notions a L IUT electronique! Mais la cela me bloque parcequ il me reste plus que cette erreur. J ai pas un gros niveau en C++je le sais, je suis capable de voir ce que fait tel ou tel fonction,ecrire du code mais sa vas pas plus loin....
Expert Programmation

Prototype
ssize_t read ( int fd, void *buf, size_t count );
------ --------- ------------
1 2 3

Utilisation
read ( answer_ptr, 6 - buf_size )
---------- ------------
2 3


En Français : Il manque le premier paramètre.
En anglais : The first parameter is missing.
En compilateur : Too few actual parameters.

Citation :
donc la si je fait ca:

  1. read (int *fd, answer_ptr, 6 - buf_size )


sa devraitfonctionner?

Non. Tu écris n'importe quoi.
Pourquoi 'int' ?
Pourquoi '*' ?

Je te conseille de cesser de coder au hasard et de reprendre le C depuis le début en consolidant tes connaissances au fur et à mesure.
Lassé par la pub ? Créez un compte