-
Notifications
You must be signed in to change notification settings - Fork 5.2k
[BUG]simulator下创建文件失败&使用windows的socket失败 #5708
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
simulator BSP现在不支持仿真网络,如果想要仿真网络需要用QEMU模拟器, |
simulator的BSP应该是支持文件系统的,但是我不知道怎么用,我会协调一下,出个文档来。 |
@mysterywolf 好的,谢谢您的回复。网络和文件系统,我用之前的4.0.0版本是没有问题的。socket直接调用windows的库,文件系统的使用和在STM32中的一样。上述的代码,使用旧版本是没有问题的 |
可以帮忙协助查找一下问题嘛 |
@mysterywolf 可以,具体需要怎么做 |
@mysterywolf 还需要我做什么吗? |
先不需要,我还在协调 |
@mysterywolf 创建socket失败的问题我解决了。是我没有调用WSAStartup。在调用socket函数前,添加如下代码后,问题解决了。
|
@BreederBai 哇 可否提一个pr优化一下? |
这个部分应该是用户无感的 不应该让用户调用这堆东西的 |
我没有用LWIP,我自己把windows下的socket做了个封装,没有在rtthread里做改动。这是代码的链接:https://gitee.com/breederbai/grapilot/blob/os-update/platform/simulator/windows/drivers/gp_socket_udp.c#L68 |
OK |
@mysterywolf 我似乎找到了问题,fcntl.h文件中的宏定义看着像是16进制的,但前面没有0x,我改为下图这样,似乎可以创建读取文件了。 |
感谢 我4.1.1 统一一下编码,现在存在两套编码,需要统一成一套就好了。这个纯数字的是musl库的标准 十六进制是newlib的标准 |
这两天我修一下这个编码的问题 统一改成十六进制,八进制的编码就是个奇葩。然后你再试试 |
#5267 这个pr已经修了一部分了 但是没有考虑到simulator在windows下的行为 |
@mysterywolf 还有个问题,O_BINARY这个宏定义似乎没有起作用或 |
O_BINARY 估计也是和编码有关系,你编码改的有问题,所以导致O_BINARY不会被识别到,等我改好我通知你再测一下。 |
@mysterywolf 好的,期待! |
@mysterywolf 问一个不相关的问题,rtthread能不能在ubuntu下运行,不使用qemu的情况下 |
linux的问题你再开一个issue吧 这个issue我来记录一下simulator的问题。下个礼拜我会去着手修复,这个礼拜很忙。 |
@mysterywolf 好的 |
你好 用邮件ping我一下我的邮箱 我加你一下微信 |
好的 |
@mysterywolf 我试了下似乎还是不行 |
@mysterywolf 您那边是如何测试这个文件系统的?能否给个例子,我看看是不是我的代码有问题。ps:我用的visual studio 2019 |
刚刚修复好 等合并之后测试一下 |
好的 |
感谢反馈! |
@mysterywolf 我试了下,还是有问题,创建依然会失败,下图是最新版本的。 |
@mysterywolf 是不是O_CREAT宏定义的值有问题,在windows里面是其他的值。 |
@mysterywolf 更改路径后,可以写入文件,但是小写全部变成了大写,而且PARAM.XML中并没有什么内容。 |
请把测试代码传上来一下吧 |
|
@mysterywolf 我还有一个疑问,root和sd都从初始化成功了。程序是如何选择写入到那个文件系统的 |
找不到RTC倒是没什么问题 没开RTC 写入文件的时间就是1970年而已 |
可以看一下rt-thread的文档中心 |
root是挂载在/下的,如果我直接往根目录下创建文件,理论上应该也是有的。而且我之前的使用,他确实是有的。这个问题创建的时候,不能用,我把打开文件的宏定义在前面增加0x直接变成16进制,也是能写到rt-thread\bsp\simulator\disk这个目录下的。我感觉这个地方还是有些问题。有没有可能是不同平台宏定义的值不一样。类unix和windows中不一样。 |
在fatfs下创建文件、写入这些,是没问题的。在飞控硬件上跑,是可以存到sd卡上的。 |
测试例程: #include <rtthread.h>
#include <unistd.h>
#include <fcntl.h>
#define PARAM_FILE_NAME "/sd/sys/param.xml"
int main(void)
{
rt_thread_mdelay(1000);
int fd;
fd = open(PARAM_FILE_NAME, O_WRONLY | O_CREAT | O_APPEND);
if (fd < 0) {
rt_kprintf("creat file fail, fd %d!\n", fd);
}
else {
char buffer[256];
rt_memset(buffer, 0x31, sizeof(buffer));
write(fd, buffer, sizeof(buffer));
fsync(fd);
close(fd);
}
int o_create = O_CREAT;
rt_kprintf("O_CREAT is %X!\n", o_create);
rt_kprintf("Hello RT-Thread!\n");
return 0;
} |
我的多旋翼飞控程序使用rt-thread,最近我将rtthread升级到4.1.0版本,发现无法创建文件并且无法创建socket。
该问题是怎么引起的?
使用simulator bsp,创建文件失败,创建socket也失败
重现步骤
#define PARAM_FILE_NAME "/sys/param.xml" fd = open(PARAM_FILE_NAME, O_WRONLY | O_CREAT);
fd的值为-1。
代码链接
The text was updated successfully, but these errors were encountered: