"); //-->
ioctl 函数就涉及到 RS485 驱动,RS485 模块的驱动是内核源码下的
“drivers/char/max485_ctl.c”文件。RS485 驱动文件中,ioctl 相关代码如下所示。
long max485_ctl_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)
{
printk("firecxx debug: max485_ctl_ioctl cmd is %d\n" , cmd);
switch(cmd)
{
case 1:
if(gpio_request(EXYNOS4_GPA0(7) ,"GPA0_7"))
{
DPRINTK("max485_ctl GPIO err!\r\n");
}
else
{
gpio_direction_output(EXYNOS4_GPA0(7), 1);
DPRINTK("max485_ctl Set High!\n");
gpio_free(EXYNOS4_GPA0(7));
mdelay(100);
}
break;
case 0:
if(gpio_request(EXYNOS4_GPA0(7) ,"GPA0_7"))
{
DPRINTK("max485_ctl GPIO err!\r\n");
}
else
{
gpio_direction_output(EXYNOS4_GPA0(7),0);
DPRINTK("max485_ctl Set Low!\n");
gpio_free(EXYNOS4_GPA0(7));
mdelay(100);
}
break;
default:
DPRINTK("max485_ctl COMMAND ERROR!\n");
return -ENOTTY;
}
return 0;
}
如上代码所示,红色部分是导致上层应用调用 ioctl 间隔至少 100ms,硬件管脚高低切换至少为 100ms的原因。
如果用户切换数据发送和接收的状态少于 100ms,可以将其 mdelay(100);注释,然后重新编译内核镜像烧写到开发板。但是请务必注意的是,发送和接收之间切换的时候,请务必在应用程序中根据实际情况给一定的延时,延时的大小,用户需要根据自己实际应用来调整,否则会出现丢数据的情况。
更多内容关注:北京迅为
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。