Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
zigbee ÖÐ OSAL ʼþ´«µÝ»úÖÆºÍÏûÏ¢´«µÝ»úÖÆ
 
  3213  次浏览      28
 2018-4-17 
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬½« OSAL ÕâÑùÒ»¸öʼþÇý¶¯µÄ¶àÈÎÎñµÄ×ÊÔ´·ÖÅä»úÖÆ×öÁËÒ»¸ö¼òÃ÷¶óÒªµÄ½éÉÜ£¬Ï£Íû¶Ô´ó¼ÒÓÐËù°ïÖú¡£

Ò»¡¢¸ÅÊö

OSAL (Operating System Abstraction Layer) £¬·­ÒëΪ¡°²Ù×÷ϵͳ³éÏó²ã¡±¡£ OSAL ¾ÍÊÇÒ»ÖÖÖ§³Ö¶àÈÎÎñÔËÐеÄϵͳ×ÊÔ´·ÖÅä»úÖÆ¡£OSALÓë±ê×¼µÄ²Ù×÷ϵͳ»¹ÊÇÓкܴóµÄÇø±ðµÄ¡£¼òµ¥¶øÑÔ£¬ OSAL ʵÏÖÁËÀàËÆ²Ù×÷ϵͳµÄijЩ¹¦ÄÜ£¬µ«²¢²»ÄܳÆÖ®ÎªÕæÕýÒâÒåÉϵIJÙ×÷ϵͳ¡£

¶þ¡¢OSALÈÎÎñÔËÐз½Ê½

ÎÒÃÇÒÔTI1.2.1µÄ BLE ЭÒéÕ»ÖÐµÄ SimpleBLEPeripheral ΪÀý£¬·ÖÎöһϠOSAL ¡£ÆäÖÐÓÐÒ»¸ö simpleBLEPeripheral.c Îļþ£¬ÀïÃæÓÐ2¸ö±È½ÏÖØÒªµÄº¯Êý£ºSimpleBLEPeripheral_Init ºÍ SimpleBLEPeripheral_ProcessEvent ¡£ SimpleBLEPeripheral_Init ÊÇÈÎÎñµÄ³õʼ»¯º¯Êý£¬¶ø SimpleBLEPeripheral_ProcessEvent Ôò¸ºÔð´¦Àí´«µÝ¸ø´ËÈÎÎñµÄʼþ¡£

´ó¸Åä¯ÀÀһϠSimpleBLEPeripheral_ProcessEvent Õâ¸öº¯Êý£¬ÎÒÃÇ¿ÉÒÔ·¢ÏÖ£¬´Ëº¯ÊýµÄÖ÷Òª¹¦ÄÜÊÇÅжÏÓɲÎÊý´«µÝµÄʼþÀàÐÍ£¬È»ºóÖ´ÐÐÏàÓ¦µÄʼþ´¦Àíº¯Êý¡£ÓÉ´Ë£¬¿ÉÒÔÍÆ¶Ï³ö BLE ЭÒéÕ»Ó¦ÓóÌÐòµÄÔËÐлúÖÆÈçÏÂͼËùʾ£º

µ±ÓÐÒ»¸öʼþ·¢ÉúµÄʱºò£¬ OSAL ¸ºÔ𽫴Ëʼþ·ÖÅ䏸Äܹ»´¦Àí´ËʼþµÄÈÎÎñ£¬È»ºó´ËÈÎÎñÅжÏʼþµÄÀàÐÍ£¬µ÷ÓÃÏàÓ¦µÄʼþ´¦Àí³ÌÐò½øÐд¦Àí¡£

Ã÷°×ÁËÕâ¸öÎÊÌ⣬еÄÎÊÌâÓÖ°ÚÔÚÁËÎÒÃǵÄÃæÇ°£º OSAL ÊÇÈçºÎ´«µÝʼþ¸øÈÎÎñµÄ¡£

Èý¡¢OSALµÄʼþ´«µÝ»úÖÆ

ÔÚÊÔͼŪÇå³þÕâ¸öÎÊÌâ֮ǰ£¬ÎÒÃÇÐèҪŪÇå³þÁíÍâÒ»¸öÊ®·Ö»ù´¡¶øÖØÒªµÄÎÊÌâ¡£ÄǾÍÊÇÈçºÎÏòÎÒÃǵÄÓ¦ÓóÌÐòÖÐÌí¼ÓÒ»¸öÈÎÎñ¡£

ÎÒÃÇÏÈÀ´¿´¿´ simpleBLEPeripheral.c ÊÇÈçºÎÌí¼ÓÈÎÎñµÄ¡£

ÎÒÃÇ´ò¿ª OSAL_SimpleBLEPeripheral.c Îļþ¡£ÕâÀïÎÒÃÇ¿ÉÒÔÕÒµ½Ò»¸öºÜÖØÒªµÄÊý×étasksArr ºÍÒ»¸öͬÑùºÜÖØÒªµÄº¯Êý osalInitTasks¡£

TaskArr Õâ¸öÊý×éÀï´æ·ÅÁËËùÓÐÈÎÎñµÄʼþ´¦Àíº¯ÊýµÄµØÖ·£¬ÔÚÕâÀïʼþ´¦Àíº¯Êý¾Í´ú±íÁËÈÎÎñ±¾Éí£¬Ò²¾ÍÊÇ˵ʼþ´¦Àíº¯Êý±êʶÁËÓëÆä¶ÔÓ¦µÄÈÎÎñ¡£

osalInitTasks ÊÇ OSAL µÄÈÎÎñ³õʼ»¯º¯Êý£¬ËùÓÐÈÎÎñµÄ³õʼ»¯¹¤×÷¶¼ÔÚÕâÀïÃæÍê³É£¬²¢ÇÒ×Ô¶¯¸øÃ¿¸öÈÎÎñ·ÖÅäÒ»¸öID¡£

ÒªÌí¼ÓÐÂÈÎÎñ£¬ÎÒÃÇÐèÒª±àдÐÂÈÎÎñµÄʼþ´¦Àíº¯ÊýºÍ³õʼ»¯º¯Êý£¬È»ºó½«Ê¼þ´¦Àíº¯ÊýµÄµØÖ·¼ÓÈë´ËÊý×顣ȻºóÔÚ osalInitTasks Öе÷ÓôËÈÎÎñµÄ³õʼ»¯º¯Êý¡£ÔÚ´ËÀýÖУ¬ÎÒÃÇ´ËǰÌáµ½¹ýµÄSimpleBLEPeripheral_ProcessEvent Õâ¸öº¯Êý±»Ìí¼Óµ½ÁËÊý×éµÄĩ⣬ SimpleBLEPeripheral_Init Õâ¸öº¯ÊýÔÚ osalInitTasks Öб»µ÷Óá£

ÖµµÃ×¢ÒâµÄÊÇ£¬TaskArr Êý×éÀï¸÷ÈÎÎñº¯ÊýµÄÅÅÁÐ˳ÐòÒªÓë osalInitTasks º¯ÊýÖе÷Óø÷ÈÎÎñ³õʼ»¯º¯ÊýµÄ˳Ðò±ØÐëÒ»Ö£¬Ö»ÓÐÕâÑù²ÅÄܹ»±£Ö¤Ã¿¸öÈÎÎñÄܹ»Í¨¹ý³õʼ»¯º¯Êý½ÓÊÕµ½ÕýÈ·µÄÈÎÎñID¡£

ÁíÍ⣬ΪÁ˱£´æÈÎÎñ³õʼ»¯º¯ÊýËù½ÓÊÕµÄÈÎÎñID£¬ÎÒÃÇÐèÒª¸øÃ¿Ò»¸öÈÎÎñ¶¨ÒåÒ»¸öÈ«¾Ö±äÁ¿À´±£´æÕâ¸öID¡£ÔÚ SimpleBLEPeripheral ÖÐ SimpleBLEPeripheral.c Öж¨ÒåÁËÒ»¸öÈ«¾Ö±äÁ¿ SimpleBLEPeripheral_TaskID ;²¢ÇÒÔÚ SimpleBLEPeripheral_Init º¯ÊýÖнøÐÐÁ˸³Öµ

{
SimpleBLEPeripheral_TaskID = task_id;
}

ÕâÌõÓï¾ä½«·ÖÅ䏸SimpleBLEPeripheral µÄÈÎÎñID±£´æÁËÏÂÀ´¡£

µ½´Ë£¬ÎÒÃǾ͸øÓ¦ÓóÌÐòÖÐÍêÕûµÄÌí¼ÓÁËÒ»¸öÈÎÎñ¡£

ÎÒÃǻص½ OSAL ÈçºÎ½«Ê¼þ·ÖÅ䏸ÈÎÎñÕâ¸öÎÊÌâÉÏÀ´£¬ ÔÚ OSAL_SimpleBLEPeripheral.cÕâ¸öÎļþÖУ¬ÔÚ¶¨Òå TaskArr Õâ¸öÊý×éÖ®ºó£¬ÓÖ¶¨ÒåÁËÁ½¸öÈ«¾Ö±äÁ¿¡£

tasksCntÕâ¸ö±äÁ¿±£´æÁ˵±Ç°µÄÈÎÎñ¸öÊý¡£

tasksEvents ÊÇÒ»¸öÖ¸ÏòÊý×éµÄÖ¸Õ룬´ËÊý×é±£´æÁ˵±Ç°ÈÎÎñµÄ״̬¡£ÔÚÈÎÎñ³õʼ»¯º¯ÊýÖÐ×öÁËÈçϲÙ×÷

{
tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt );
osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));
}
/ *osal_mem_alloc()Ϊµ±Ç°OSALÖеĸ÷ÈÎÎñ·ÖÅä´æ´¢¿Õ¼ä(ʵ¼ÊÉÏÊÇÒ»¸öÈÎÎñÊý×é),
º¯Êý·µ»ØÖ¸ÏòÈÎÎñ»º³åÇøµÄÖ¸Õ룬Òò´ËtasksEventsÖ¸Ïò¸ÃÈÎÎñÊý×é(ÈÎÎñ¶ÓÁÐ).×¢Òâ
tasksEventsºÍºóÃæÌ¸µ½µÄtasksArr[]ÀïµÄ˳ÐòÊÇÒ»Ò»¶ÔÓ¦µÄ, tasksArr[ ]ÖеĵÚi¸ö
ʼþ´¦Àíº¯Êý¶ÔÓ¦ÓÚtasksEventsÖеĵÚi¸öÈÎÎñµÄʼþ.* /
/*osal _ memset£¨£©°Ñ¿ª±ÙµÄÄÚ´æÈ«²¿ÉèÖÃΪ0£»sizeof( uint16 )ÊÇ2¸ö×Ö½Ú£¬¼´Ò»¸öÈÎÎñµÄ³¤¶È£¨ÈÎÎñº¯ÊýͬÑùÊÇuint16¶¨Ò壩£¬³ËÒÔÈÎÎñÊýÁ¿tasksCnt£¬¼´È«²¿ÄÚ´æ¿Õ¼ä*/

ÎÒÃÇ¿ÉÒÔ¿´³öËùÓÐÈÎÎñµÄ״̬¶¼±»³õʼ»¯Îª0¡£´ú±íÁ˵±Ç°ÈÎÎñûÓÐÐèÒªÏìÓ¦µÄʼþ¡£

½ô½Ó×Å£¬ÎÒÃÇÀ´µ½ÁË main() º¯Êý¡£´Ë SimpleBLEPeripheral_Main.c ÎļþÖС£ÂÔ¹ýÐí¶à¶Ôµ±Ç°À´Ëµ²¢·ÇÖØÒªµÄÓï¾ä£¬ÎÒÃÇÏÈÀ´¿´ osal_init_system() Õâ¸öº¯Êý¡£Ôڴ˺¯ÊýÖУ¬osalInitTasks() ±»µ÷Ó㬴ӶøtasksEvents ÖеÄËùÓÐÄÚÈݱ»³õʼ»¯Îª0¡£

Ö®ºó£¬ÔÚmain() º¯ÊýÖУ¬ÎÒÃǽøÈëÁËosal_start_system() º¯Êý£¬´Ëº¯ÊýΪһ¸öËÀÑ­»·£¬ÔÚÕâ¸öÑ­»·ÖУ¬Íê³ÉÁËËùÓеÄʼþ·ÖÅä¡£

Ê×ÏÈÎÒÃÇÀ´¿´ÕâÑùÒ»¶Î´úÂ룺

{
do
{
if (tasksEvents[idx])
{
break;
}
} while (++idx < tasksCnt);
}

µ±tasksEvents Õâ¸öÊý×éÖеÄij¸öÔªËØ²»Îª0£¬¼´´ú±í´ËÈÎÎñÓÐʼþÐèÒªÏàÓ¦£¬Ê¼þÀàÐÍÈ¡¾öÓÚÕâ¸öÔªËØµÄÖµ¡£Õâ¸ödo-while Ñ­»·»áÑ¡³öµ±Ç°ÓÅÏȼ¶×î¸ßµÄÐèÒªÏìÓ¦µÄÈÎÎñ£¬

{
events = (tasksArr[idx])( idx, events );
}

´ËÓï¾äµ÷Óà tasksArrÊý×éÀïÃæÏàÓ¦µÄʼþ´¦Àíº¯ÊýÀ´ÏìӦʼþ¡£Èç¹ûÎÒÃÇÐÂÌí¼ÓµÄÈÎÎñÓÐÁËÐèÒªÏìÓ¦µÄʼþ£¬ÄÇô´ËÈÎÎñµÄʼþ´¦Àí³ÌÐò½«»á±»µ÷Óá£

¾ÍÕâÑù£¬OSAL ¾Í½«ÐèÒªÏìÓ¦µÄʼþ´«µÝ¸øÁ˶ÔÓ¦µÄÈÎÎñ´¦Àíº¯Êý½øÐд¦Àí¡£

¸½£ºÏê½â events = (tasksArr[idx])( idx, events )£»

(tasksArr[idx])( idx, events )ÊÇÒ»¸öº¯ÊýÖ¸ÕëÊý×é¡£ÄÇôʲôÊǺ¯ÊýÖ¸ÕëÊý×éÄØ£¿¹ËÃû˼Ò壬º¯ÊýÖ¸ÕëÊý×éÊÇÒ»¸öÊý×飬Êý×éÖдæ·ÅµÄÔªËØÀàÐÍÊǺ¯ÊýµÄÖ¸Õë¡£±í´ïʽ¾ÙÀý£ºchar£¨*p[]£©(int i) ;¶ÔÓÚÕâ¸ö±í´ïʽÎÒÃÇ´ÓÓï·¨ÉϽâÊÍΪ£¬pÊÇÒ»¸öÊý×é±äÁ¿Ãû£¬Êý×é±äÁ¿ÀàÐÍÊÇchar£¨*£©£¨int i£©£¬´æ·ÅÔªËØµÄÀàÐÍÊÇ£ºchar£¨int i£©º¯ÊýµÄÖ¸Õë¡£
tasksArr[idx]¾ÍÊÇÒ»¸öº¯ÊýÖ¸ÕëÊý×飬ÀïÃæ´æ´¢µÄ¾ÍÊǺ¯ÊýµÄÖ¸Õë¡£

const pTaskEventHandlerFn tasksArr[] =
{
LL_ProcessEvent, // task 0
Hal_ProcessEvent, // task 1
HCI_ProcessEvent, // task 2

#if defined ( OSAL_CBTIMER_NUM_TASKS )
OSAL_CBTIMER_PROCESS_EVENT( osal_CbTimerProcessEvent ), // task 3
#endif
L2CAP_ProcessEvent, // task 4
GAP_ProcessEvent, // task 5
GATT_ProcessEvent, // task 6
SM_ProcessEvent, // task 7
GAPRole_ProcessEvent, // task 8
GAPBondMgr_ProcessEvent, // task 9
GATTServApp_ProcessEvent, // task 10
SimpleBLEPeripheral_ProcessEvent // task 11
};

¼ÙÉèidx=11;£»ÄÇôevents = (tasksArr[11])( 11, events );£»Ò²¾ÍÊǵ÷ÓÃÁËSimpleBLEPeripheral_ProcessEventÕâ¸öº¯Êý£¬ÆäÖд«ÈëµÄ²ÎÊý¾ÍÊÇ£¨11£¬events£©£»Ò²¾ÍÊǵ÷ÓÃÁËevents = (tasksArr[11])( 11, events )£»Æäʵ¾ÍÊÇÖ´ÐÐÁËSimpleBLEPeripheral_ProcessEvent(11,events);

ËÄ¡¢Ê¼þµÄ²¶»ñ

²»¹ý½ÓÏÂÀ´¾ÍÓÐÁ˸ü¼ÓÉîÈëµÄÎÊÌâÁË£¬Ê¼þÊÇÈçºÎ±»²¶»ñµÄ£¿Ö±¹ÛһЩÀ´Ëµ¾ÍÊÇ£¬tasksEventsÕâ¸öÊý×éÀïµÄÔªËØÊÇʲôʱºò±»É趨Ϊ·ÇÁãÊý£¬À´±íʾÓÐʼþÐèÒª´¦ÀíµÄ£¿ÎªÁËÏêϸµÄ˵Ã÷Õâ¸ö¹ý³Ì£¬ÎÒ½«ÒÔSimpleBLEPeripheralÕâ¸öÀý³ÌÖÐÏìÓ¦°´¼üµÄ¹ý³ÌÀ´½øÐÐ˵Ã÷¡£ÆäËûµÄʼþËäÈ»ÉÔÓвî±ð£¬È´ÊÇ´óͬСÒì¡£

°´¼üÔÚÎÒÃǵÄÓ¦ÓÃÀïÃæÓ¦¸ÃÊôÓÚÓ²¼þ×ÊÔ´£¬ËùÒÔOSALÀíӦΪÎÒÃÇÌṩʹÓú͹ÜÀíÕâЩӲ¼þµÄ·þÎñ¡£ÉÔ΢ÁôÒâÒ»ÏÂÎÒÃÇ֮ǰ˵¹ýµÄtasksArrÕâÑùÒ»¸öÊý×飬Ëü±£´æÁËËùÓÐÈÎÎñµÄʼþ´¦Àíº¯Êý¡£ÎÒÃÇ´ÓÖз¢ÏÖÁËÒ»¸öºÜÖØÒªµÄÐÅÏ¢£ºHal_ProcessEvent¡£HAL£¨Hardware Abstraction Layer£©·­ÒëΪ¡°Ó²¼þ³éÏó²ã¡±¡£Ðí¶àÈËÔÚÕâÀï¾­³£°Ñ½« BLE µÄÓ²¼þ³éÏó²ãÓëÎïÀí²ã»ìΪһ̸¡£ÔÚÕâÀÎÒÃÇÓ¦¸Ã½« BLE µÄÓ²¼þ³éÏó²ãÓëÎïÀí²ãÇø·Ö¿ªÀ´¡£Ó²¼þ³éÏó²ãËù°üº¬µÄ·¶Î§ÊÇÎÒÃǵ±Ç°Ó²¼þµç·ÉÏÃæËùÓжÔÓÚϵͳ¿ÉÓõÄÉ豸×ÊÔ´¡£¶øÎïÀí²ãÔòÊÇÕë¶ÔÎÞÏßͨÐŶøÑÔ£¬ËüËù°üº¬µÄ½öÏÞÓÚÖ§³ÖÎÞÏßͨѶµÄÓ²¼þÉ豸¡£

ͨ¹ýÕâ¸öÖØÒªµÄÐÅÏ¢£¬ÎÒÃÇ¿ÉÒԵóöÕâÑùÒ»¸ö½áÂÛ£º OSAL ½«Ó²¼þµÄ¹ÜÀíÒ²×÷Ϊһ¸öÈÎÎñÀ´´¦Àí¡£ÄÇôÎÒÃǺÜ×ÔÈ»µÄȥѰÕÒ Hal_ProcessEvent Õâ¸öʼþ´¦Àíº¯Êý£¬¿´¿´Ëü¾¿¾¹ÊÇÈçºÎ¹ÜÀíÓ²¼þ×ÊÔ´µÄ¡£

ÔÚ ¡°HAL\Commn\ hal_drivers.c¡± Õâ¸öÎļþÖУ¬ÎÒÃÇÕÒµ½ÁËÕâ¸öº¯Êý¡£ÎÒÃÇÖ±½Ó·ÖÎöÓë°´¼üÓйصÄÒ»²¿·Ö¡£

{
if (events & HAL_KEY_EVENT)
{
#if (defined HAL_KEY) && (HAL_KEY == TRUE)
/* Check for keys */
HalKeyPoll();
/* if interrupt disabled, do next polling */
if (!Hal_KeyIntEnable)
{
osal_start_timerEx( Hal_TaskID, HAL_KEY_EVENT, 100);
}
#endif // HAL_KEY
return events ^ HAL_KEY_EVENT;
}
}

ÔÚʼþ´¦Àíº¯Êý½ÓÊÕµ½ HAL_KEY_EVENT ÕâÑùÒ»¸öʼþºó£¬Ê×ÏÈÖ´ÐÐHalKeyPoll()º¯Êý¡£ÓÉÓÚÕâ¸öÀý³ÌµÄ°´¼ü²ÉÓòéѯµÄ·½·¨»ñÈ¡£¬ËùÒÔÊǽûÖ¹Öжϵģ¬ÓÚÊDZí´ïʽ£¨!Hal_KeyIntEnable£©µÄÖµÎªÕæ¡£ÄÇôosal_start_timerEx( Hal_TaskID, HAL_KEY_EVENT, 100)µÃÒÔÖ´ÐС£osal_start_timerEx ÕâÊÇÒ»¸öºÜ³£Óõĺ¯Êý£¬ËüÔÚÕâÀïµÄ¹¦ÄÜÊǾ­¹ý100ºÁÃëºó£¬Ïò Hal_TaskID Õâ¸öIDËù±êʾµÄÈÎÎñ£¨Ò²¾ÍÊÇÆä±¾Éí£©·¢ËÍÒ»¸ö HAL_KEY_EVENT ʼþ¡£ÕâÑùÒÔÀ´£¬Ã¿¾­¹ý100ºÁÃ룬 Hal_ProcessEventÕâ¸öʼþ´¦Àíº¯Êý¶¼»áÖÁÉÙÖ´ÐÐÒ»´ÎÀ´´¦Àí HAL_KEY_EVENT ʼþ¡£Ò²¾ÍÊÇ˵ÿ¸ô100ºÁÃë¶¼»áÖ´ÐÐ HalKeyPoll() º¯Êý¡£

ÄÇôÎÒÃÇÀ´¿´¿´HalKeyPollº¯Êýµ½µ×ÔÚ¸ãʲô¹í£¡

´úÂëÖиøµÄ×¢ÊÍΪ£º

/* Check for keys */
HalKeyPoll();

ÓÚÊÇÎÒÃÇÍÆ¶ÏÕâ¸öº¯ÊýµÄ×÷ÓÃÊǼì²éµ±Ç°µÄ°´¼üÇé¿ö¡£½øÈ뺯ÊýÒ»¿´£¬¹û²»ÆäÈ»¡£ËäÈ»Õâ¸öº¯ÊýºÜ³¤ºÜ¸´ÔÓ£¬²»¹ýƾ½è×Å·Ç·²µÄ´ÏÃ÷²ÅÖÇ£¬ÎÒÃÇ»¹ÊÇÊ®·ÖÇå³þµÄÃ÷°×ÁË£¬¾­¹ýһϵÁеÄifÓï¾äºÍ¸³ÖµÓï¾ä£¬ÔÚ½Ó½üº¯ÊýĩβµÄµØ·½£¬ keys±äÁ¿£¨ÔÚº¯ÊýÆðʼλÖö¨ÒåµÄ£©»ñµÃÁ˵±Ç°°´¼üµÄ״̬¡£×îºó£¬ÓÐÒ»¸öÊ®·ÖÖØÒªµÄº¯Êýµ÷Óá£

( pHalKeyProcessFunction) ( keys, HAL_KEY_STATE_NORMAL ) ;

pHalKeyProcessFunctionÕâ¸öº¯ÊýÖ¸ÕëÖ¸ÏòÁËÄĸöº¯ÊýÎÒÃÇÏÖÔÚÒÀÈ»²»Çå³þ£¬µ«ÊÇΪÁËÎÒÃÇÓиöÇåÎú¶ø²»¼ä¶ÏµÄ˼·£¬ÎÒÔÚÕâÀïÏȸæËß´ó¼Ò¡£ÔÚÕâÀïµ÷ÓõÄÊÇ

void OnBoard_KeyCallback ( uint8 keys, uint8 state )

Õâ¸öº¯Êý¡£´Ëº¯ÊýÔÚ¡°OnBoard .c¡±ÎļþÖпÉÒÔÕÒµ½¡£ÔÚÕâ¸öº¯ÊýÖУ¬ÓÖµ÷ÓÃÁË

void OnBoard_KeyCallback ( uint8 keys, uint8 state )

ÔÚÕâ¸öº¯ÊýÖУ¬°´¼üµÄ״̬ÐÅÏ¢±»·â×°µ½ÁËÒ»¸öÏûÏ¢½á¹¹ÌåÖУ¨¶ÔÓÚÏûÏ¢£¬ÎÒÃÇÉÔºóÔÙ˵£©¡£×îºóÓÐÒ»¸ö¼«ÆäÖØÒªµÄº¯Êý±»µ÷ÓÃÁË¡£

osal _ msg_send( registeredKeysTaskID, ( uint8 * ) msgPtr );

ÓëÇ°ÃæµÄpHalKeyProcessFunctionÏàͬ£¬ÎÒÏÈÖ±½Ó¸æËß´ó¼ÒregisteredKeysTaskIDËùָʾµÄÈÎÎñÕýÊÇÎÒÃÇÐèÒªÏìÓ¦°´¼üµÄSimpleBLEPeripheralÕâ¸öÈÎÎñ¡£

ÄÇôҲ¾ÍÊÇ˵£¬ÔÚÕâÀïÎÒÃÇÏòSimpleBLEPeripheral·¢ËÍÁËÒ»¸ö¸½´ø°´¼üÐÅÏ¢µÄÏûÏ¢¡£ÔÚosal_msg_sendº¯ÊýÖÐ

osal_set_event( destination_task, SYS_EVENT_MSG );

±»µ÷Óã¬ËüÔÚÕâÀïµÄ×÷ÓÃÊÇÉèÖÃdestination_taskÕâ¸öÈÎÎñµÄʼþΪSYS_EVENT_MSG¡£¶øÕâ¸ödestination_taskÕýʽÓÉosal_msg_sendÕâ¸öº¯Êýͨ¹ý²ÎÊý´«µÝ¶øÀ´µÄ£¬ËüҲָʾµÄÊÇSimpleBLEPeripheralÕâ¸öÈÎÎñ¡£ÔÚosal_set_eventÕâ¸öº¯ÊýÖУ¬ÓÐÕâÑùÒ»¸öÓï¾ä£º

{
tasksEvents[task_id] |= event_flag;
}

ÖÁ´Ë£¬¸Õ²ÅËùÌáµ½µÄÎÊÌâµÃµ½Á˽â¾ö¡£ÎÒÃÇÔÙ½«Õâ¸ö¹ý³ÌÕûÀíÒ»±é¡£

Ê×ÏÈ£¬OSALרÃŽ¨Á¢ÁËÒ»¸öÈÎÎñÀ´¶ÔÓ²¼þ×ÊÔ´½øÐйÜÀí£¬Õâ¸öÈÎÎñµÄʼþ´¦Àíº¯ÊýÊÇHal_ProcessEvent ¡£ÔÚÕâ¸öº¯ÊýÖÐͨ¹ýµ÷ÓÃosal _ start_timerEx( Hal _ TaskID, HAL_KEY_EVENT, 100);Õâ¸öº¯ÊýʹµÃÿ¸ô100ºÁÃë¾Í»áÖ´ÐÐÒ»´Î HalKeyPoll( )º¯Êý¡£HalKeyPoll( )»ñÈ¡µ±Ç°°´¼üµÄ״̬£¬²¢ÇÒͨ¹ýµ÷ÓÃOnBoard _ KeyCallback º¯ÊýÏòSimpleBLEPeripheral ÈÎÎñ·¢ËÍÒ»¸ö°´¼üÏûÏ¢£¬²¢ÇÒÉèÖÃtasksEvents ÖÐSimpleBLEPeripheral Ëù¶ÔÓ¦µÄֵΪ·ÇÁã¡£Èç´Ë£¬µ±mainº¯ÊýÀïÕâÑùÒ»¶Î´úÂë

{
do
{
if (tasksEvents[idx])
{
break;
}
} while (++idx < tasksCnt);
}

Ö´ÐÐÁËÒÔºó£¬SimpleBLEPeripheral Õâ¸öÈÎÎñ¾Í»á±»ÌôÑ¡³öÀ´¡£È»ºóͨ¹ý

events = (tasksArr[idx])( idx, events )£»

Õâ¸öº¯Êýµ÷ÓÃÆäʼþ´¦Àíº¯Êý£¬Íê³ÉʼþµÄÏìÓ¦¡£

ÏÖÔÚ£¬ÎÒÃǻعýÍ·À´´¦ÀíÎÒÃÇ֮ǰÒÅÁôÏÂÀ´µÄÎÊÌâ¡£

µÚÒ»¡¢pHalKeyProcessFunction Õâ¸öº¯ÊýÖ¸ÕëΪºÎÖ¸ÏòÁËOnBoard_KeyCallbackº¯Êý¡£

ÔÚHAL\Common\ hal_drivers.cÕâ¸öÎļþÖУ¬ÎÒÃÇÕÒµ½ÁËHalDriverInit Õâ¸öº¯Êý£¬ÔÚÕâ¸öº¯ÊýÖУ¬°´¼üµÄ³õʼ»¯º¯ÊýHalKeyInit ±»µ÷Óá£ÔÚHalKeyInit ÖÐÓÐÕâÑùµÄÓï¾ä£º

{
pHalKeyProcessFunction = NULL;
}

Õâ˵Ã÷ÔÚ³õʼ»¯ÒÔºópHalKeyProcessFunction ²¢Ã»ÓÐÖ¸ÏòÈκÎÒ»¸öº¯Êý¡£ÄÇpHalKeyProcessFunction ÊÇʲôʱºò±»¸³ÖµµÄÄØ£¿

¾ÍÔÚHalKeyInitµÄÏ·½ÓÐÒ»¸öÕâÑùµÄº¯ÊýHalKeyConfig ¡£ÆäÖÐÓÐÕâÑùÒ»ÌõÓï¾ä£º

pHalKeyProcessFunction = cback£»

cback ÊÇHalKeyConfig Ëù´«½øÀ´µÄ²ÎÊý£¬ËùÒÔ£¬ÏëÒªÖªµÀËüËùÖ¸ÏòµÄº¯Êý£¬±ØÐëÕÒµ½Æäµ÷Óõĵط½¡£¾­¹ý¼òµ¥µÄËÑË÷ÎÒÃDz»ÄÑÕÒ³ö´ð°¸¡£ÔÚmainº¯ÊýÖÐÓÐÕâÑùÒ»¸öº¯Êýµ÷ÓãºInitBoard( OB_READY ); ´Ëº¯ÊýÖÐ×öÁËÈçϵ÷Óãº

{
HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
}

µÚ¶þ¡¢registeredKeysTaskID Ϊʲô±êʶÁËSimpleBLEPeripheral Õâ¸öÈÎÎñ£¿

ÓÉÓÚ OSAL ÊÇÒ»¸öÖ§³Ö¶àÈÎÎñµÄµ÷¶È»úÖÆ£¬ËùÒÔÔÚͬһʱ¼äÄÚ½«»áÓжà¸öÈÎÎñͬʱÔËÐС£µ«ÊÇ´ÓÂß¼­ÉÏÀ´½²£¬Ò»¸öʼþÖ»ÄÜÓÉÒ»¸öÈÎÎñÀ´´¦Àí¡£°´¼üʼþÒ²²»ÀýÍâ¡£

ÄÇôÈçºÎÏò OSAL ÉùÃ÷´¦Àí°´¼üʼþµÄÈÎÎñÊÇSimpleBLEPeripheral ÄØ£¿

ÔÚSimpleBLEPeripheral_Init £¨SimpleBLEPeripheral µÄÈÎÎñ³õʼ»¯º¯Êý£©ÖÐÓÐÕâôһ¸öÓï¾ä£º

{
RegisterForKeys( SimpleBLEPeripheral_TaskID );
}

RegisterForKeys º¯ÊýÏò OSAL ÉùÃ÷°´¼üʼþ½«ÓÉ SimpleBLEPeripheral ÈÎÎñÀ´´¦Àí¡£ÔÚ RegisterForKeys º¯ÊýÖУº

{
registeredKeysTaskID = task_id;
}

ÎÒÏëÎÒ²»ÓÃÔÙ×ö¶àÓàµÄ½âÊÍÁË£¬´ÏÃ÷µÄÄú¿Ï¶¨¿ÉÒÔÀí½â¡£

Îå¡¢ÏûÏ¢¶ÓÁÐ

Ê×ÏÈÎÒÐèÒªÏò´ó¼Ò½âÊÍÇå³þÏûÏ¢ÓëʼþµÄÁªÏµ¡£Ê¼þÊÇÇý¶¯ÈÎÎñÈ¥Ö´ÐÐijЩ²Ù×÷µÄÌõ¼þ£¬µ±ÏµÍ³²úÉúÁËÒ»¸öʼþ£¬½«Õâ¸ö´«µÝ¸øÏàÓ¦µÄÈÎÎñºó£¬ÈÎÎñ²ÅÄÜÖ´ÐÐÒ»¸öÏàÓ¦µÄ²Ù×÷¡£µ«ÊÇijЩʼþÔÚËü·¢ÉúµÄͬʱ£¬ÓÖ°éËæ×ÅһЩ¸½¼ÓÐÅÏ¢µÄ²úÉú¡£ÈÎÎñµÄʼþ´¦Àíº¯ÊýÔÚ´¦ÀíÕâ¸öʼþµÄʱºò£¬»¹ÐèÒª²Î¿¼Æä¸½¼ÓÐÅÏ¢¡£×îµäÐ͵ÄÒ»Àà±ãÊǰ´¼üÏûÏ¢£¬Ëüͬʱ²úÉúÁËÒ»¸öÄĸö°´¼ü±»°´ÏÂÁ˸½¼ÓÐÅÏ¢¡£ËùÒÔÔÚOnBoard_SendKeys Õâ¸öº¯ÊýÖУ¬²»½öÏòSimpleBLEPeripheral ·¢ËÍÁËʼþ£¬»¹Í¨¹ýµ÷ÓÃosal_msg_send º¯ÊýÏòSimpleBLEPeripheral ·¢ËÍÁËÒ»¸öÏûÏ¢£¬Õâ¸öÏûÏ¢¼Ç¼ÁËÕâ¸öʼþµÄ¸½¼ÓÐÅÏ¢¡£ÔÚSimpleBLEPeripheral_ProcessEvent ÖУ¬Í¨¹ý

{
MSGpkt = ( afIncomingMSGPacket_t *)osal_msg_receive( SimpleBLEPeripheral _ TaskID );
}

»ñÈ¡ÁËÕâÑùÒ»¸öÏûÏ¢£¬È»ºóÔÙ½øÒ»²½´¦Àí¡£

OSAL ÔÚºǫ́ά»¤ÁËÒ»¸öÏûÏ¢¶ÓÁУ¬Ã¿Ò»¸öÏûÏ¢¶¼»á±»·Åµ½Õâ¸öÏûÏ¢¶ÓÁÐÖÐÈ¥£¬µ±ÈÎÎñ½ÓÊÕµ½Ê¼þÒԺ󣬴ÓÏûÏ¢¶ÓÁÐÖлñÈ¡ÊôÓÚ×Ô¼ºµÄÏûÏ¢£¬È»ºó½øÐд¦Àí¡£

   
3213 ´Îä¯ÀÀ       28
????

HTTP????
nginx??????
SD-WAN???
5G?????
 
????

??????????
IPv6???????
??????????
???????
????

????????
????????
???????????????
??????????