ÈçºÎÐÞ¸ÄGPIO¼Ä´æÆ÷
Çé¿öÊÇÕâÑùµÄ:ÎÒÃǹ«Ë¾ÏÖÔÚÔÚʹÓÃPowerPCµÄCPU,CPUÉÏÔËÐÐLinux 2.6.13, ÏÖÔÚÎÒÏëÒª¶ÔGPIO²Ù×÷,±àдÁËÒ»¸ö³ÌÐòȥдGPIOÊä³ö,³ÌÐò±àÒëÊÇͨ¹ýÁË,ÔËÐÐÇ°ÃæµÄprintfÖ®ÀàµÄÓï¾äÖ´ÐÐÕý³£,µ«Ö´Ðе½ÐÞ¸ÄGPIO¼Ä´æÆ÷ʱ,³öÏÖ"Segmentation fault"
ÎÒ¹À¼ÆÊDzÙ×÷ϵͳÕý³£ÔËÐÐÖ®ºó½øÈë±£»¤Ä£Ê½,±£»¤Ä£Ê½ÏÂÔËÐеijÌÐòÎÞ·¨¶ÔCPUµÄ¼Ä´æÆ÷Ö±½Ó²Ù×÷,Ó¦¸ÃÔõô°ìÄØ?
GPIOµØÖ·Çé¿öÈçÏÂ:
1.ÔÚ¿ª·¢°åÌṩµÄ.hÖÐ:
#define GPIO_BASE 0xEF600700
#define GPIO0_OR (GPIO_BASE+0x0)
ÎÒÓõľÍÊÇGPIO0_OR
2.³ÌÐò:
int main(int argc, char* argv[])
{
printf("hello,world!\n"); //Õý³£´òÓ¡
*(volatile ulong *)GPIO0_OR &= ~0x00000002; //³öSegmentation fault´í
return 0;
} linuxÏÂÓ¦ÓóÌÐò²»ÄÜÕâÑùÖ±½Ó·ÃÎÊÓ²¼þÉ豸£¬Ó¦ÓóÌÐòÊôÓÚÓû§²ã£¬ÄãÒª·ÃÎʵÄGIOÊôÓÚÓ²¼þÉ豸ÔÚÄں˲㡣¿ÉÒÔ½«Ó²¼þ¿ØÖƼ´¶ÔGIOµÄ·ÃÎÊ£¬ÊµÏÖ³ÉÒ»¸öÉ豸Çý¶¯³ÌÐò£¬ÌṩÍⲿ¶Áд»òioctl½Ó¿Ú¡£Ó¦ÓóÌÐòͨ¹ý´ò¿ª£¯¶Á£¯Ð´¸ÃÉ豸Íê³É¶Ô¸ÃGIOµÄ·ÃÎÊ¡£¹ØÓÚÇý¶¯³ÌÐòµÄʵÏÖ£¬½¨ÒéÔĶÁ¡¶linux É豸Çý¶¯³ÌÐò¡·Ò»Ê飬ÆäÖÐ×Ö·ûÉ豸һÕ£¬Ó¦¸Ã×ã¹»Ó¦¸¶ÄãÕâ¸öÐèÇó¡£ Äã¹À¼ÆµÄÊÇÕýÈ·µÄ£¬Í¨³£Ç¶Èëʽ±à³Ì¶ÔÓÚÓ²¼þµØÖ·µÄÖ±½Ó·ÃÎÊ·½Ê½ÊÇͨ¹ýÓ³É䣬½áºÏÓ²¼þ²¼Ïߣ¬½«ÐèÒª·ÃÎʵĵØÖ·Ó³Éäµ½ÄÚ´æ¿Õ¼ä£¬È»ºóÖ±½Ó·ÃÎÊ¡£
Ò³:
[1]