Я снял новую копию mbed-os, используя инструмент mbed-cli.Как использовать доступные библиотеки из mbed-os?
$ mbed new mbed-os-test
[mbed] Creating new program "mbed-os-test" (git)
[mbed] Adding library "mbed-os" from "https://github.com/ARMmbed/mbed-os" at latest revision in the current branch
[mbed] Updating reference "mbed-os" -> "https://github.com/ARMmbed/mbed-os/#dda7f7d77abd4330b05e686ce3bbe58230eb7876"
В конечном счете я работаю, чтобы позволить uVisor на устройстве NXP FRDM-K64F, но сейчас я только с помощью QuickStart учебник, чтобы получить простой пример работает без включения uVisor.
Так, как это было предложено в ссылке выше, я делаю source
каталог вновь созданный клон mbed-Os:
$ mkdir mbed-os-test/mbed-os/source
Я скопировать в основной main.cpp
и компилировать. Оно работает. Однако, когда я пытаюсь создать проблему, используя некоторые из подпрограмм библиотеки, в частности, EthernetInterface.
Замена мой простой main.cpp
из примера uVisor с более сложным (с использованием EthernetInterface) из приведенной выше ссылке:
#include "mbed.h"
#include "EthernetInterface.h"
int main() {
EthernetInterface eth;
eth.init(); //Use DHCP
eth.connect();
printf("IP Address is %s\n", eth.getIPAddress());
TCPSocketConnection sock;
sock.connect("mbed.org", 80);
char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n";
sock.send_all(http_cmd, sizeof(http_cmd)-1);
char buffer[300];
int ret;
while (true) {
ret = sock.receive(buffer, sizeof(buffer)-1);
if (ret <= 0)
break;
buffer[ret] = '\0';
printf("Received %d chars from server:\n%s\n", ret, buffer);
}
sock.close();
eth.disconnect();
while(1) {}
}
Compiling с:
mbed compile -m K64F -t GCC_ARM
Я встретился с компиляцией ошибки, указывающие, что класс EthernetInterface не имеет элементов, которые я пытаюсь вызвать.
../../mbed-os/source/main.cpp: In function 'int main()':
../../mbed-os/source/main.cpp:34:9: error: 'class EthernetInterface' has no member named 'init'
eth.init(); //Use DHCP
^
../../mbed-os/source/main.cpp:36:38: error: 'class EthernetInterface' has no member named 'getIPAddress'
printf("IP Address is %s\n", eth.getIPAddress());
^
../../mbed-os/source/main.cpp:38:5: error: 'TCPSocketConnection' was not declared in this scope
TCPSocketConnection sock;
^
../../mbed-os/source/main.cpp:39:5: error: 'sock' was not declared in this scope
sock.connect("mbed.org", 80);
^
Когда, конечно, класс EthernetInterface делает у таких членов. Я думаю, что проблема связана с mbed-утилитами, которые не компилируются с правильным исходным кодом, потому что он, кажется, находит заголовок. Если я добавлю параметр --source=
в mbed-компиляцию, я встречаюсь с другими ошибками в отношении того, что включает EthernetInterface.cpp.
mbed compile -m K64F -t GCC_ARM --source=../libraries/net/eth/EthernetInterface/
[ERROR] In file included from ../libraries/net/eth/EthernetInterface/EthernetInterface.cpp:19:0:
../libraries/net/eth/EthernetInterface/EthernetInterface.h:27:18: fatal error: rtos.h: No such file or directory
Файлы, конечно, содержащиеся в mbed-зева, я просто не знаю, как на самом деле использование их.
$ find . -name EthernetInterface.cpp
./libraries/net/eth/EthernetInterface/EthernetInterface.cpp
./features/net/FEATURE_IPV4/lwip-interface/EthernetInterface.cpp
Т.Л., др - Как мы можем связать с кодом библиотеки данного в libraries/
? Я могу напрямую включать заголовочные файлы напрямую, включая файл, но соответствующий источник, по-видимому, находится в каталоге features/
, а не в libraries/
.
Вопрос касается mbed OS, но документация, которую вы связали, относится к mbed Classic, что не то же самое. [Я не вижу здесь элемента 'init()') (https://docs.mbed.com/docs/mbed-os-api/en/mbed-os-5.1.0/api/features_2net_2FEATURE__IPV4_2lwip-interface_2EthernetInterface_8h_source. html) (или в суперклассах). – Notlikethat
@Notlikethat, в чем разница? В моей последней команде 'find' в конце вопроса есть два результата: первый в' library' является источником, соответствующим документации [здесь] (https://developer.mbed.org/handbook/Ethernet-Interface), а последний в 'features' - тот же источник, с которым вы связались в своем комментарии. Если в моем источнике включить «EthernetInterface.h», он, как представляется, включает последний, а не первый (который имеет больше функций, таких как 'init' и другие). – sherrellbc
_ «Эта документация охватывает сетевые библиотеки, доступные для mbed 2. Для mbed 5 сетевые библиотеки были пересмотрены, чтобы лучше поддерживать дополнительные сетевые стеки и безопасность потоков [здесь] (https://docs.mbed.com/docs/mbed -os-api-reference/en/5.1/API/связь/network_sockets /).__ - как я понимаю, mbed Classic (версия 2) - это всего лишь набор библиотек HAL, тогда как mbed OS (версия 5) полнофункциональная ОСРВ, ориентированная на взаимодействие, и между ними существует значительная несовместимость исходного уровня. Не могу сказать, что я когда-либо использовал меня сам. – Notlikethat