도와주세요!!
글 수 15,339
2003.06.18 10:01:52 (*.186.48.184)
6689
소스에 직접 답변을 달았습니다. [FG] 라는 표시를 추가했고요
: static int gpio_open(struct inode *inode, struct file *file)
: {
: // [FG] 사용하는 GPIO 만을 제어하세요 // GAFR, GPDR 은 그 값을 읽어 and 나 or 하세요
// 아래의 코드는 잘못된 것입니다.
GAFR = 0x00000000;
GPDR = 0xFF0;
GPSR = 0xFF0;
GPCR = 0x000;
:
: printk("<1>GPIO OPEN
");
:
: MOD_INC_USE_COUNT; // 사용수 증가.
: return 0;
: }
: static int gpio_read(struct file *file, char *data, size_t len, loff_t
: *ppos)
: {
: DECLARE_WAITQUEUE(wait,current);
: short temp[2];
: temp[0]=i;
:
: printk("<1>interrupt-1
");
// [FG] 이부분이 잘못됫군요 =============
: add_wait_queue(&queue,&wait);
: current->state = TASK_INTERRUPTIBLE;
: printk("<1>interrupt-s
");
:
: schedule();
:
: printk("<1>interrupt-sn
");
:
: current->state = TASK_RUNNING;
: remove_wait_queue(&queue,&wait); // [FG] 여기까지 ========================
: printk("<1>interrupt-e
");
: return len;
: //put_user(data,temp);
: }
사용하시려는 기능을 위해서는
interruptible_sleep_on( &queue );
이 한줄로 대치하시면 됩니다.
에러가 나는 이유는 이미 큐가 없어졌기 때문일겁니다.