当前位置: 技术问答>linux和unix
linux LED 驱动
来源: 互联网 发布时间:2016-03-25
本文导语: 最近在写一个基于linux操作系统的led驱动(s3c2410开发板),我通过操作GPIO使LED显示数字,现在遇到一个问题,对于输入小数,怎么才能让其显示呢? int gpio_ctl_ioctl(struct inode *node, struct file *file, unsigned int command,...
最近在写一个基于linux操作系统的led驱动(s3c2410开发板),我通过操作GPIO使LED显示数字,现在遇到一个问题,对于输入小数,怎么才能让其显示呢?
int gpio_ctl_ioctl(struct inode *node, struct file *file, unsigned int command, unsigned int arg)
通过这个函数貌似只能传递一个 unsigned int 型的数据,假设我要让led显示字符或者浮点型数据我应该怎么做呢?除了将小数放大外 还有其他的方法吗???
困惑ING~~希望知道的朋友帮帮忙哈~小弟在此谢过了~~~
int gpio_ctl_ioctl(struct inode *node, struct file *file, unsigned int command, unsigned int arg)
通过这个函数貌似只能传递一个 unsigned int 型的数据,假设我要让led显示字符或者浮点型数据我应该怎么做呢?除了将小数放大外 还有其他的方法吗???
困惑ING~~希望知道的朋友帮帮忙哈~小弟在此谢过了~~~
|
你可以参考 LDD3 中, tiny_tty.c 中的实现.
static int tiny_ioctl(struct tty_struct *tty, struct file *file,
unsigned int cmd, unsigned long arg)
{
struct tiny_serial *tiny = tty->driver_data;
if (cmd == TIOCGSERIAL) {
struct serial_struct tmp;
if (!arg)
return -EFAULT;
memset(&tmp, 0, sizeof(tmp));
tmp.type = tiny->serial.type;
tmp.line = tiny->serial.line;
tmp.port = tiny->serial.port;
tmp.irq = tiny->serial.irq;
tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
tmp.xmit_fifo_size = tiny->serial.xmit_fifo_size;
tmp.baud_base = tiny->serial.baud_base;
tmp.close_delay = 5*HZ;
tmp.closing_wait = 30*HZ;
tmp.custom_divisor = tiny->serial.custom_divisor;
tmp.hub6 = tiny->serial.hub6;
tmp.io_type = tiny->serial.io_type;
if (copy_to_user((void __user *)arg, &tmp, sizeof(struct serial_struct))) //注意看这里.
return -EFAULT;
return 0;
}
return -ENOIOCTLCMD;
}
|
char cFloatStr[] = "1.2345";
这样调用:
gpio_ctl_ioctl(a, b, c, (unsigned int)cFloatStr);
驱动里面实现gpio_ctl_ioctl的地方再转成浮点就OK了。
这样调用:
gpio_ctl_ioctl(a, b, c, (unsigned int)cFloatStr);
驱动里面实现gpio_ctl_ioctl的地方再转成浮点就OK了。
|
以前用LED显示小数的时候,我们是这样做的:
1、按照需要的精度,扩大相应的倍数,如3位小数就扩大1000倍
2、所有处理完需要显示的时候,把LED数据显示分为3部分,一部分显示整数部分,一部分显示小数部分,还有一部分显示小数点
3、分别把相应的整数和小数部分显示出来。
个人觉得现在用LED显示也应该这样做,LZ可以参考。
1、按照需要的精度,扩大相应的倍数,如3位小数就扩大1000倍
2、所有处理完需要显示的时候,把LED数据显示分为3部分,一部分显示整数部分,一部分显示小数部分,还有一部分显示小数点
3、分别把相应的整数和小数部分显示出来。
个人觉得现在用LED显示也应该这样做,LZ可以参考。