Arduino - ENC28J60 - EtherCard.h - Помилка компіляції - "слово homePage ()" було оголошено "extern" і пізніше "static" [-fpermissive]

  • Arduino Uno
    • ENC28J60
    • EtherCard.h

Я намагаюся скомпілювати і запустити цей приклад. Але я отримую цю помилку.

"статус виходу 1" слово 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
цей рядок: байт Ethernet :: буфер [500]; і кілька інших доводять, що цей код є C ++ не C, будь ласка, видаліть тег 'c'.
додано Автор user3629249, джерело
Ви можете просто видалити модифікатор static з оголошення функції homePage ().
додано Автор user3629249, джерело
проблема повинна бути в якомусь заголовному файлі. тому що всі розміщені коди знають це виклик ether.httpServerReply (homePage ()); передає адресу. Примітка: перевищення мети статичної дуже неприйнятно
додано Автор user3629249, джерело
проблема повинна бути в якомусь заголовному файлі. тому що всі розміщені коди знають це виклик ether.httpServerReply (homePage ()); передає адресу. Примітка: перевищення мети статичної дуже неприйнятно
додано Автор user3629249, джерело
Що робить (і не варто навіть згадувати, що функція) EtherCard.h сказати про функцію: homePage() ?
додано Автор user3629249, джерело
Що робить (і не варто навіть згадувати, що функція) EtherCard.h сказати про функцію: homePage() ?
додано Автор user3629249, джерело
Звідки в мережі було скопійовано?
додано Автор user3629249, джерело
Звідки в мережі було скопійовано?
додано Автор user3629249, джерело
Чи є заголовок для цього коду? Чи має він прототип для homePage() ? Це могло б неявно визначити його як зовнішнє.
додано Автор 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 repo показує лише 3 файли, всі з яких є прикладами.

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

Я пропоную оновити з https://github.com/jcw/ethercard .

0
додано

Ймовірно, що зміни в інструментах, що використовуються arduino gui, менш толерантні, ніж раніше, і бібліотека була оновлена.

Схоже, ваша бібліотека застаріла, пошук домашньої сторінки в github repo показує лише 3 файли, всі з яких є прикладами.

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

Я пропоную оновити з https://github.com/jcw/ethercard .

0
додано

Будь ласка, перевірте код, який я надав. Це ідентично ескізу, наданому Сторінка Github Жана-Клода Віппера , окрім того, мені завжди доводиться надавати 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
додано

Будь ласка, перевірте код, який я надав. Це ідентично ескізу, наданому Сторінка Github Жана-Клода Віппера , окрім того, мені завжди доводиться надавати 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
додано

Будь ласка, перевірте код, який я надав. Це ідентично ескізу, наданому Сторінка Github Жана-Клода Віппера , окрім того, мені завжди доводиться надавати 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
додано
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147