C言語でUDP通信を実現する(使用機器:P8X32AとW5200、開発環境:SimpleIDE)
現在、添付いたしましたファイルのようにUDP通信プログラムを作成しているのですが、
エラーがなかなか取れません。
作成したプログラムのZIPファイルへのリンク
かなり代表的なエラーではあるのですが、
インクルードしたヘッダファイル(w5200.h)で定義しておりますので、
何が原因かなかなか見つけられておりません。
♦使用しているコード
loopback.c(下に記載)
loopback.h
socket.c
socket.h
w5200.c
w5200.h
wizchip_conf.c
wizchip_conf.h
__*ソースコードが長いため、記載できない部分につきましては下にまとめました。
作成したプログラムのZIPファイルへのリンク__
発生している問題・エラーメッセージ
SimpleIDE Version 1.1.2 propeller-elf-gcc.exe -v GCC 4.6.1 (propellergcc_v1_0_0_2408) propeller-elf-gcc.exe -I . -L . -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 -c loopback.c -o cmm/loopback.o loopback.c: In function 'loopback_udps': loopback.c:17:4: warning: implicit declaration of function 'getSn_SR' [-Wimplicit-function-declaration] loopback.c:19:12: error: 'SOCK_UDP' undeclared (first use in this function) loopback.c:19:12: note: each undeclared identifier is reported only once for each function it appears in loopback.c:20:10: warning: implicit declaration of function 'getSn_RX_RSR' [-Wimplicit-function-declaration] loopback.c:47:12: error: 'SOCK_CLOSED' undeclared (first use in this function) loopback.c:51:31: error: 'Sn_MR_UDP' undeclared (first use in this function) Done. Build Failed! Click error or warning messages above to debug.
loopback.c
c
1#include <stdio.h> 2#include "loopback.h" 3#include "socket.h" 4#include "w5200.h" 5#include "wizchip_conf.h" 6 7#if LOOPBACK_MODE == LOOPBACK_MAIN_NOBLCOK 8 9 10int32_t loopback_udps(uint8_t sn, uint8_t* buf, uint16_t port) 11{ 12 int32_t ret; 13 uint16_t size, sentsize; 14 uint8_t destip[4]; 15 uint16_t destport; 16 17 switch(getSn_SR(sn)) 18 { 19 case SOCK_UDP : 20 if((size = getSn_RX_RSR(sn)) > 0) 21 { 22 if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE; 23 ret = recvfrom(sn, buf, size, destip, (uint16_t*)&destport); 24 if(ret <= 0) 25 { 26#ifdef _LOOPBACK_DEBUG_ 27 printf("%d: recvfrom error. %ld\r\n",sn,ret); 28#endif 29 return ret; 30 } 31 size = (uint16_t) ret; 32 sentsize = 0; 33 while(sentsize != size) 34 { 35 ret = sendto(sn, buf+sentsize, size-sentsize, destip, destport); 36 if(ret < 0) 37 { 38#ifdef _LOOPBACK_DEBUG_ 39 printf("%d: sendto error. %ld\r\n",sn,ret); 40#endif 41 return ret; 42 } 43 sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero. 44 } 45 } 46 break; 47 case SOCK_CLOSED: 48#ifdef _LOOPBACK_DEBUG_ 49 //printf("%d:UDP loopback start\r\n",sn); 50#endif 51 if((ret = socket(sn, Sn_MR_UDP, port, 0x00)) != sn) 52 return ret; 53#ifdef _LOOPBACK_DEBUG_ 54 printf("%d:Opened, UDP loopback, port [%d]\r\n", sn, port); 55#endif 56 break; 57 default : 58 break; 59 } 60 return 1; 61} 62 63#endif 64
試したこと
エラーに関して参考にしたサイトに以下のものがあり、そのまま試しましたがエラーに変化はありませんでした。
C言語でMakefileの実行時、インクルードしているはずの変数が"undeclared"となる原因
もしかしたら、この上記のサイトに記載されていることを理解しきれてないのかもしれません
補足情報(使用機器、開発環境、参考にしたURL)
♦使用機器
WIZnet W5200 for QuickStart (#40002)
Propeller QuickStart (#40000)
♦IDE
simpleIDE
また、以下に参考にしたサイトを挙げておきます。
♦プログラムを作成するうえで参考にしたサイト*今回使用しているのはW5200
W5500 UDPサーバーへのデータ送信
WIZnet ioLibrary
W5500 UDP機能
♦エラーに関して参考にしたサイト
C言語でMakefileの実行時、インクルードしているはずの変数が"undeclared"となる原因
回答3件
あなたの回答
tips
プレビュー