ÈÕÆÚ£º2020-12-10
1 ʵÑé³ÌÐò±àд
2 ±àдӦÓòâÊÔ³ÌÐò
3 ÔËÐвâÊÔ
±¾ÊµÑéÀý³Ì·¾¶£ºi.MX6ULÖÕ½áÕß¹âÅÌ×ÊÁÏ/06_LinuxÇý¶¯Àý³Ì/04_gpioled_atomic
Ê×ÏÈ´´½¨ÐµÄÎļþgpioled_atomic.c£¬ÔÚLEDÇý¶¯³ÌÐò»ù´¡ÉϽøÐÐÐ޸ġ£Ê¹ÓÃÔ×Ó²Ù×÷À´ÊµÏÖÒ»´ÎÖ»ÄÜÔÊÐíÒ»¸öÓ¦Ó÷ÃÎÊLEDµÆ¡£Ð޸ĺóµÄÇý¶¯ÄÚÈÝÈçÏ£º







µÚ33ÐУ¬ÔÚLEDµÄÉ豸½á¹¹ÌåÖÐÌí¼ÓÔ×Ó±äÁ¿lock£¬ÓÃÀ´ÊµÏÖÒ»´ÎÖ»ÄÜÔÊÐíÒ»¸öÓ¦Ó÷ÃÎÊLEDµÆ£¬led_initÈë¿Úº¯Êý»á½«lockµÄÖµÉ豸Ϊ1¡£
µÚ45~55ÐУ¬µ±Ó¦ÓòâÊÔ³ÌÐò´ò¿ªledÉ豸ʱ£¬ÏÈÅжÁÔ×Ó±äÁ¿µÄÖµ£¬¼ì²éµ±Ç°LEDÉ豸ÓÐûÓб»ÆäËûÓ¦ÓÃʹÓá£Ã¿´Î´ò¿ªÇý¶¯É豸µÄʱºòÏÈʹÓà atomic_dec_and_test º¯Êý½« lock ¼õ 1£¬Èç¹û atomic_dec_and_testº¯Êý·µ»ØÖµÎªÕæ¾Í±íʾ lock µ±Ç°ÖµÎª 0£¬ËµÃ÷É豸¿ÉÒÔʹÓá£Èç¹û atomic_dec_and_test º¯Êý·µ»ØÖµÎª¼Ù£¬¾Í±íʾ lock µ±Ç°ÖµÎª¸ºÊý(lock ֵĬÈÏÊÇ 1)£¬lock ֵΪ¸ºÊýµÄ¿ÉÄÜÐÔÖ»ÓÐÒ»¸ö£¬ÄǾÍÊÇÆäËûÉ豸ÕýÔÚʹÓà LED¡£ÆäËûÉ豸ÕýÔÚʹÓà LED µÆ£¬ÄÇô¾ÍÖ»ÄÜÍ˳öÁË£¬ÔÚÍ˳ö֮ǰµ÷Óú¯Êý atomic_inc ½« lock ¼Ó 1£¬ÒòΪ´Ëʱ lock µÄÖµ±»¼õ³ÉÁ˸ºÊý£¬±ØÐëÒª¶ÔÆä¼Ó 1£¬½« lock µÄÖµ±äΪ 0¡£
µÚ113ÐУ¬Ó¦ÓòâÊÔ³ÌÐòͨ¹ýclose¹Ø±ÕÉ豸Çý¶¯Îļþ£¬ÔÚled_release º¯ÊýÖÐͨ¹ýatomic_inc ÊÍ·Å lcok£¬Ò²¾ÍÊǽ« lock ¼Ó 1¡£
µÚ136ÐУ¬³õʼ»¯Ô×Ó±äÁ¿ lock£¬³õʼֵÉèÖÃΪ 1£¬ÕâÑùÿ´Î¾ÍÖ»ÔÊÐíÒ»¸öÓ¦ÓÃʹÓà LEDµÆ¡£
´´½¨Ó¦ÓòâÊÔÎļþgpioled_atomic_test.cÎļþ£¬¾ßÌåÄÚÈÝÈçÏ£º


1¡¢±àÒëÇý¶¯³ÌÐò
±àдMakefileÎļþ£¬ÐÞ¸Äobj-mµÄֵΪgpioled_atomic.o£¬¾ßÌåÄÚÈÝÈçÏ£º

Ê×ÏÈÎÒÃÇÔÚÖÕ¶ËÊäÈëÁ½¸öÃüÁÉèÖÃÁ½¸ö»·¾³±äÁ¿£©£º
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
È»ºóʹÓá°make¡±ÃüÁî½øÐбàÒ룬Éú³Égpioled_atomic.koÇý¶¯Ä£¿éÎļþ¡£
2¡¢±àÒëÓ¦ÓòâÊÔ³ÌÐò
ÊäÈëÏÂÁÐÃüÁî±àÒëgpioled_atomic_test.cÓ¦ÓòâÊÔ³ÌÐò£º
arm-linux-gnueabihf-gcc -o gpioled_atomic_test gpioled_atomic_test.c
±àÒë³É¹¦ºó£¬¾Í»áÉú³Égpioled_atomic_testÓ¦ÓÿÉÖ´ÐгÌÐò¡£
3¡¢ÔËÐвâÊÔ
Æô¶¯¿ª·¢°å£¬½«±àÒëºÃµÄgpioled_atomic.koÇý¶¯Ä£¿éÎļþºÍgpioled_atomic_testÓ¦ÓòâÊÔ³ÌÐò¿½±´µ½/lib/modules/4.1.15Ŀ¼Ï£¨¼ì²é¿ª·¢°å¸ùÎļþϵͳÖÐÓÐûÓС°/lib/modules/4.1.15¡±Õâ¸öĿ¼£¬Èç¹ûûÓеϰÐèÒª×ÔÐд´½¨Ò»Ï¡£¿ª·¢°åÖÐʹÓõÄÊǹâÅÌ×ÊÁÏÀïÃæÌṩµÄbusyboxÎļþϵͳ£¬¹âÅÌ×ÊÁϵġ°i.MX6ULÖÕ½áÕß¹âÅÌ×ÊÁÏ\08_¿ª·¢°åϵͳ¾µÏñ\03_Îļþϵͳ¾µÏñ\01_BusyboxÎļþϵͳ¡±Ä¿Â¼Ï£©¡£ÊäÈëÏÂÃæÃüÁî¼ÓÔØÄ£¿é£º
depmod
modprobe gpioled_atomic
Ä£¿é¼ÓÔØ³É¹¦ÓÐÈçͼ 3.1ÐÅÏ¢´òÓ¡£º

È»ºóʹÓÃgpioled_atomic_testÓ¦ÓòâÊÔ³ÌÐò²âÊÔÇý¶¯Îļþ¡£
ÊäÈëÏÂÃæµÄÃüÁî´ò¿ªLEDµÆ£º
./gpioled_atomic_test /dev/gpioled 1 &
²é¿´¿ª·¢°åÉϵĺìÉ«LEDµÆÊÇ·ñµãÁÁ£¬¡°&¡±±íʾÔÚºóÍ·´ò¿ª³ÌÐò£¬ÕâÑùÖն˲»»á±»Õ¼Óá£
ÔËÐнá¹ûÈçͼ 3.2Ëùʾ£º

¿ÉÒÔ¿´³ögpioled_atomic_testÓ¦ÓòâÊÔ³ÌÐòÕý³£ÔËÐУ¬´òÓ¡¡°App running times:1¡±ºÍ¡°App running times:2¡±£¬±íʾģÄâ25sµÄÉ豸ռÓá£Èç¹ûÔÚ25sÕ¼ÓÃÆÚ¼äÊäÈë¹Ø±ÕLEDµÆµÄÃüÁ
./gpioled_atomic_test /dev/gpioled 0
»áÓÐÈçͼ 3.3ÐÅÏ¢²úÉú£º

´íÎóÐÅÏ¢¡°file /dev/gpioled open failed!¡±£¬/dev/gpioledÉ豸Îļþ´ò¿ªÊ§°Ü£¬ËµÃ÷֮ǰ´ò¿ªLEDµÄÃüÁʹgpioled_atomic_testÕýÔÚÕ¼ÓÃ/dev/gpioledÉ豸Îļþ£¬Èç¹ûÔÙ´ÎÖ´ÐÐgpioled_atomic_testÈ¥´ò¿ª/dev/gpioledÉ豸ÎļþÔò»áʧ°Ü¡£ÐèÒªµÈ25s½áÊøÖ®ºó£¬ÆäËûÈí¼þ²ÅÄÜȥʹÓÃ/dev/gpioledÉ豸Îļþ¡£Õâ¸ö¾ÍÊDzÉÓÃÔ×Ó±äÁ¿ÊµÏÖÒ»´ÎÖ»ÄÜÓÐÒ»¸öÓ¦ÓóÌÐò·ÃÎÊ LED µÆ¡£
Ð¶ÔØÄ£¿éÎļþÃüÁ
rmmod gpioled_atomic