ÖÂRTOSΪClock_Struct·ÖÅäRTOSµÄÏÞÖÆ¶Ñ¡£
Ò»°ã¶øÑÔÒª¾¡¿ÉÄܵÄÔڹᴩÕû¸ö¹¤³ÌÖгõʼ»¯Ê±ÖÓºÍRTOSʵÌå¡£Èç¹û±ØÐëʹÓô´½¨RTOSʵÌ壬ÄÇôRTOS¶Ñ¾Í¿ÉÄÜÐèÒªÔÚappBLE.cfgÖнøÐе÷Õû´óС¡£
3.12ʹÓñ߽繤¾ßÀ´µ÷½ÚRAM & FlashµÄ±ß½çÅäÖÃ
±ß½ç¹¤¾ß£¨boundary.exe£©ÔÚµ÷Õû¸÷×ÔµÄÔ¤´¦Àí·ûʱ·Ç³£ÊµÓã¬ICALL_STACK0_ADDR(flash)ºÍICALL_RAM0_ADDR(RAM)£¬ÕâЩ±ß½ç¶¼ÊÇÔÚÓ¦ÓúÍÕ»¹¤³ÌÖ®¼ä¹²ÏíµÄ¡£±ß½ç¹¤¾ß¿ÉÒÔͨ¹ýµ÷Õû±ß½çÀ´°ÑûÓÐÓõ½µÄflash»òÕßRAMµÄ¿Õ¼ä·ÖÅ䏸ӦÓù¤³Ì¡£¸Ã¹¤¾ßÏû³ýÁ˹¤×÷ÔÚË«¹¤³Ì»·¾³ÏÂÊÖ¶¯µ÷ÕûRAMºÍFlash±ß½çµÄ±ØÒª¡£
±ß½ç¹¤¾ß²»»áÐ޸Ť³ÌÎļþ¡£ÁíÍ⣬±ß½ç¹¤¾ßÒ²²»»áÐÞ¸ÄÈκÎÔ´´úÂë»òÈκαàÒë/Á´½ÓµÄÓÅ»¯±íÏÖ¡£¸Ã¹¤¾ßÖ»ÊÇ»ùÓÚ¶Ô¹¤³ÌÓ³ÉäºÍÁ´½ÓÅäÖÃÎļþµÄ·ÖÎöºó¼òµ¥µÄµ÷ÕûRAMºÍFlash¸÷×ÔµÄ±ß½çµØÖ·¡£
±ß½ç¹¤¾ß°²×°Â·¾¶Îª£º
C:\\Program Files (x86)\\Texas Instruments\\Boundary
¸Ã·¾¶ÏÂÓиöReadMe.txtÎļþ£¬¸ÃÎļþ°üº¬Á˸ù¤¾ßµÄÆäËûÐÅÏ¢¡£
3.12.1 ÅäÖñ߽繤¾ß
±ß½ç¹¤¾ßʹÓÃÒ»¸öXMLÎļþ£¬BoundaryConfig.xml£¬Î»ÓÚ¹¤¾ßµÄ°²×°Â·¾¶£¬ÓÃÀ´ÅäÖÃĬÈϵŤ¾ß²Ù×÷¡£ÒªÇó±£³ÖÕâЩĬÈÏÖµ¡£
ÿ¸öSDKÖеŤ³Ì¶¼ÓÐһϵÁеÄÅäÖÃÎļþ£¬ÕâЩÎļþÓÉIDEµÄÁ¬½ÓÆ÷ºÍ±àÒëÆ÷ʹÓÃÀ´ÉèÖûòµ÷ÕûFlashºÍRAM¸÷×ÔµÄÖµ¡£ÕâЩÅäÖÃÎļþλÓÚ¸÷×Ô¹¤³ÌµÄÈçÏÂλÖãº
$BLE_INSTALL$\\Projects\\ble\\
1£® ±ß½çÁ¬½ÓÆ÷ÅäÖÃÎļþ£ºIAR-Boundary.xcl [IAR] or ccsLinkerDefines.cmd [CCS].ÓÃÓÚ¶¨Òå
ICALL_STACK0_ADDRºÍICALL_RAM0_ADDR±ß½çµØÖ·¡£Õâ¸öÎļþλÓÚTOOLS IDEÎļþ¼ÐÏÂÃæ²¢ÇÒÔÚÓе÷½ÚÐèÇóÊÇÓɱ߽繤¾ß¸üС£
2£® ±ß½çCµÄ¶¨ÒåÎļþIAR-Boundary.cdef [IAR] or ccsCompilerDefines.bcfg [CCS].ÏÞÓÚIAR»ò
CCSÁ¬½ÓÆ÷µÄÏÞÖÆ£¬ICALL_STACK0_ADDR±ØÐëÔÚ¸ÃÎļþÖе͍ÒåÓëÁ¬½ÓÆ÷ÖеÄÅäÖÃÎļþÖе͍ÒåÒ»Ö¡£Õâ¸öÎļþλÓÚTOOLS IDEÎļþ¼Ð£¬µ±Óе÷½ÚÐèÇóʱÓɱ߽繤¾ß¸üС£
3.12.2 ±ß½ç¹¤¾ß²Ù×÷
±ß½ç¹¤¾ß£¨boundary.exe£©±»×÷Ϊһ¸öÕ»¹¤³ÌIDE±àÒëºóµÄ²Ù×÷¡£Èç¹ûÐèÒª¶ÔRAMºÍ/»òFlashµÄ±ß½ç½øÐе÷Õû£¬±ß½ç¹¤¾ß»á¸üÐÂÁ¬½ÓÆ÷»ò±àÒëÆ÷¸÷×ÔµÄÅäÖÃÎļþ²¢Éú³ÉÒ»¸ö±àÒëºóµÄ´íÎóÀ´Í¨ÖªÒ»¸ö±ä»¯Ó¦¾·¢Éú¡£ÎªÁËÅäºÏÅäÖÃÖµµÄ¸üУ¬ÔÚÓ¦ÓúÍÕ»¹¤³ÌÖи÷Ö´ÐÐÒ»¸ö¡°Project
??Rebuild All¡±¡£
³ýÁË´úÂëºÍÄÚ´æµÄ´óСÍ⣬±ß½ç¹¤¾ßÒ²»áÔÚ¼ÆËãICALL_STACK0_ADDRµÄֵʱ¿¼ÂÇÔ¤ÁôÏÂÀ´µÄflashÒ³¡£flash±£ÁôÒ³µÄÀý×Ó°üº¬ÔÚCCAÒ³¡£flashÔ¤ÁôÒ³ÔÚÕ»¹¤³ÌÁ¬½ÓÆ÷ÅäÖÃÎļþÖж¨Òå¡£ Ò»¸öʹÓñ߽繤¾ßµÄÏȾöÌõ¼þ¾ÍÊÇÓ¦ÓúÍÕ»¹¤³ÌµÚÒ»´Î±àÒë±ØÐëÊdzɹ¦µÄ¡£Èç¹û²úÉúÒ»¸öÁ¬½ÓÆ÷´íÎó£¬Ê×ÏÈÓ¦ÑéÖ¤±¾´ÎµÄ¸Ä±äÓÐûÓг¬³öÉ豸flashºÍ/»òRAMÄÚ´æµÄ×î´óÖµ¡£µäÐ͵ÄÁ¬½ÓÆ÷´íÎóÊǵ±Õ»¹¤³ÌÅäÖÃΪʹÓÃÒªÇóÍⲿflashÄÚ´æµÄÌØÐÔ¡£ÒÀ¾Ý´íÎóÊÇ·ñÓÉflash»òRAM¿Õ¼äÔì³É£¬ÔÚ¸÷×ÔµÄÁ¬½ÓÆ÷ºÍ±àÒëÆ÷ÅäÖÃÎļþÖÐÊÖ¶¯µ÷ÕûflashºÍ/»òRAMµÄ±ß½ç¡£Ò»µ©¹¤³Ì¿ÉÒÔÁ¬½Ó³É¹¦£¬±ß½ç¹¤¾ß»áÖØÐµ÷Õû¸÷×Եı߽çֵΪ×î¼ÑÖµ¡£È»ºó°´ÕÕÒªÇóÖ´ÐС°Rebuild All¡±¡£
×¢Ò⣺³ý·ÇIARÅäÖÃΪչʾËùÓеıàÒëÏûÏ¢£¬·ñÔòÊDz»»á¸ø³öΪʲô±ß½ç¹¤¾ß»á²úÉúÒ»¸ö±àÒë´íÎóµÄÔÒòµÄ¡£µ±IARÅäÖÃΪÏÔʾËùÓеıàÒëÏûÏ¢£¬¡°TheProject Boundary Address Has Been Moved¡±¾Í»áÏÔʾÔÚ±àÒëÊä³ö´°¿Ú¡£ÔÚIARÖÐÉèÖÃTools ??Options ??Messages ??Show Build Messages to ¡°All¡±.
Ò»¸ö¹ØÓÚÖ´ÐÐÁ˱߽çÐ޸ĵıàÒëÏûÏ¢µÄÀý×ÓÈçÏ£º
/////////////////////////////////////////////////////////////////////// Boundary Operation Complete
/////////////////////////////////////////////////////////////////////// <<< WARNING >>>
The Project Boundary Address Has Been Moved Or A Config File Change Is Required Rebuild This Project For The Address Or Config File Change To Take Effect ///////////////////////////////////////////////////////////////////////
3.12.3 ½ûֹʹÓñ߽繤¾ß
ΪÁ˽ûÄܱ߽繤¾ß£¬´ò¿ªÕ»¹¤³ÌµÄ¹¤³Ì²Ù×÷ÏîÑ¡Ôñ¡°Build Actions¡±£¨IAR£©»òÕß¡°Steps¡±ÔÚCCS Build window£¨CCS£©£¬È»ºóÏëÏÂͼËùʾһ´¦±àÒëºóÃüÁîÐС£×îºÃÌáǰ¶Ô¸ÃÃüÁî½øÐб¸·ÝÒÔ±ãºóÃæ»áÓõ½±ß½ç¹¤¾ß¡£Ò»µ©±ß½ç¹¤¾ß±»½ûÄÜÁË£¬Á¬½ÓÆ÷ºÍ±àÒëÆ÷¸÷×ÔµÄÅäÖÃÎļþ¾Í¿ÉÒÔÏñ3.10.3ºÍ3.11.4½ÚÖеIJ½Öè½øÐÐÊÖ¶¯±à¼ÁË¡£
4 Ó¦ÓÃ
ÕâÒ»Õ¾ÃèÊöSimpleBLEPeipheral¹¤³ÌµÄÓ¦Óò¿·Ö£¬ÕâЩӦÓò¿·Ö¶¼°üº¬£º 1. Pre-RTOS³õʼ»¯£»
2. SimpleBLEPeripheralÈÎÎñ£ºÕâÊǸöÓ¦ÓÃÈÎÎñ£¬ÊÇϵͳÖÐÓÅÏȼ¶×îµÍµÄÈÎÎñ¡£¸ÃÈÎÎñµÄ
´úÂë°üº¬ÔÚ±àÒëÆ÷IDEÎļþ¼Ð¡°Application¡±ÖеÄsimpleBLEPeripheral.cºÍsimpleBLEPeripheral.hÎļþÖС£
3. Icall£ºÒ»¸ö³éÏóÁ˵ÄÕ»ºÍÆäËûÈÎÎñÖ®¼äµÄͨѶ½Ó¿ÚÄ£¿é¡£
×¢Ò⣺GAPRoleÈÎÎñÒ²ÊÇÓ¦Óù¤³Ì¹¤×÷¿Õ¼äµÄÒ»²¿·Ö¡£µ«ÊÇÕâ¸öÈÎÎñµÄ¹¦ÄÜÐÔ¸ü½Ó½üÓÚÐÒéÕ»ËùÒÔÔÚ5.2ÕÂÖÐÃèÊö¡£ 4.1 Start-up in main£¨£©
main£¨£©º¯ÊýÔÚIDE ¡°Startup¡±ÎļþϵÄmain.cÎļþÖУ¬ÊÇÕû¸öÔËÐÐʱ¼äµÄ¿ªÊ¼µã¡£ÕâÀïÒ²Êǰå×ÓÌá³öÖжϽûÄܺÍÇý¶¯³õʼ»¯µÄµØ·½¡£Í¬ÑùÔÚÕâ¸öº¯ÊýÖУ¬µçÔ´¹ÜÀíÒ²»á³õʼ»¯£¬ÈÎÎñ»á¹¹½¨»ò´´½¨¡£ÔÚ×îºóÒ»²½£¬Ê¹ÄÜÖжϣ¬SYS/BIOSÄں˵÷¶Èͨ¹ýµ÷ÓÃBIOS_start()Æô¶¯£¬Ã»Óзµ»Ø£¬¿´µÚ8ÕÅ»ñÈ¡main£¨£©º¯Êýµ½´ïǰµÄÆô¶¯Ë³Ðò£º
Void main() {
PIN_init(BoardGpioInitTable); //enable iCache prefetching VIMSConfigure(VIMS_BASE, TRUE, TRUE); // Enable cache
VIMSModeSet(VIMS_BASE, VIMS_MODE_ENABLED); #ifndef POWER_SAVING
/* Set constraints for Standby, powerdown and idle mode */ Power_setConstraint(Power_SB_DISALLOW); Power_setConstraint(Power_IDLE_PD_DISALLOW); #endif // POWER_SAVING /* Initialize ICall module */ ICall_init();
/* Start tasks of external images - Priority 5 */ ICall_createRemoteTasks();
/* Kick off profile - Priority 3 */ GAPRole_createTask();
SimpleBLEPeripheral_createTask();
/* enable interrupts and start SYS/BIOS */ BIOS_start(); }
Ó¦ÓúÍGAPRoleÈÎÎñÏë3.3ÖÐÃèÊöµÄÒ»Ñù±»¹¹½¨ÁË¡£Õ»ÈÎÎñÔÚIcall_createRemoteTasks()Öб»´´½¨ÁË¡£IcallÄ£¿éͨ¹ýIcall_init()³õʼ»¯ÁË¡£Õû¸öIDE¹¤×÷¿Õ¼äµÄÖ÷Ì⣬main.c´æÔÚÓÚÓ¦Óù¤³Ì£¬ÕâÒâζ×ŵ±Ëü±àÒëºó»á´¦ÓÚÓ¦Óõ÷ÓõÄflashÉÈÇøÖС£ 4.2 ICALL 4.2.1 ½éÉÜ ¼ä½Óµ÷Óÿò¼Ü£¨Icall£©ÊÇÒ»¸öÄ£¿é£¬ÌṩÁËÓ¦ÓÃÃæÏòBLEÐÒéÕ»·þÎñ£¨ÈçBLE-Stack APIs£©ºÍÓÉRTOSÌṩµÄÔʼµÄ·þÎñ£¨ÈçÏß³Ìͬ²½£©µÄ»úÖÆ¡£½áºÏµÄ£¬IcallÔÊÐíÓ¦ÓúÍÐÒéÕ»ÔÚÒ»¸öͳһµÄRTOS»·¾³ÖиßЧµÄ²Ù×÷£¬Í¨Ñ¶ºÍ¹²Ïí×ÊÔ´¡£ Icall¼Ü¹¹µÄºËÐÄ×é³É²¿·ÖÊǵ÷¶ÈÕߣ¬¸Ãµ÷¶ÈÕß´Ù½øÁËÓ¦ÓúÍBLEÐÒéÕ»ÈÎÎñ¼äµÄÓ¦ÓóÌÐò½Ó¿Úͨ¹ýË«¾µÏñ±ß½ç¡£¾¡¹Ü¶àÊýµÄICall½»»¥³éÏó³ÉÁËBLEÐÒéÕ»½Ó¿Ú£¨È磺GAP,HCIµÈ£©£¬Ó¦Óÿª·¢ÕßÒ²ÓбØÒªÃ÷°×ÕâÖÖDZÔڵļܹ¹ÒÔ±ãÓÚÔÚ¶àÏß³ÌRTOS»·¾³ÖÐ×öµ½ºÏÊʵÄBLEÐÒéÕ»²Ù×÷¡£
ICallÄ£¿éÔ´´úÂëÔÚÓ¦Óù¤³ÌÖеġ°ICall¡±&¡°ICallBLE¡± IDEÎļþ¼ÐÖС£
4.2.2 ICall BLEÐÒéÕ»·þÎñ
¾ÍÏñÉÏͼÃèÊöµÄÒ»Ñù£¬ICallÄÚºËʹÓð¸Àý°üº¬ÁËÒ»¸ö·þÎñʵÌ壨ÈçBLEÐÒéÕ»ÈÎÎñ£©ºÍÒ»¸ö¿Í»§¶ËʵÌ壨ÈçÓ¦ÓÃÈÎÎñ£©Ö®¼äµÄͨѶ¡£×¢ÒâICALL¿ò¼Ü²»ÄÜÓëBLEÐÒ鶨ÒåµÄGATT·þÎñ/¿Í»§Ïà»ìÏý¡£ÕâÑù¼Ü¹¹µÄÔÒòÊÇË«ÖØµÄ£ºÎªÁË¿ÉÒÔ·Ö¿ª¸üÐÂÓ¦ÓúÍBLEÐÒéÕ»Ò²ÊÇΪÁËά³Ö»®·Ö×Ôcc2640µÄTI-RTOSÂß¼²ãµÄÈí¼þµÄÒ»ÖÂÐÔ£¨¾ÍÏëcc254xµÄOSAL£©¡£
ICall BLEÐÒéÕ»·þÎñ³äµ±ËùÓеÄBLE-Stack APIµÄÓ¦Óýӿڡ£µ±Ò»¸öBLEÐÒéÕ»½Ó¿Ú±»Ó¦Óõ÷ÓÃʱ£¬ICallÄ£¿é½«ÃüÁîÊäË͸øBLEÐÒéÕ»£¬Êʵ±µÄʱºò£¬½«À´×ÔBLEÀ¶ÑÀÐÒéÕ»µÄÏûÏ¢·µ»Ø¸øÓ¦Óá£
ÓÉÓÚICallÄ£¿éʱӦÓù¤³ÌµÄÒ»²¿·Ö£¬Ó¦ÓÃÈÎÎñ¿ÉÒÔͨ¹ýÖ±½Óº¯Êýµ÷Ó÷ÃÎÊICall¡£×¢ÒâÓÉÓÚBLEÐÒéÕ»ÒÔ×î¸ßÓÅÏȼ¶Ö´ÐУ¬Ó¦ÓÃÈÎÎñ½«»á×èÈûÖ±µ½»Ø¸´µÄµ½À´¡£Ä³Ð©ÐÒéÕ»µÄ½Ó¿Ú¿ÉÄÜ»áÁ¢¼´ÏìÓ¦£¬È»¶øÓ¦ÓÃÏ߳̽«»á×èÈû£¬ÒòΪ¸Ã½Ó¿Úͨ¹ýICallµ÷¶È¸øÁËBLEÐÒéÕ»¡£ÆäËûµÄBLEÐÒéÕ»½Ó¿Ú¿ÉÄÜͨ¹ýICallͬ²½»ØÓ¦¸øÓ¦Ó㬽«»Ö¸´·¢Ë͸øÓ¦ÓÃÈÎÎñµÄʼþ´¦ÀíÆ÷ÖС£ 4.2.3 ICallµÄ»ù±¾·þÎñ
ÁíÍ⣬ICall°üº¬ÁËÒ»¸ö»ù±¾µÄ·þÎñ¾ÍÊdzéÏó¸÷ÖÖ²Ù×÷ϵͳÏà¹ØµÄº¯Êý¡£ÓÉÓÚÒª¹²Ïí×ÊÔ´ºÍά³ÖÄÚ²¿½ø³ÌµÄͨѶ£¬Ó¦ÓÃÓ¦¸ÃʹÓÃÏÂÃæµÄ»ù±¾·þÎñº¯Êý£º