首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mbed以太网接口不工作

mbed以太网接口不工作
EN

Stack Overflow用户
提问于 2017-02-10 19:55:53
回答 1查看 1K关注 0票数 0

我有一个恩智浦FRDM-K64F板,我想设置以太网的例子,但我无法让它工作。这是我的代码在设置静态IP地址后的样子。

代码语言:javascript
复制
#include "mbed.h"
#include "main-hw.h"
#include "EthernetInterface.h"

// Network interface
EthernetInterface net;


int main(void)
{
    // Bring up the ethernet interface
    printf("Ethernet socket example\r\n");

    int ret;
    ret = net.set_network("192.168.15.177","255.255.255.0","192.168.15.1");
    printf("Set Net: %d\r\n",ret);

    char macadd[6];
    mbed_mac_address(macadd);
    printf("%02x:%02x:%02x:%02x:%02x:%02x \r\n", macadd[0], macadd[1], macadd[2], macadd[3], macadd[4], macadd[5]); 

    const char *mac = net.get_mac_address();
    printf("MAC address is: %s\r\n", mac ? mac : "No MAC");

    const char *ip = net.get_ip_address();
    printf("IP address is: %s\r\n", ip ? ip : "No IP");

    ret = net.connect();
    printf("Connect: %d\n",ret);

    // Show the network address
   // const char *ip = net.get_ip_address();
   // printf("IP address is: %s\n", ip ? ip : "No IP");

    // Open a socket on the network interface, and create a TCP connection to mbed.org
    TCPSocket socket;
    socket.open(&net);
    socket.connect("developer.mbed.org", 80);

    // Send a simple http request
    char sbuffer[] = "GET / HTTP/1.1\r\nHost: developer.mbed.org\r\n\r\n";
    int scount = socket.send(sbuffer, sizeof sbuffer);
    printf("sent %d [%.*s]\n", scount, strstr(sbuffer, "\r\n")-sbuffer, sbuffer);

    // Recieve a simple http response and print out the response line
    char rbuffer[64];
    int rcount = socket.recv(rbuffer, sizeof rbuffer);
    printf("recv %d [%.*s]\n", rcount, strstr(rbuffer, "\r\n")-rbuffer, rbuffer);

    // Close the socket to return its memory and bring down the network interface
    socket.close();

    // Bring down the ethernet interface
    net.disconnect();
    printf("Done\n");

    return 0;
}

我看到的是,我只能使用mbed_mac_address命令获得macAddress。使用net.get_mac_address和net.get_ip_address,我只能得到空值。

这个过程到达了net.connect,我看不到更多的结果。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-10 21:01:07

对于mbed OS 5.3.4,这在我的K64F上工作得很好:

代码语言:javascript
复制
#include "mbed.h"
#include "EthernetInterface.h"

// Network interface
EthernetInterface net;

// Socket demo
int main() {
    // Set static IP
    net.set_network("192.168.1.99", "255.255.255.0", "192.168.1.1");

    // Bring up the ethernet interface
    printf("Ethernet socket example\n");
    net.connect();

    // Show the network address
    const char *ip = net.get_ip_address();
    printf("IP address is: %s\n", ip ? ip : "No IP");

    printf("MAC address is: %s\n", net.get_mac_address());

    // Open a socket on the network interface, and create a TCP connection to mbed.org
    TCPSocket socket;
    socket.open(&net);
    socket.connect("developer.mbed.org", 80);

    // Send a simple http request
    char sbuffer[] = "GET / HTTP/1.1\r\nHost: developer.mbed.org\r\n\r\n";
    int scount = socket.send(sbuffer, sizeof sbuffer);
    printf("sent %d [%.*s]\n", scount, strstr(sbuffer, "\r\n")-sbuffer, sbuffer);

    // Recieve a simple http response and print out the response line
    char rbuffer[64];
    int rcount = socket.recv(rbuffer, sizeof rbuffer);
    printf("recv %d [%.*s]\n", rcount, strstr(rbuffer, "\r\n")-rbuffer, rbuffer);

    // Close the socket to return its memory and bring down the network interface
    socket.close();

    // Bring down the ethernet interface
    net.disconnect();
    printf("Done\n");
}

更新mbed OS

如果在线编译器中仍然有mbed库(不是mbed-os),右键单击'mbed',然后单击'Remove‘。然后点击'Add library‘> 'From URL’并输入https://github.com/armmbed/mbed-os

如果你有mbed-os,右键单击库并选择‘升级’。

从mbed CLI:

代码语言:javascript
复制
$ mbed remove mbed
$ mbed add mbed-os

或者当您已经有mbed-os时:

代码语言:javascript
复制
$ cd mbed-os
$ git pull
$ git checkout latest
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42158817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档