Arduino - ENC28J60 - EtherCard.h - コンパイルエラー - 'word homePage()'が 'extern'、その後 'static'と宣言されました[-fpermissive]

  • Arduino Uno
    • ENC28J60
    • EtherCard.h

この例をコンパイルして実行しようとしています。しかし、私はこのエラーを受けています。

"終了ステータス1 'word homePage()'は 'extern'以降と宣言されました   'static' [-fpermissive] "

#include 

static byte mymac[] = {0x65,0x77,0x33,0x2D,0x30,0x66};
static byte myip[] = {192,168,0,99};

byte Ethernet::buffer[500];
BufferFiller bfill;

static word homePage() { 
  bfill = ether.tcpOffset();
  bfill.emit_p( PSTR ( 
    "HTTP/1.0 503 test page\r\n"
    "Content-Type: text/html\r\n"
    "Retry-After: 600\r\n"
    "\r\n"
    "<html>"
    "<head><title>"
    "Arduino test page"
    "</title></head>"
    "<body>"
    "

Test

" 
    "
Test" "</body>" "</html>" )) ; return bfill.position(); } void setup() { //put your setup code here, to run once: Serial.begin(57600); Serial.println("TEST"); Serial.println(); Serial.print("Status: "); if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) { Serial.println( "Failed to access Ethernet controller"); } else { Serial.println( "Ethernet controller OK!"); ether.staticSetup(myip); ether.dhcpSetup(); } Serial.println(); ether.printIp("My IP: ", ether.myip); ether.printIp("GW IP: ", ether.gwip); ether.printIp("DNS IP: ", ether.dnsip); } void loop() { //put your main code here, to run repeatedly: word pos = ether.packetLoop(ether.packetReceive()); if (pos){ for (int i=pos;Ethernet::buffer[i]; i++) { Serial.print((char)Ethernet::buffer[i]); Serial.println(); ether.httpServerReply(homePage()); } } }

コードやライブラリに問題がありますか? 例はネットからコピーされました。 図書館を更新しました。

この問題で私を助けてもらえますか。それを修正するには?

0
この行: byte Ethernet :: buffer [500]; その他のコードは、このコードがCではなくC ++であることを証明しています。「c」タグを削除してください。
追加された 著者 user3629249,
homePage()関数の宣言から static 修飾子を削除するだけで済みます。
追加された 著者 user3629249,
問題は何らかのヘッダファイルにあるはずです。投稿されたコードはすべてether.httpServerReply(homePage())への呼び出しであることを知っているためです。アドレスを渡しています。注: static の目的を破ることは非常に眉をひそめます
追加された 著者 user3629249,
問題は何らかのヘッダファイルにあるはずです。投稿されたコードはすべてether.httpServerReply(homePage())への呼び出しであることを知っているためです。アドレスを渡しています。注: static の目的を破ることは非常に眉をひそめます
追加された 著者 user3629249,
EtherCard.hがその機能について何を(そしてその機能についても言及すべきではない): homePage()
追加された 著者 user3629249,
EtherCard.hがその機能について何を(そしてその機能についても言及すべきではない): homePage()
追加された 著者 user3629249,
ネットのどこからコピーされたのですか?
追加された 著者 user3629249,
ネットのどこからコピーされたのですか?
追加された 著者 user3629249,
このコードのヘッダファイルはありますか? homePage()のプロトタイプはありますか?それは暗黙のうちにexternとしてそれを定義するでしょう。
追加された 著者 Unimportant,

7 答え

関数 homePage がstorafeクラス指定子 static なしでヘッダで宣言されたようです。

However then it is defined with the storage class specifier static

static word homePage() { 
//...

そして、コンパイラはこの矛盾について報告します。

関数定義からストレージクラス指定子 static を削除してもかまいません。

別の方法は、ヘッダの前にストレージクラス指定子 static を持つ関数宣言を置くことです。この場合、関数は内部リンケージを持ちます。

0
追加された

関数 homePage がstorafeクラス指定子 static なしでヘッダで宣言されたようです。

However then it is defined with the storage class specifier static

static word homePage() { 
//...

そして、コンパイラはこの矛盾について報告します。

関数定義からストレージクラス指定子 static を削除してもかまいません。

別の方法は、ヘッダの前にストレージクラス指定子 static を持つ関数宣言を置くことです。この場合、関数は内部リンケージを持ちます。

0
追加された

それはおそらくarduinoのguiによって使用されるツールの変更は以前よりも許容度が低く、ライブラリが更新されたことです。

あなたのライブラリは古くなっているように見えます、githubレポジトリでホームページを検索しても3つのファイルしか表示されません。それらはすべて例です。

https://github.com/jcw/ethercard/search?utf8=%E2%9C%93&q=homepage

https://github.com/jcw/ethercard から更新することをお勧めします。

0
追加された

それはおそらくarduinoのguiによって使用されるツールの変更は以前よりも許容度が低く、ライブラリが更新されたことです。

あなたのライブラリは古くなっているように見えます、githubレポジトリでホームページを検索しても3つのファイルしか表示されません。それらはすべて例です。

https://github.com/jcw/ethercard/search?utf8=%E2%9C%93&q=homepage

https://github.com/jcw/ethercard から更新することをお勧めします。

0
追加された

提供したコードで確認してください。 Jean-Claude WipperのGithubページで提供されているスケッチと同じです。それ以外の場合、私は常に Chip Select Pin を " ether.begin "機能に提供しなければなりません。そうしないとENC28J60が応答しません。

// Present a "Will be back soon web page", as stand-in webserver.
// 2011-01-30  http://opensource.org/licenses/mit-license.php
// Connection Diagram: http://i.stack.imgur.com/SvG7J.jpg

#include 

#define STATIC 1 //set to 1 to disable DHCP (adjust myip/gwip values below)
#define CS_PIN 10

#if STATIC
// ethernet interface ip address
static byte myip[] = { 192,168,1,200 };
// gateway ip address
static byte gwip[] = { 192,168,1,1 };
#endif

// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[500];//tcp/ip send and receive buffer

const char page[] PROGMEM =
"HTTP/1.0 503 Service Unavailable\r\n"
"Content-Type: text/html\r\n"
"Retry-After: 600\r\n"
"\r\n"
"<html>"
  "<head><title>"
    "Service Temporarily Unavailable"
  "</title></head>"
  "<body>"
    "

This service is currently unavailable

"
    "
" "The main server is currently off-line.
" "Please try again later." "
" "</body>" "</html>" ; void setup(){ Serial.begin(9600); Serial.println("\n[backSoon]"); if (ether.begin(sizeof Ethernet::buffer, mymac, CS_PIN) == 0) Serial.println( "Failed to access Ethernet controller"); #if STATIC ether.staticSetup(myip, gwip); #else if (!ether.dhcpSetup()) Serial.println("DHCP failed"); #endif ether.printIp("IP: ", ether.myip); ether.printIp("GW: ", ether.gwip); ether.printIp("DNS: ", ether.dnsip); } void loop(){ //wait for an incoming TCP packet, but ignore its contents if (ether.packetLoop(ether.packetReceive())) { memcpy_P(ether.tcpOffset(), page, sizeof page); ether.httpServerReply(sizeof page - 1); } }

ダウンロード:

Arduino EtherCardライブラリ


Essential Task
Before uploading your sketch, you first need to connect your ENC28J60 module to your PC using LAN cable or you can also connect to your router. Now the main part comes. The variable "gwip" must match with your gateway IP address.

  • If you have connected with your PC, find your PC > Ethernet's IP address which may be look like "169.254.x.x":
    enter image description here

  • If you have connected to your router, place router's IP in "gwip".

ゲートウェイIPを取得したら、それを "gwip"変数に書き込み、スケッチをアップロードします。

0
追加された

提供したコードで確認してください。 Jean-Claude WipperのGithubページで提供されているスケッチと同じです。それ以外の場合、私は常に Chip Select Pin を " ether.begin "機能に提供しなければなりません。そうしないとENC28J60が応答しません。

// Present a "Will be back soon web page", as stand-in webserver.
// 2011-01-30  http://opensource.org/licenses/mit-license.php
// Connection Diagram: http://i.stack.imgur.com/SvG7J.jpg

#include 

#define STATIC 1 //set to 1 to disable DHCP (adjust myip/gwip values below)
#define CS_PIN 10

#if STATIC
// ethernet interface ip address
static byte myip[] = { 192,168,1,200 };
// gateway ip address
static byte gwip[] = { 192,168,1,1 };
#endif

// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[500];//tcp/ip send and receive buffer

const char page[] PROGMEM =
"HTTP/1.0 503 Service Unavailable\r\n"
"Content-Type: text/html\r\n"
"Retry-After: 600\r\n"
"\r\n"
"<html>"
  "<head><title>"
    "Service Temporarily Unavailable"
  "</title></head>"
  "<body>"
    "

This service is currently unavailable

"
    "
" "The main server is currently off-line.
" "Please try again later." "
" "</body>" "</html>" ; void setup(){ Serial.begin(9600); Serial.println("\n[backSoon]"); if (ether.begin(sizeof Ethernet::buffer, mymac, CS_PIN) == 0) Serial.println( "Failed to access Ethernet controller"); #if STATIC ether.staticSetup(myip, gwip); #else if (!ether.dhcpSetup()) Serial.println("DHCP failed"); #endif ether.printIp("IP: ", ether.myip); ether.printIp("GW: ", ether.gwip); ether.printIp("DNS: ", ether.dnsip); } void loop(){ //wait for an incoming TCP packet, but ignore its contents if (ether.packetLoop(ether.packetReceive())) { memcpy_P(ether.tcpOffset(), page, sizeof page); ether.httpServerReply(sizeof page - 1); } }

ダウンロード:

Arduino EtherCardライブラリ


Essential Task
Before uploading your sketch, you first need to connect your ENC28J60 module to your PC using LAN cable or you can also connect to your router. Now the main part comes. The variable "gwip" must match with your gateway IP address.

  • If you have connected with your PC, find your PC > Ethernet's IP address which may be look like "169.254.x.x":
    enter image description here

  • If you have connected to your router, place router's IP in "gwip".

ゲートウェイIPを取得したら、それを "gwip"変数に書き込み、スケッチをアップロードします。

0
追加された

提供したコードで確認してください。 Jean-Claude WipperのGithubページで提供されているスケッチと同じです。それ以外の場合、私は常に Chip Select Pin を " ether.begin "機能に提供しなければなりません。そうしないとENC28J60が応答しません。

// Present a "Will be back soon web page", as stand-in webserver.
// 2011-01-30  http://opensource.org/licenses/mit-license.php
// Connection Diagram: http://i.stack.imgur.com/SvG7J.jpg

#include 

#define STATIC 1 //set to 1 to disable DHCP (adjust myip/gwip values below)
#define CS_PIN 10

#if STATIC
// ethernet interface ip address
static byte myip[] = { 192,168,1,200 };
// gateway ip address
static byte gwip[] = { 192,168,1,1 };
#endif

// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[500];//tcp/ip send and receive buffer

const char page[] PROGMEM =
"HTTP/1.0 503 Service Unavailable\r\n"
"Content-Type: text/html\r\n"
"Retry-After: 600\r\n"
"\r\n"
"<html>"
  "<head><title>"
    "Service Temporarily Unavailable"
  "</title></head>"
  "<body>"
    "

This service is currently unavailable

"
    "
" "The main server is currently off-line.
" "Please try again later." "
" "</body>" "</html>" ; void setup(){ Serial.begin(9600); Serial.println("\n[backSoon]"); if (ether.begin(sizeof Ethernet::buffer, mymac, CS_PIN) == 0) Serial.println( "Failed to access Ethernet controller"); #if STATIC ether.staticSetup(myip, gwip); #else if (!ether.dhcpSetup()) Serial.println("DHCP failed"); #endif ether.printIp("IP: ", ether.myip); ether.printIp("GW: ", ether.gwip); ether.printIp("DNS: ", ether.dnsip); } void loop(){ //wait for an incoming TCP packet, but ignore its contents if (ether.packetLoop(ether.packetReceive())) { memcpy_P(ether.tcpOffset(), page, sizeof page); ether.httpServerReply(sizeof page - 1); } }

ダウンロード:

Arduino EtherCardライブラリ


Essential Task
Before uploading your sketch, you first need to connect your ENC28J60 module to your PC using LAN cable or you can also connect to your router. Now the main part comes. The variable "gwip" must match with your gateway IP address.

  • If you have connected with your PC, find your PC > Ethernet's IP address which may be look like "169.254.x.x":
    enter image description here

  • If you have connected to your router, place router's IP in "gwip".

ゲートウェイIPを取得したら、それを "gwip"変数に書き込み、スケッチをアップロードします。

0
追加された