引言
隨著åŠå°Žé«”åˆ¶é€ å·¥è—çš„ç™¼å±•å’Œè¨ˆç®—æ©Ÿé«”ç³»çµæ§‹çš„æ”¹é€²ï¼ŒDSP處ç†èŠ¯ç‰‡çš„è™•ç†èƒ½åŠ›è¶Šä¾†è¶Šå¼·å¤§ï¼ŒæŽ§åˆ¶çš„å¤–åœè¨å‚™è¶Šä¾†è¶Šå¤šï¼Œè»Ÿä»¶ç®—法也越來越復雜。å°äºŽDSP系統的軟件開發,ä¸åƒ…è¦é¢å°å¾©é›œçš„è»Ÿä»¶ç®—æ³•ï¼ŒåŒæ™‚é‚„è¦æŠŠå¤§éƒ¨åˆ†ç²¾åŠ›æ”¾åœ¨å„種外åœè¨å‚™å’Œç›¸é—œçš„硬件控制上,整個éŽç¨‹å¾©é›œè€Œè‰±è¾›ã€‚å› æ¤ï¼Œç‚ºé€™ä¸€é¡žç³»çµ±é–‹ç™¼å°å·§ç²¾è‡´ã€ä¾¿äºŽç§»æ¤çš„嵌入å¼å¯¦æ™‚æ“作系統,具有實際的æ„義。本文åƒè€ƒé–‹æ”¾æºä»£ç¢¼å¯¦æ™‚æ“作系統uCï¼OS-II,完æˆäº†åŸºäºŽADIå…¬å¸çš„ADSP-TigerSHARC101S(以下簡稱TS101)系列DSP芯片的嵌入å¼å¯¦æ™‚æ“作系統的è¨è¨ˆå’Œé–‹ç™¼å·¥ä½œã€‚
1 TS101芯片簡介
TS101是美國ADIå…¬å¸ç”Ÿç”¢çš„ä¸€æ¬¾é«˜æ€§èƒ½éœæ…‹è¶…標é‡è™•ç†å™¨ã€‚ADSP-TS101Sçš„å…§æ ¸æŒ‡ä»¤å‘¨æœŸç‚º3.3ns,æ¯å‘¨æœŸèƒ½å¤ 執行4æ¢æŒ‡ä»¤ã€24個16-bit定點é‹ç®—å’Œ6個浮點é‹ç®—。內部有三æ¢ç›¸äº’ç¨ç«‹çš„128bitå¯¬åº¦çš„å…§éƒ¨æ•¸æ“šç¸½ç·šï¼Œæ¯æ¢ç¸½ç·šå„連接一個2MB內部å˜å„²å™¨é™£åˆ—ï¼Œå¯æä¾›4個å—çš„æ•¸æ“šã€æŒ‡ä»¤åŠIï¼O訪å•,以åŠ14.4Gbytesï¼s的內部å˜å„²å™¨å¸¶å¯¬ã€‚
在ADSP-TS101內部的雙é‹ç®—模塊ä¸ï¼Œæ¯å€‹å‡åŒ…å«ä¸€å€‹ALUã€ä¹˜æ³•器ã€64-bitç§»ä½å™¨å’Œ32個å—的寄å˜å™¨çµ„åŠç›¸é—œçš„æ•¸æ“šå°é½Šç·©æ²–器(DAB)。芯片ä¸çš„雙整數ALU(IALUï¼‰å‡æœ‰è‡ªå·±çš„31個å—的寄å˜å™¨çµ„以用于數據尋å€ã€‚æ¤å¤–,TS101ä¸é‚„帶有一個帶指令å°é½Šç·©æ²–器 (IAB),以åŠåˆ†æ”¯ç›®æ¨™ç·©æ²–器(BTBï¼‰å’Œä¸æ–·æŽ§åˆ¶å™¨çš„ç¨‹åºæŽ§åˆ¶å™¨ï¼ŒåŒæ™‚有三æ¢ç›¸äº’ç¨ç«‹çš„128bit寬度的內部數據總線以åŠç‰‡å…§6MB SRAMï¼›TS101æä¾›æœ‰èˆ‡ä¸»æ©Ÿè™•ç†å™¨ã€å¤šè™•ç†å™¨ç©ºé–“(DSP)ã€å¤–部SRAMå’ŒSDRAM相連的外部端å£å’Œä¸€å€‹14通é“DMA控制器ã€å››å€‹éˆè·¯å£ã€å…©å€‹64bitå•隔定時器和定時器計滿引腳。芯片上一個與IEEE 1149.1兼容的JTAG接å£å¯ç”¨äºŽç‰‡ä¸Šä»¿çœŸã€‚
2 基于TS101的嵌入å¼å¯¦æ™‚æ“作系統功能
本文介紹的基于TS101çš„åµŒå…¥å¼æ“作系統是åƒè€ƒæºç¢¼å…¬é–‹çš„實時æ“作系統uCï¼OS-II來è¨è¨ˆçš„,實際上,它和uCï¼ OS-IIä¸€æ¨£ï¼Œåƒ…åƒ…æ˜¯ä¸€å€‹å¯¦æ™‚å…§æ ¸ï¼Œè€Œä¸å…·æœ‰åƒGUIã€TCPï¼IPå”è°æ£§ç‰åŠŸèƒ½éƒ¨ä»¶ã€‚å®ƒæ”¯æŒå å…ˆå¼å¤šä»»å‹™èª¿åº¦ï¼Œå¹¶å¯æä¾›æœ‰æ•ˆçš„æœå‹™ï¼ˆå¦‚ä¿¡è™Ÿé‡ã€éƒµç®±ã€éšŠåˆ—ã€å»¶æ™‚ã€è¶…時ç‰ï¼‰ã€‚åŒæ™‚,在uCï¼OS-II基礎上å¯å¼•入高級æ“作系統ä¸çš„é€²ç¨‹å’Œç·šç¨‹ç‰æ¦‚å¿µã€‚å› æ¤ï¼Œæœ¬æ²’計采用了進程與線程çµåˆçš„æ–¹å¼ï¼Œå³å°‡å¯¦ç¾ä¸åŒåŠŸèƒ½çš„ä»»å‹™è¦–ç‚ºé€²ç¨‹ï¼Œç„¶åŽåœ¨ä»»å‹™å…§éƒ¨é€²è¡Œç´°åˆ†ï¼Œä»¥åŠƒåˆ†ç‚ºä¸åŒçš„線程。進程間的調度與切æ›åœ¨TS101內部å˜å„²å€å’Œå¤–部擴展å˜å„²å€ï¼ˆä¾‹å¦‚SDRAM)ä¸é€²è¡Œï¼Œè€Œç·šç¨‹é–“的調度與切æ›å‰‡åœ¨TS101內部å˜å„²å€ä¸å¯¦ç¾ã€‚從本è¨è¨ˆçš„æ•´å€‹TS101嵌入å¼å¯¦æ™‚系統來看,它的基本功能主è¦åŒ…括任務管ç†ã€ä¸æ–·ç®¡ç†ã€å…§å˜ç®¡ç†ä¸‰æ–¹é¢å…§å®¹ã€‚
在TS101嵌入å¼å¯¦æ™‚系統的三大塊功能ä¸ï¼Œä»»å‹™ç®¡ç†åŠŸèƒ½æ¨¡å¡ŠåŸºæœ¬ä¸Šæ˜¯uCï¼OS-II的簡單移æ¤ï¼Œæœ¬æ–‡ä¸»è¦é‡å°ä¸æ–·è™•ç†å’Œå˜å„²å™¨ç®¡ç†å…©å¤§éƒ¨åˆ†é€²è¡Œè¨è¨ˆèªªæ˜Žã€‚
3 TS101çš„ä¸æ–·è™•ç†
TS101çš„ä¸æ–·è™•ç†åŒ…æ‹¬ç¡¬ä»¶ä¸æ–·å’Œè»Ÿä»¶ä¸æ–·å…©å¤§é¡žï¼Œå…¶ä¸è»Ÿä»¶ä¸æ–·åˆåŒ…æ‹¬è»Ÿä»¶ç•°å¸¸ä¸æ–·å’ŒDebug䏿–·ã€‚
3.1 ç¡¬ä»¶ä¸æ–·
TS101處ç†å™¨ä¸éœ€è¦å°ˆé–€çš„å †æ£§æŒ‡é‡ä¾†ä¿å˜ç¾å ´ï¼Œå™¨ä»¶ä¸IALUçš„Jã€K寄å˜å™¨éƒ½å¯ä»¥ç”¨ä½œå †æ£§æŒ‡é‡ã€‚在å…è¨±åµŒå¥—ä¸æ–·çš„䏿–·æœå‹™ç¨‹åºä¸ï¼Œå¯å°‡ä¸æ–·è¿”回地å€ï¼ˆå³RETIB)值ä¿å˜åˆ°å †æ£§ä¸ï¼Œé€™æ¨£ï¼Œåœ¨å¾žRETIB讀出返回地å€åŽï¼Œç³»çµ±å°‡è‡ªå‹•é–‹å•Ÿå…¨å±€ä¸æ–·ä½¿èƒ½ã€‚但在ä¿å˜ç›¸é—œçš„寄å˜å™¨å’ŒRETIæ™‚æœ¬æ‡‰ç¦æ¢å…¨å±€ä¸æ–·ä½¿èƒ½ï¼Œæ‰€ä»¥é€™æ˜¯åœ¨ç¨‹åºæŽ§åˆ¶å™¨å°‡PC寫入RETI時自動完æˆã€‚å¦‚æžœç³»çµ±ä¸æ”¯æŒåµŒå¥—çš„ç¡¬ä»¶ä¸æ–·ï¼Œå‰‡ç„¡éœ€æŠŠè™•ç†å™¨ç‹€æ…‹ä¿å˜åœ¨å †æ£§ä¸ã€‚䏿–·ä¸€èˆ¬æ ¹æ“šå¯„å˜å™¨RETIåŸ·è¡Œå¹¶åœ¨ä¸æ–·åŽè¿”回,而ä¸éœ€è¦å†å°ç¡¬ä»¶ä¸æ–·çš„å…¨å±€ç¦æ¢ä½é€²è¡Œè™•ç†ã€‚
3.2 è»Ÿä»¶ä¸æ–· (異常)
ç•°å¸¸è»Ÿä»¶ä¸æ–·æ˜¯åœ¨ç¨‹åºåŸ·è¡Œçš„éŽç¨‹ä¸è§¸ç™¼çš„ã€‚ä½¿èƒ½ç•°å¸¸ä¸æ–·æ™‚,å¯å°‡PMASK[62]ç½®ä½ï¼Œå¹¶å°‡PCå˜å„²äºŽRETS;而å°äºŽä»¿çœŸç•°å¸¸ï¼Œå‰‡å°‡PMASK[63]ç½®ä½ï¼ŒPCå˜å„²äºŽDBUGä¸ã€‚ç•¶ç•°å¸¸ä¸æ–·å‡ºç¾æ™‚ï¼Œç¨‹åºæŽ§åˆ¶å™¨å°‡å¾žå¯„å˜å™¨IVSW指å‘的地å€å–å€ï¼Œä»¿çœŸç•°å¸¸å‰‡å¾žEMUIR寄å˜å™¨å–å€ï¼ŒåŒæ™‚å°‡æŒ‡ä»¤æµæ°´çš„æŒ‡ä»¤æ¸…空。
3.3 䏿–·è¿”回
䏿–·è¿”回是通éŽåœ¨ä¸æ–·æœå‹™ç¨‹åºä¸åŸ·è¡ŒRTI指令來實ç¾çš„ã€‚ç•¶ç„¶ï¼Œé€™è¦æ±‚åœ¨éŸ¿æ‡‰ä¸æ–·æœå‹™ç¨‹åºæ™‚就將返回的地å€ä¿å˜åœ¨è©²å¯„å˜å™¨ä¸ã€‚é€šå¸¸è¦æ±‚至少在執行該指令å‰çš„8å€‹æŒ‡ä»¤å‘¨æœŸå°±å°‡è¿”å›žåœ°å€æ”¾å…¥åœ¨å¯„å˜å™¨RETIBä¸ï¼Œé€™æ¨£ï¼Œåˆ†æ”¯ç·©æ²–BTBæ‰èƒ½ä½¿ç”¨ã€‚
4 æ“ä½œç³»çµ±ä¸æ–·è™•ç†çš„實ç¾
在本æ“作系統ä¸ï¼Œå°äºŽç”¨æˆ¶ä¸æ–·æœå‹™ç¨‹åºçš„處ç†éŽç¨‹ï¼Œå…¶ç¤ºæ„代碼和功能如表1所列。

事實上,用戶應首先將處ç†å™¨çš„寄å˜å™¨å£“人當å‰å †æ£§[程åºåˆ—表1ä¸çš„(1)]ã€‚åœ¨é€²è¡Œä¸æ–·è™•ç†æ™‚,æ“作系統需è¦çŸ¥é“用戶在åšä¸æ–·æœå‹™ï¼Œå› æ¤ï¼Œç”¨æˆ¶æ‡‰è©²èª¿ç”¨OS_Int_Enter_C()將全局變é‡OSIntNesting[程åºåˆ—表1ä¸çš„(2)]ç›´æŽ¥åŠ 1。完æˆä¸Šè¿°å…©æ¥ä»¥åŽï¼Œç”¨æˆ¶å°±å¯ä»¥é–‹å§‹æœå‹™äºŽå¼•ç™¼ä¸æ–·çš„è¨å‚™äº†[程åºåˆ—表1ä¸çš„(3)]。由于該æ“作系統å…è¨±ä¸æ–·åµŒå¥—,而且系統能跟蹤嵌套層數OS-IntNesting。然而,為å…è¨±ä¸æ–·åµŒå¥—,在多數情æ³ä¸‹ï¼Œç”¨æˆ¶æ‡‰åœ¨é–‹ä¸æ–·ä¹‹å‰å…ˆæ¸…䏿–·æºã€‚èª¿ç”¨è„«é›¢ä¸æ–·å‡½æ•¸OS_Int_Exit_C()[程åºåˆ—表1ä¸çš„(4)]æ¨™å¿—è‘—ä¸æ–·æœå‹™å程åºçš„終çµï¼ŒåŒæ™‚OSIntExit ï¼ˆï¼‰æœƒå°‡ä¸æ–·åµŒå¥—層數計數器減lã€‚ç•¶åµŒå¥—è¨ˆæ•¸å™¨æ¸›åˆ°é›¶æ™‚ï¼Œæ‰€æœ‰ä¸æ–·ï¼ŒåŒ…æ‹¬åµŒå¥—çš„ä¸æ–·ä¾¿éƒ½å®Œæˆäº†ã€‚æ¤æ™‚æ“作系統è¦åˆ¤å®šæœ‰æ²’æœ‰å„ªå…ˆç´šè¼ƒé«˜çš„ä»»å‹™è¢«ä¸æ–·æœå‹™å程åºï¼ˆæˆ–ä»»ä¸€åµŒå¥—çš„ä¸æ–·ï¼‰å–šé†’。如果有高優先級的任務進入了就緒態,系統則返回到那個高優先級的任務,OS_Int_Exit_C()返回到調用點[程åºåˆ—表1ä¸çš„(5)]。ä¿å˜çš„寄å˜å™¨çš„值將在這時被æ¢å¾©ï¼Œç„¶åŽåœ¨åŽ»åŸ·è¡Œä¸æ–·è¿”回指令[程åºåˆ—表1ä¸çš„ (6)]。應當注æ„çš„æ˜¯ï¼Œå¦‚æžœèª¿åº¦è¢«ç¦æ¢ï¼ˆOSIntNesting>0ï¼‰ï¼Œç³»çµ±å°‡è¿”å›žåˆ°è¢«ä¸æ–·çš„任務。

以上æè¿°çš„詳細解釋如圖1所示。圖ä¸ï¼Œæœ‰æ™‚䏿–·ä¾†åˆ°äº†[圖1(1)],但還ä¸èƒ½è¢«è™•ç†å™¨è˜åˆ¥ï¼Œé€™ä¹Ÿè¨±æ˜¯å› ç‚ºä¸æ–·è¢«æ“作系統或用戶應用程åºé—œäº†ï¼Œæˆ–è€…æ˜¯å› ç‚ºè™•ç†å™¨é‚„沒執行完當å‰çš„æŒ‡ä»¤ã€‚一旦處ç†å™¨éŸ¿æ‡‰äº†é€™å€‹ä¸æ–·[圖1(2)],處ç†å™¨çš„䏿–·å‘é‡å°‡è·³è½‰åˆ°ä¸æ–·æœå‹™å程åº[圖1(3)]ã€‚ä¸æ–·æœå‹™å程åºåœ¨è™•ç†å™¨å¯„å˜å™¨ï¼ˆä¹Ÿå«åšCPU context)[圖1(4)]ä¸ä¸€æ—¦ä¿å˜å®Œç•¢ï¼Œç”¨æˆ¶ä¸æ–·æœå‹™å程åºå°‡é€šçŸ¥æ“ä½œç³»çµ±é€²å…¥ä¸æ–·æœå‹™å程åºï¼Œè¾¦æ³•是通éŽèª¿ç”¨OS_Int_Enter_C()給OS-IntNestingåŠ 1[圖1(5)]。然åŽç”¨æˆ¶ä¸æ–·æœå‹™ä»£ç¢¼é–‹å§‹åŸ·è¡Œ[圖1(6)]。應當注æ„çš„æ˜¯ï¼Œç”¨æˆ¶ä¸æ–·æœå‹™ä¸åšçš„事è¦ç›¡å¯èƒ½åœ°å°‘,而把大部分工作留給任務去åšã€‚ç”¨æˆ¶ä¸æ–·æœå‹™å®Œæˆä»¥åŽï¼Œè¦èª¿ç”¨OS_Int_Exit_C()[圖1(7)]。從時åºåœ–上å¯ä»¥çœ‹å‡ºï¼Œå°è¢«ä¸æ–·çš„ä»»å‹™ä¾†èªªï¼Œå¦‚æžœæ²’æœ‰é«˜å„ªå…ˆç´šçš„ä»»å‹™è¢«ä¸æ–·æœå‹™åç¨‹åºæ¿€æ´»è€Œé€²å…¥å°±ç·’態,OS_Int_Exit_C()åªå 用很çŸçš„é‹è¡Œæ™‚間。在這種情æ³ä¸‹ï¼ŒCPU寄å˜å™¨åªæ˜¯ç°¡å–®åœ°æ¢å¾©[圖1(8)]å¹¶åŸ·è¡Œä¸æ–·è¿”回指令[圖1(9)]ã€‚è€Œå¦‚æžœä¸æ–·æœå‹™å程åºä½¿ä¸€å€‹é«˜å„ªå…ˆç´šçš„任務進入了就緒態,則OS_Int_Exit_C()將å 用較長的é‹è¡Œæ™‚é–“ï¼Œå› ç‚ºé€™æ™‚è¦é€²è¡Œä»»å‹™åˆ‡æ›[圖1(10)]。新任務的寄å˜å™¨å…§å®¹è¦æ¢å¾©å¹¶åŸ·è¡Œä¸æ–·è¿”回指令[ 圖1(12)]。
5 å˜å„²å™¨ç®¡ç†
在TS101çš„C環境下,å¯å°‡å…§å˜åŠƒåˆ†ç‚ºä»£ç¢¼å€ï¼ˆcodeï¼‰ã€æ•¸æ“šå€ï¼ˆdata)ã€å †ï¼ˆheap)å€å’Œæ£§ï¼ˆstack)å€ã€‚代碼å€ç”¨ä¾†å˜æ”¾ç”¨æˆ¶ä»£ç¢¼ï¼Œæ•¸æ“šå€ç”¨ä¾†å˜æ”¾å…¨å±€è®Šé‡å’Œéœæ…‹è®Šé‡ç‰æ•¸æ“šï¼Œæ£§å€ç”¨ä¾†å˜æ”¾è‡¨æ™‚變é‡ç‰æ•¸æ“šï¼Œå †å€ç”¨ä¾†ç‚ºç”¨æˆ¶æä¾›å‹•æ…‹å…§å˜åˆ†é…。在編è¯å™¨çš„éˆæŽ¥æè¿°æ–‡ä»¶ï¼ˆLinker DescriptonFile.LDF)ä¸ï¼Œå¯ä»¥æ‰‹å‹•劃分å„個內å˜åˆ†å€çš„大å°ã€‚在TS101所æä¾›çš„庫函數ä¸å·²ç¶“包å«äº†æ¯”較完備的內å˜ç®¡ç†å‡½æ•¸ï¼ˆå¦‚常用的calloc,free,mallocå’Œreallocç‰å‡½æ•¸ï¼‰ï¼Œå¯ç”¨äºŽå°å…§å˜é€²è¡ŒåŸºæœ¬ç®¡ç†ã€‚
åœ¨å°æ“作系統進行è¨è¨ˆçš„éŽç¨‹ä¸ï¼Œæ‡‰å°‡é‡å¿ƒæ”¾åœ¨å…§å˜çš„æ“´å±•上,以便有效地使用外部å˜å„²å™¨ï¼ˆä¾‹å¦‚SDRAMç‰ï¼‰ã€‚為了實ç¾å…§å˜æ“´å±•,本è¨è¨ˆå°‡ä¸€å€‹å¤§åž‹ä»»å‹™çœ‹ä½œä¸€å€‹é€²ç¨‹ï¼Œå†å°‡ä¸€å€‹é€²ç¨‹åŠƒåˆ†ç‚ºä¸åŒçš„å°ç·šç¨‹ã€‚在系統的外部å˜å„²å™¨ä¸å¯ä»¥å˜æ”¾å¤šå€‹é€²ç¨‹ï¼Œè€Œæ¯æ¬¡åªå°‡ä¸€å€‹è®€äººåˆ°å…§å˜ä¸ä¾†é‹è¡Œã€‚æ“作系統的主è¦ç®¡ç†å°è±¡æ˜¯é€™å€‹é€²ç¨‹æ‰€åŠƒåˆ†çš„å¤šå€‹ç·šç¨‹ã€‚é€™æ¨£ï¼Œåœ¨ä¸€å€‹ç³»çµ±ä¸å°±å¯ä»¥é‹è¡Œå¤šå€‹é€²ç¨‹ï¼Œå®ƒå€‘之間å¯ä»¥ç”±ç¨‹åºé€²è¡Œç”±å…§å˜åˆ°å¤–å˜æˆ–由外å˜åˆ°å…§å˜çš„åˆ‡æ›æŽ§åˆ¶ï¼Œä½†åœ¨åˆ‡æ›éŽç¨‹ä¸éœ€è¦èŠ±è²»ä¸€äº›æ™‚é–“ä»£åƒ¹ã€‚
5.1 外部å˜å„²å™¨å †å€çš„使用
TS101為用戶æä¾›äº†å †å€ï¼Œå¹¶æä¾›æœ‰callocã€mallocã€reallocå’Œfreeç‰å‡½æ•¸ä¾†å°å…¶é€²è¡Œç®¡ç†å’Œä½¿ç”¨ï¼ŒåŒæ™‚用戶å¯ä»¥é€šéŽæ‰‹å‹•ä¿®æ”¹éˆæŽ¥æè¿°æ–‡ä»¶ä»¥ç²å¾—相å°è¼ƒå¤§çš„å †å€ã€‚ç„¶è€Œï¼Œåœ¨é»˜èªæƒ…æ³ä¸‹ï¼Œç”¨æˆ¶æ‰€èƒ½ä½¿ç”¨çš„åªæ˜¯éˆæŽ¥æè¿°æ–‡ä»¶ä¸æ‰€æä¾›çš„é‚£ä¸€å¡Šå †å€ï¼Œé€™å°ç”¨æˆ¶ä¾†èªªæ˜¯é é ä¸å¤ 的。如果用戶在外部å˜å„²å™¨ä¸Šä¹Ÿèƒ½å¤ åƒåœ¨å…§å˜ä¸ä¸€æ¨£å‹•態的開辟å˜å„²ç©ºé–“來進行使用,那將會帶來極大的方便。幸é‹çš„æ˜¯ï¼ŒTS101的編è¯ç³»çµ±æä¾›äº†é€™ä¸€åŠŸèƒ½ï¼Œç”¨æˆ¶åªéœ€è¦å°ç³»çµ±æä¾›çš„å為“ts_hdr.asmâ€çš„åŒ¯ç·¨æ–‡ä»¶å’ŒéˆæŽ¥æè¿°æ–‡ä»¶é€²è¡Œä¿®æ”¹å¹¶ç·¨è¯â€œts_hdr.asm†文件,å†ç”¨ç”Ÿæˆçš„“ts_hdr.dojâ€æ–‡ä»¶ä»£æ›¿éˆæŽ¥æè¿°æ–‡ä»¶ä¸çš„“ts_hdr_TS101â€å³å¯ã€‚
以䏋將尿–‡ä»¶çš„修改éŽç¨‹åšç°¡è¦çš„ä»‹ç´¹ã€‚ä¸‹é¢æ˜¯TS101éˆæŽ¥æè¿°æ–‡ä»¶ä¸å°äºŽé»˜èªå †å€çš„æè¿°ï¼Œå®ƒå®šç¾©äº†é»˜èªå †å€çš„基å€å’Œå †å€çš„大å°ï¼š

在“ts_hdr.asm i i匯編文件ä¸å¯å°é»˜èªå †å€é€²è¡Œæ“作,它的主è¦åŠŸèƒ½æ˜¯ç‚ºé»˜èªå †å€è¦å®šID號0ï¼Œä»¥ä¾¿æœ‰æ–°çš„å †å€å˜åœ¨æ™‚方便使用。
ts_hdr.asmå°é»˜èªå †æ£§é€²è¡Œç·¨è™Ÿçš„代碼:
· var=1df_defheap_base;
· var=1df_defheap_size;
· var=0;
å°éˆæŽ¥æè¿°æ–‡ä»¶å’ŒåŒ¯ç·¨æ–‡ä»¶é€²è¡Œä¿®æ”¹æ™‚,åªéœ€è¦åœ¨éˆæŽ¥æè¿°æ–‡ä»¶ä¸å°æ–°çš„å †å€é€²è¡Œæè¿°å¹¶åœ¨åŒ¯ç·¨æ–‡ä»¶ä¸å°å…¶é€²è¡Œç·¨è™Ÿå³å¯ã€‚代碼如下:

å°æ–°çš„å †æ£§å€é€²è¡Œæè¿°çš„代碼å¯é–‹è¾ŸäºŽå¤–部å˜å„²å™¨ä¹‹ä¸ï¼ˆSDRAMï¼‰ã€‚å¹¶åœ¨æ–°çš„å †æ£§ä¸å°‡å…¶ç·¨è™Ÿç‚º1。按照以上æ¥é©Ÿå°‡æ–‡ä»¶ä¿®æ”¹å®Œç•¢ä¹‹åŽï¼Œç”¨æˆ¶å°±å¯ä»¥åœ¨å¤–部å˜å„²å€ä¸å‹•態地使用內å˜äº†ã€‚ç·¨è¯å™¨é‚„為動態內å˜çš„開辟æä¾›äº†ä¸€ç³»åˆ—的庫函數。其具體程åºé‚„在內部å˜å„²å™¨ä¸çš„默èªå †å€å‹•態開辟了大å°ç‚º50的內å˜[6(1)],并在外部å˜å„²å€ä¸å‹•態開辟了大å°ç‚º256的內å˜[6(2)]。其程åºå¦‚下:
int*x,*y;
x=heap_malloc (0,50); (1)
y=heap_malloc (1,256); (2)
5.2 å…§å˜è¦†è“‹
通éŽTS101å¯å°‡æ•¸é‡æ¥µå¤§çš„程åºä»£ç¢¼æ”¾å…¥å¤–部å˜å„²å™¨ä¸ã€‚æ¯æ¬¡é€šéŽDMA傳輸方å¼è®€å…¥å°‘é‡çš„程åºä»£ç¢¼åˆ°å…§å˜ä¾†åŸ·è¡Œï¼Œé€™æ¨£æ—¢æ“´å±•了內å˜ç©ºé–“ã€‚åˆæ¯”將全部代碼放入外部å˜å„²å™¨ç¯€çœæ™‚間,這種方å¼ç¨±ç‚ºå…§å˜è¦†è“‹ï¼ˆoverlay)。內å˜è¦†è“‹æ˜¯ä¸€ç¨®å¤šå°ä¸€çš„å…§å˜æ˜ 射技術,它å¯å°‡å¤šæ®µä»£ç¢¼å˜å„²åœ¨å¤–部å˜å„²å™¨åŠƒå®šçš„ä¸åŒä½ç½®ï¼Œä½†ä¹Ÿå¯ä»¥åœ¨å…§å˜ä¸çš„åŒä¸€ä½ç½®é‹è¡Œã€‚代碼在外部å˜å„²å™¨çš„å˜å„²å€ç¨±ç‚ºâ€œliveâ€å€ï¼Œåœ¨å…§å˜ä¸çš„é‹è¡Œå€ç¨±ç‚ºâ€œrunâ€å€ã€‚

圖2所示是overlayçš„ä½¿ç”¨çµæ§‹åœ–。由圖å¯è¦‹ï¼Œåœ¨å¤–部å˜å„²å™¨ä¸ï¼Œoverlay1å’Œoverlay2å¯åœ¨å…§å˜ä¸çš„åŒä¸€å€åŸŸä¸é‹è¡Œï¼Œè€Œoverlay3å’Œoverlay4也å¯ä»¥åœ¨å…§å˜çš„åŒä¸€å€åŸŸä¸é‹è¡Œã€‚當主函數調用FUNC_B時,overlay2將被æ›å…¥å…§å˜ä¸é‹è¡Œï¼Œè€Œç•¶ä¸»å‡½æ•¸èª¿ç”¨FUNC_A 時,å†ç”¨overlay1ç½®æ›over-lay2,overlay3å’Œoverlay4的使用與overlay1å’Œover-lay2相åŒã€‚代碼在內å˜èˆ‡å¤–å˜ä¹‹é–“的置æ›ä¸»è¦é€šéŽDMA傳輸來實ç¾ã€‚
å…§å˜è¦†è“‹ç®¡ç†å™¨æ˜¯ç”¨æˆ¶ç·¨å¯«çš„用來將函數或數據載入內å˜çš„å程åºï¼Œå®ƒå€‘èˆ‡éˆæŽ¥å™¨æä¾›çš„PLITï½›ï½æŒ‡ä»¤é…åˆä½¿ç”¨å¯å®Œæˆå…§å˜è¦†è“‹æ“作。內å˜è¦†è“‹ç®¡ç†å™¨é™¤äº†è² 責由外部å˜å„²å™¨å‘å…§å˜çš„載入æ“ä½œå¤–ï¼Œé‚„æ‡‰ç•¶è² è²¬å»ºç«‹å †æ£§ä¿å˜å¯„å˜å™¨çš„值,檢查需è¦èª¿ç”¨çš„函數是å¦å·²ç¶“在內å˜ä¹‹ä¸ï¼Œä»¥åŠåˆ©ç”¨DMAæ“作在其它函數執行時é‹è¡Œå…§å˜è¦†è“‹è¼‰å…¥ã€‚
通éŽéˆæŽ¥æè¿°æ–‡ä»¶å¯å°å…§å˜è¦†è“‹é€²è¡Œè¼”助æ“ä½œã€‚æ¤æ“作需定義OVLY_oneå’ŒOVLY_two兩塊overlayä»£ç¢¼ï¼Œå…¶ä¸ OVLY_one包å«å‡½æ•¸FUNC_A.doj,而OVLY_two包å«FUNC_B.dojå’ŒFUNC_C.doj,它們共åŒåœ¨MOCodeçš„åŒä¸€å…§å˜å€åŸŸé‹è¡Œã€‚åœ¨éˆæŽ¥æè¿°æ–‡ä»¶ä¸å° overlay進行æ“作的程åºä»£ç¢¼å¦‚下:

åœ¨éˆæŽ¥æè¿°æ–‡ä»¶ä¸ï¼Œé‚„å¯ä»¥é€šéŽå®šç¾©PLITï½›ï½æŒ‡ä»¤ä¾†å”助內å˜è¦†è“‹æ“作的完æˆã€‚當主函數調用一個內å˜è¦†è“‹å€çš„å‡½æ•¸æ™‚ï¼ŒéˆæŽ¥å™¨å°‡é‡æ–°å¼•導函數調用并進行æ“作。例如當主函數調用了內å˜è¦†è“‹å‡½æ•¸FUNC_Aæ™‚ï¼ŒéˆæŽ¥å™¨æœƒå°‡å…¶è‡ªå‹•è½‰åŒ–ç‚ºèª¿ç”¨.plt_FUNC_Aæ“ä½œã€‚æ¤æ“作在函數執行之å‰å…ˆé€²è¡ŒPLITæ“作,并跳轉到overlay管ç†å™¨ä¸åŸ·è¡Œï¼Œç„¶åŽå†åŸ·è¡Œå‡½æ•¸Aã€‚ä¸‹é¢æ˜¯å°PLIT進行æ“作的定義代碼:
5.3 å…§å˜æ“´å±•的實ç¾
æ“作系統æä¾›äº†OS_Process_Sched()函數來完æˆé€™ä¸€æ“作,該函數ä¸çš„進程切æ›å‡½æ•¸é †åºä»£ç¢¼å¦‚下:
(1) 將處于在內å˜ä¸çš„進程的寄å˜å™¨å€¼å£“å…¥å †æ£§ï¼›
(2) 將處于內å˜ä¸çš„進程的全部å˜å„²å€å…§å®¹ç”±DMAæ–¹å¼æ”¾å…¥å¤–å˜ï¼š
(3) 調用在外å˜ä¸çš„進程的寄å˜å™¨å‡ºæ£§å‡½æ•¸ï¼›
(4) 跳轉到新的進程é‹è¡Œã€‚
在進程調度ä¸ï¼Œä¸€èˆ¬é¦–先將所有寄å˜å™¨å€¼å£“入當å‰é€²ç¨‹å †æ£§ä¸é€²è¡Œä¿å˜[é †åºä»£ç¢¼ï¼ˆ1)],然åŽå°‡å…§å˜é€²ç¨‹å˜å„²å€ä¸çš„æ‰€æœ‰å…§å®¹æ”¾å…¥å¤–部å˜å„²å™¨ä¸ä¿å˜ï¼Œä»¥ä¾¿ç•¶è©²é€²ç¨‹é‡æ–°é€²å…¥å…§å˜é‹è¡Œæ™‚èƒ½å¤ å®Œå…¨æ¢å¾©åŽŸæœ‰é‹è¡Œç’°å¢ƒ[é †åºä»£ç¢¼ï¼ˆ2)]。這里的所有內容是指與當å‰é€²ç¨‹æœ‰é—œçš„æ•¸æ“šï¼ŒåŒ…æ‹¬é€²ç¨‹çš„å †æ£§ã€é€²ç¨‹çš„全局變é‡ã€é€²ç¨‹å‹•態申請的內å˜å¡Šç‰ç‰ã€‚調用外部å˜å„²å™¨ä¸çš„進程寄å˜å™¨å‡ºæ£§å‡½æ•¸[é †åºä»£ç¢¼ï¼ˆ3)] ä¸»è¦æ˜¯åˆ©ç”¨å‰é¢æ‰€è¿°çš„å…§å˜è¦†è“‹æŠ€è¡“來進行的,該寄å˜å™¨çš„出棧函數一般放在外部å˜å„²å™¨ä¸ï¼Œæ“作時å¯é€šéŽèª¿ç”¨å®ƒä½¿éˆæŽ¥å™¨è·³è½‰åˆ°å…§å˜è¦†è“‹ç®¡ç†å™¨ä¾†å®Œæˆå¤–部å˜å„²å™¨é€²ç¨‹å‘å…§å˜çš„åŠ è¼‰ã€‚ä½†åœ¨é€™é‡Œè¦å°å…§å˜è¦†è“‹ç®¡ç†å™¨é€²è¡Œä¿®æ”¹ï¼Œå¹¶æ·»åŠ å¤–éƒ¨å˜å„²å™¨ä¸é€²ç¨‹çš„全部數據的載入函數,然åŽï¼Œç¨‹åºæ‰èƒ½è·³è½‰åˆ°æ–°çš„進程ä¸é–‹å§‹é‹è¡Œ[é †åºä»£ç¢¼ï¼ˆ4)]。
6 çµæŸèªž
本文在å°åµŒå…¥å¼å¯¦æ™‚æ“ä½œç³»çµ±é€²è¡Œç ”ç©¶çš„åŸºç¤Žä¸Šï¼Œå®Œæˆäº†åŸºäºŽTS101DSP芯片的嵌入å¼å¯¦æ™‚æ“作系統的è¨è¨ˆã€‚所è¨è¨ˆçš„ç³»çµ±é«”ç³»çµæ§‹ä¸»è¦åƒè€ƒçš„æ˜¯é–‹æ”¾æºä»£ç¢¼çš„實時æ“作系統uCï¼OS_II,并在æ¤åŸºç¤Žä¸Šï¼Œæ ¹æ“šèŠ¯ç‰‡æœ¬èº«çš„ç‰¹é»žå’Œå¯¦éš›æ‡‰ç”¨çš„éœ€è¦é€²è¡Œäº†å‰µæ–°å’Œé‡è¨è¨ˆï¼Œé€™ä¸»è¦é«”ç¾åœ¨ä»¥ä¸‹ä¸‰æ–¹é¢ï¼š
(1) çµåˆTS101芯片的特點,實ç¾äº†ä¸æ–·è™•ç†éƒ¨åˆ†çš„è¨è¨ˆï¼›
(2) 放棄了一般æ“作系統å°å…§å˜é‡‡å–æ¯ä¸€ä»»å‹™åˆ†é…一塊內å˜çš„æ–¹æ³•,而是采用å°å…§å˜é€²è¡Œåˆ†å¡Šç®¡ç†ï¼Œå¹¶é‡‡å–所有任務公用åŒä¸€å¡Šå…§å˜ã€‚å°åŒä¸€å…§å˜çµ±ä¸€ç®¡ç†çš„æ–¹å¼ï¼›
(3) æ ¹æ“šå¯¦éš›ç³»çµ±éœ€è¦ç ”究,并實ç¾äº†å…§å˜è¦†è“‹æŠ€è¡“,擴展了系統的å˜å„²ç©ºé–“。
ç•¶ç„¶ï¼Œä»»ä½•åµŒå…¥å¼æ“作系統的è¨è¨ˆéƒ½æœ‰ä¸€å€‹ç°¡å–®åˆ°è©³ç´°çš„éŽç¨‹ï¼Œéœ€è¦é€æ¥å®Œå–„ã€‚æœ¬æ–‡åªæ˜¯å®Œæˆäº†TS101嵌入å¼å¯¦æ™‚æ“作系統基本功能的實ç¾ã€‚相信經éŽé•·æœŸçš„實際模擬é‹è¡Œï¼Œå®šèƒ½å»ºç«‹èµ·åŠŸèƒ½æ›´åŠ å®Œå–„ã€çµæ§‹æ›´åŠ ç©©å›ºå¯é 的嵌入å¼å¯¦æ™‚æ“作系統。