1.å¦ä½å¦ä¹ nucleus os
2.嵌入式us/os-2在PC机上的源码仿真步骤?,最好截图表示,分析谢谢!源码!分析!源码
3.tinyos特点
4.OS X Server企业管理系统
å¦ä½å¦ä¹ nucleus os
å 容ï¼
ä¸ãnucleus plusç¹ç¹ï¼
1.å æ ¸éç¨å¾®å æ ¸ç设计ï¼æ¹ä¾¿ç§»æ¤ï¼èµæåçæ´reliableï¼ä½æ¯æä¸è¿ä¹è®¤ä¸ºï¼ä¸linuxç¸æ¯ï¼ä»¥ARMå¹³å°ä¸ºä¾ï¼NUåªç¨å°äºSVC modeï¼å æ ¸ä¸ç¨æ·ä»»å¡é½è¿è¡å¨åä¸ä¸ªç¶æä¸ï¼ä¹å°±æ¯è¯´ææçtaské½æ¥æ访é®ä»»ä½èµæºçæéï¼è¿æ ·å¾reliableä¹ï¼
2.real-time OSï¼NUæ¯ä¸ä¸ªè½¯å®æ¶æä½ç³»ç»ï¼VxWorksæ¯ç¡¬å®æ¶ï¼ï¼thread control componentæ¯æå¤ä»»å¡ä»¥åä»»å¡çæ¢å ï¼å¯¹äºä¸æçå¤çå®ä¹äºä¸¤ç§æå¡æ¹å¼ï¼LISRåHISRï¼è¿ä¸ªä¸linuxä¸çä¸ãä¸åé¨æºå¶ç±»ä¼¼ï¼linuxä¸çä¸åé¨æ¯éè¿è½¯ä¸ææ¥å®ç°çï¼NUçHISRåªæ¯ä½ä¸ºä¸ç§ä¼å 级æ»æ¯é«äºtaskçä»»å¡åºç°ã
3.NUæ¯ä»¥libraryçæ¹å¼åºç¨çï¼éè¿åèªå·±çapp taskä¸è£åªåçNUå æ ¸åç»ä»¶é¾æ¥èµ·æ¥ï¼NU并没æCLI
äºãç»ä»¶
1.IN component
åå§åç»ä»¶ç±ä¸ä¸ªé¨åç»æï¼ç¡¬ä»¶å¨resetåé¦å è¿å ¥INT_initialize()ï¼è¿è¡æ¿çº§çç¸å ³åå§åï¼é¦å 设置SVC modeï¼å ³ä¸æï¼ç¶åå°å æ ¸ä»romä¸æ·è´è³ramä¸ï¼å»ºç«bss段ï¼ä¾æ¬¡å»ºç«sys stack,分析源码上传无法显示 irq stackåfiq stackï¼æååå§åtimerï¼å»ºç«timer HISRçæ 空é´ï¼çäºä¸ä¸å¹³å°ç代ç ï¼ä¸ä¸ªtick大æ¦æ¯.8msï¼å®ææ¿çº§çåå§ååå°±è¿å ¥äºINC_initializeï¼åå§åå个ç»ä»¶ï¼å ¶ä¸å æ¬Application initializeï¼create taskåHISRï¼æåå°æ§å¶æ交ç»scheduleï¼ä¸»è¦çäºä¸ä¸RAMä¸å°å空é´çå®æ
|timer HISR stack = |
|FIQ stack = |
|IRQ stack = |
|SVC stack = |
|.bss|
|.data|
|.text|
å ¶ä¸SVC stackç大å°ä¸ä¸ææºç个æ°ç¸å ³ï¼nested irqåçæ¶ï¼irq_contextä¿åå¨SVC stackä¸ï¼IRQçstackåªæ¯åäºä¸´æ¶æ çä½ç¨ã
2.thread control component
TCç»ä»¶æ¯NUå æ ¸çæéè¦ç»æé¨åï¼ä¸»è¦æ¶µçäºè°åº¦ãä¸æãä»»å¡çç¸å ³æä½ãéãæ¶éå 个æ¹é¢ï¼ä¸é¢åå«ä»ç»ã
è°åº¦ï¼scheduleï¼
NUä¸ç线ç¨ç±»åï¼å¨åä¸ä¸ªå°å空é´å ï¼æ两ç§ï¼HISRåtaskï¼HISRå¯ä»¥ç解为ä¸ç§ä¼å 级è¾é«çtaskï¼ä½åä¸æ¯taskï¼HISRä¼å 级é«äºtaskçå®ç°æ¹å¼å°±æ¯schduleæ¶ï¼å å»æ¥çå½åæ¯å¦æactiveçHISRï¼åå»æ¥çtaskãtaskæsuspendãreadyãfinishedåterminatedåç§ç¶æï¼èHISRåªæexecutingåno-activeè¿ä¸¤ç§ç¶æã
æ¯ä¸ä¸ªtaské½æä¸ä¸ªçº¿ç¨æ§å¶çæ°æ®ç»æï¼TCB thread control blockï¼,å ¶ä¸å æ¬äºtaskçä¼å 级ãç¶æãæ¶é´çãtaskæ ãprotectä¿¡æ¯ãsignalæä½çæ å¿ä½åsignal_handlerçï¼taskå¨å建æ¶åå§åè¿äºä¿¡æ¯ï¼å°taskæå°ä¸ä¸ªcreate_listä¸ï¼åå§è®¾å®task为pure_suspendï¼å¦æ设å®auto startï¼è°ç¨resume_taskï¼ï¼å¤étaskï¼è¿éæ个ç»èï¼å¦æå¨application initializeä¸create_task()ï¼åtaskä¸ä¼èªå¨è¿è¡ï¼å 为åå§åè¿æªå®æï¼æ§å¶æè¿æ²¡æ交ç»scheduleï¼æ æ³è°åº¦taskãtask被å¤éåç¶ææ¹å为readyï¼å¹¶æå¨ä¸ä¸ªTCD_Priority_List[]ä¸ï¼æ°ç»çæ¯ä¸ªå ç´ æ¯ä¸ä¸ªæåTCBç¯å½¢ååé¾è¡¨çæéï¼æ ¹æ®taskçtc_priorityæ¾å°å¯¹åºä¼å 级çTCB head pointerã
æ¯ä¸ä¸ªHISRé½æä¸ä¸ªHISRæ§å¶çæ°æ®ç»æï¼HCB HISR control blockï¼,å ¶ä¸åªæä¼å 级ï¼HISRæ åHISR entryä¿¡æ¯ï¼å æ¤HISRæ¯ä¸å¯ä»¥suspendï¼åæ¶ä¹æ²¡ætime slice以åsignalçç¸å ³æä½ï¼ä¸è¬æ åµä¸å½åçäºä¸æåï¼HISR被activateï¼scheduleå°±ä¼è°åº¦HISRè¿è¡ï¼æé´å¦æä¸åçä¸æï¼HISRçæ§è¡æ¯ä¸ä¼è¢«ææçï¼HISRçä¼å 级åªæ0ã1ã2ï¼timerçHISRä¼å 级为2ï¼ä¹å°±æ¯è¯´ç±å¤é¨ä¸ææ¿æ´»çHISRå¾é¾è¢«æ¢å çï¼åªææ´é«ä¼å 级çä¸æHISRæå¯ä»¥ãä¸taskä¸åï¼è¢«æ¿æ´»çHISR使ç¨head_liståtail_listå°HCBæå¨ä¸ä¸ªå项çé¾è¡¨ä¸ï¼å 为ç¸åä¼å 级çHISRä¸ä¼æ¢å 对æ¹ï¼å æ¤ä¸éè¦ååé¾è¡¨ï¼ä½¿ç¨ä¸¤ä¸ªæéç®çæ¯å å¿«HISRæ§è¡çé度ã
ä¸ä¸ªå®æ¶æä½ç³»ç»çæ ¸å¿å°±æ¯å¯¹äºä»»å¡çè°åº¦ï¼NUçè°åº¦çç¥æ¯time sliceåround robinçç®æ³ï¼
è°åº¦çé¨å主è¦æä¸ä¸ªå½æ°control_to_system()ç¨äºä¿åä¸ä¸æï¼å»ºç«solicited stackï¼å ³ä¸æï¼å ³system time sliceï¼å¹¶éç½®taskçtime slice为é¢è®¾å¼ï¼å°spæ´æ°ä¸ºsystem_stack_pointerï¼è°ç¨schedule()ï¼è°åº¦çè¿ç¨æ¯é常ç®åçæ¥è¯¢ï¼å°±æ¯æ¥çä¸¤ä¸ªå ¨å±çåéï¼TCD_Execute_HISRåTCD_Execute_Taskï¼scheduleé¨åçå ³é®æ¯æå¼äºä¸æï¼ä¸ç¶å¦æå½å没æreadyçtaskææ¯è¢«æ¿æ´»çHISRï¼åsheduleæ»å¾ªç¯ä¸å»ï¼æ¥è¯¢å°ä¸ä¸ä¸ªåºè¯¥æ§è¡ç线ç¨å跳转è³control_to_thread(),å¨è¿ééæ°å¼å¯system time sliceï¼ç¶åå°çº¿ç¨çtc_stack_ptrå å ¥å°spä¸ï¼åæ¢è³çº¿ç¨çæ ä¸ï¼ä¾æ¬¡popåºæ¥ï¼å³å®æäºä»»å¡è°åº¦ã
ä»»å¡çåæ¢ä¸»è¦æ¯ä¸ä¸æçåæ¢ï¼ä¹å°±æ¯taskæ çåæ¢ï¼å½æ°çè°ç¨ä¼ä¿åé¨åregsåè¿åå°åï¼è¿äºå¨ä½é½æ¯ç¼è¯å¨æ¥å®æçï¼èOSä¸çä»»å¡åæ¢æ¯è¿è¡æ¶ï¼runtimeï¼çä¸ç§ç¶æååï¼å æ¤ç¼è¯å¨ä¹æ è½ä¸ºåï¼æ以对äºä¸ä¸æçä¿åéè¦ä»£ç æ¥å®ç°ã
ä»»å¡çæ¢å æ¯å¼æ¥çå æ¤å¿ é¡»è¦éè¿ä¸ææ¥å®ç°ï¼ä¸è¬æ¯æ¬¡timerçä¸æå³å®å½åçtaskçslice timeæ¯å¦expiredï¼ç¶å设置TCT_Set_Execute_Task为ç¸åä¼å 级çå ¶ä»taskææ´é«ä¼å 级çtaskï¼é«ä¼å 级çtaskæ¢å ä½ä¼å 级çtaskï¼ä¸è¬æ¯å¤é¨ä¸æ触åï¼å¨HISRä¸resume_task()å¤éé«ä¼å 级çtaskï¼ç¶åscheduleå°é«ä¼å 级çtaskä¸ï¼å 为timerçHISRæ¯å¨ç³»ç»åå§å就已ç»æ³¨åçï¼åªæ¯æ§è¡timeoutåtime sliceè¶ æ¶åçæä½ï¼å¹¶æ²¡ææ§è¡resume_taskçå¨ä½ã
NUä¸çstackæ两ç§solicited stackåinterrupt stackï¼solicited stackæ¯ä¸ç§minmum stackï¼èinterrupt stackæ¯å¯¹å½åææå¯åå¨å ¨é¨ä¿åï¼TCBä¸çminimum stack size = ç³è¯·å¾å°stack size - solicited stackï¼å¨arm modeä¸å åèï¼thumb modeä¸å åèï¼ï¼thumbæ å¿ç¨æ¥è®°å½ä¸ä¸æä¿åæ¶çARMçå·¥ä½æ¨¡å¼ï¼c代ç ç¼è¯ä¸ºthumb模å¼ï¼è¿æ ·å¯ä»¥åå°code sizeï¼æé«ä»£ç å¯åº¦ï¼assembly代ç ç¼è¯ä¸ºarm模å¼æå代ç çæçï¼NUä¸å æ ¸ç代ç ä¸å¤ï¼ä¸»è¦æ¯assembly代ç ãstackçç±»åä¸å ¶ä¸PCæåçshellæ å ³ï¼interrupt stackä¿åçæ¯taskææ¯HISRå¨æ§è¡çè¿ç¨ä¸è¢«ä¸ææ¶çç°åºï¼solicited stack建ç«çå°æ¹å æ¬ control_to_system()ãschedule_protect()åsend_signals()åéç»å æprotectèµæºçtaskçæ åµï¼HISR_Shell()æ§è¡å®åä¼å»ºç«solicited stackï¼å跳转è³scheduleã
(Lower Address) Stack Top -> 1 (Interrupt stack type)
CPSR Saved CPSR
r0 Saved r0
r1 Saved r1
r2 Saved r2
r3 Saved r3
r4 Saved r4
r5 Saved r5
r6 Saved r6
r7 Saved r7
r8 Saved r8
r9 Saved r9
r Saved r
r Saved r
r Saved r
sp Saved sp
lr Saved lr
(Higher Address) Stack Bottom-> pc Saved pc
(Lower Address) Stack Top -> 0 (Solicited stack type)
!!FOR THUMB ONLY!! 0/0x Saved state mask
r4 Saved r4
r5 Saved r5
r6 Saved r6
r7 Saved r7
r8 Saved r8
r9 Saved r9
r Saved r
r Saved r
r Saved r
(Higher Address) Stack Bottom-> pc Saved pc
ä¸ä¸ªç®åçä¾å说æstackçæ åµï¼é¦å æ¯ä¸ä¸ªtaskå¨ready(executing)çç¶æä¸ï¼èä¸time sliceè¶ æ¶äºï¼timerä¸æåçåï¼ä¿åtaskä¸ä¸æinterrupt_contex_save()ï¼å¨taskçtc_stack_ptræåçå°æ¹å»ºç«ä¸ææ
taskA |interrupt stack|___tc_stack_ptr æ 顶端æ¯pc=lr-4
ARM对äºä¸æçå¤å®åçå¨å½åæ令å®æexecuteæ¶ï¼åæ¶pipelineçåå pc=pc+8ï¼å ¥æ æ¶å°±ælr-4é¦å æ¾å¨stackçæé«ç«¯ï¼highï¼ã
timerçLISRå®æåæ¿æ´»äºHISRï¼æ§è¡TCC_Time_slice()å°å½åtask移å°ç¸åä¼å 级ç尾端ï¼å¹¶ä¸è®¾ç½®ä¸ä¸ä¸ªè¦æ§è¡çtaskï¼HISRå¨æ 顶端ä¿åçæ¯è¿ä¸ªHISR_shellçå ¥å£å°åï¼å 为taskçæ§è¡å®å°±finishedï¼HISRæ¯å¯éå ¥ç
HISR |solicited stack| æ 顶端æ¯HISR_shell_entry
ä¸æï¼interruptï¼
åé¢å·²ç»æåäºä¸æçåºæ¬æä½ï¼è¿éå°±åä¸äºä»£ç è·¯å¾çç»èï¼ä¸æçæ§è¡ä¸»è¦æ¯ä¸¤ä¸ªé¨åLISRåHISRï¼åæ两个é¨åçç®çå°±æ¯å°å ³ä¸æçæ¶é´æå°åï¼å¹¶ä¸å¨LISRä¸å¼ä¸æå 许ä¸æçåµå¥ï¼ä»¥å建ç«ä¸æä¼å 级ï¼é½å¯ä»¥åå°ä¸æç延è¿ï¼ä¿è¯OSçå®æ¶æ§ã
NUçä¸æ模å¼æ¯å¯éå ¥çä¸æå¤çæ¹å¼ï¼ä¹å°±æ¯åºäºä¸æä¼å 级ååµå¥ç模å¼ï¼ä¸æçåµå¥å¨å¤ççè¿ç¨ä¸åºå¯¹lr_irq_modeå¯åå¨è¿è¡ä¿åï¼å 为é«ä¼å 级çä¸æåçæ¶ä¼è¦çæä½ä¼å 级ä¸æçråspsrï¼å æ¤è¦å©ç¨ç³»ç»çæ æ¥ä¿åä¸ææ ã
NU对äºä¸æä¸ä¸æçä¿åå ·ä½æä½å¦ä¸ï¼
ï¼1ï¼å¨ä¸æåçåæ§è¡çå ¥å£å½æ°INT_IRQ()ä¸ï¼å°r0-r4ä¿åè³irqçæ ä¸
ï¼2ï¼æ¥æ¾å°å¯¹åºçinterrupt_shell()ï¼clearä¸ææºï¼æ´æ°å ¨å±çä¸æ计æ°å¨ï¼ç¶åè¿è¡interrupt_contex_save
ï¼3ï¼é¦å å©ç¨r1,r2,r3ä¿åirq模å¼ä¸çsp,lr,spsrï¼è¿éspæ¯ç¨æ¥åæ¢è³ç³»ç»æ åæ·è´lråspsrç,è¿éä¿ålråspsræ¯ç®çæ¯task被æ¢å åï¼å½å次scheduleæ¶å¯ä»¥è¿åtaskä¹åçç¶æã
ï¼4ï¼åæ¢è³SVC模å¼ï¼å¦ææ¯éåµå¥çä¸æåä¿åä¸ä¸æè³task stackä¸ï¼å°irq模å¼ä¸çlrä½ä¸ºé¡¶ç«¯PCçè¿åå¼å ¥æ ï¼å°SVC模å¼ä¸çr6-rå ¥æ ï¼å°irq模å¼ä¸çspä¿åè³r4ä¸å ¥æ ï¼æåå°ä¿åå¨irq_stackä¸çr0-r4å ¥æ
ï¼5ï¼å¦ææ¯åµå¥ä¸æï¼ä¸æçåµå¥åçå¨LISRä¸ï¼å¨æ§è¡LISRæ¶å·²ç»åæ¢è³system stackï¼å æ¤åµå¥ä¸æè¦å°ä¸æçä¸ä¸æä¿åè³system stackä¸ï¼ä¸task stackä¸interrupt stackç¸æ¯åªæ¯å°äºæ 顶ç¨æ¥æ è®°åµå¥çæ å¿ï¼1 not nestedï¼
ï¼6ï¼æä¸ä¸ªåæ¯å¤æï¼å°±æ¯å¦æå½å线ç¨æ¯ç©ºï¼å³TCD_Current_Thread == NULLï¼è¡¨æå½åæ¯scheduleä¸ï¼å 为åå§å线ç¨æ¯å ³ä¸æçï¼è¿æ ·å°±ä¸ä¸ºschedule线ç¨å»ºç«æ 帧ï¼å 为scheduleä¸éè¦ä¿åä¸ä¸æï¼å¨restoreä¸æä¸ä¸ææ¶ç´æ¥è·³è½¬è³scheduleã
ä¸æä¸ä¸æçæ¢å¤
å ¨å±çä¸æ计æ°å¨INT_Countæ¯å¦ä¸º0æ¥å¤å®å½ååºæ çä¿¡æ¯ï¼å¦ææ¯åµå¥åè¿åLISRä¸ï¼å¦ååæ¢è³system stackæ§è¡schedule
timer
timerä¸ä¸æç´§å¯ç¸å ³ï¼å ¶å®timerä¹æ¯ä¸æçä¸ç§ï¼åªæ¯åçä¸æçé¢çè¾é«ï¼ä¸ä½ç¨é大ï¼ä¸ä¸ªå®æ¶æä½ç³»ç»ï¼æ¶é´æ¯é常éè¦çä¸é¨åï¼NUä¸çtimer主è¦æå个ä½ç¨ï¼
ï¼1ï¼ç»´æ¤ç³»ç»æ¶é TMD_system_clock
ï¼2ï¼taskçtime slice
ï¼3ï¼taskçsuspend timeout timer
ï¼4ï¼application timer
å ¶ä¸ï¼3ï¼ï¼4ï¼å ±ç¨ä¸ç§æºå¶ï¼ä¸ä¸ªå ¨å±çæ¶é´è½´TMD_timerï¼timeout timeråapp timeré½å»ºç«å¨ä¸ä¸ªTM_TCBçæ°æ®ç»æä¸ï¼éè¿tm_remaining_timeæ¥è¡¨å¾å½åtimerçå©ä½æ¶é´ï¼ä¾å¦å½åætimer_listä¸æä¸ä¸ªTM_TCBï¼ä¾æ¬¡æ¯Ta = 5ï¼Tb = 7, Tc = ,é£ä¹å»ºç«çé¾è¡¨ä¸å©ä½æ¶é´ä¾æ¬¡æ¯5ï¼2ï¼8ï¼å¦æç°å¨è¦å å ¥ä¸ä¸ªæ°çtimeræ ¹æ®timerå¼æå ¥è³åéçä½ç½®ï¼å¦ææå ¥çtimer为ï¼åå®æå¨Tbåé¢ï¼å©ä½æ¶é´ä¸º1ï¼åé¢ç8æ¹ä¸º7ï¼å½åçäºtimer expiredï¼å触åtimer_HISRï¼å¦ææ¯app timeråæ§è¡timer callbackï¼å¦ææ¯task timeout timerï¼åæ§è¡TCC_Task_Timeoutå¤étaskã
ï¼2ï¼çå®ç°ä¹æ¯ä¾èµäºå ¨å±çtime sliceæ¶é´è½´ï¼æ¯ä¸ä¸ªtaskå¨æ§è¡æ¶é½ä¼å°èªå·±çæ¶é´çä¿¡æ¯æ´æ°è³å ¨å±çæ¶é´è½´ä¸ï¼å½ä¸ä¸ªtaskçtime sliceæ§è¡å®å¨timer HISRä¸è°ç¨TCC_task_Timeoutå°å½åçtaskæ¾å¨ç¸åä¼å 级listçæ尾端ï¼å¹¶è®¾ç½®ä¸ä¸ä¸ªæé«ä¼å 级çä»»å¡ãtaskå¨æ§è¡çè¿ç¨ä¸åªæ被ä¸æåtime sliceä¼ä¿åä¸æ¥ï¼å ¶ä»è®©åºå¤çå¨çæ åµé½ä¼å°time sliceæ´æ°ä¸ºé¢è®¾å¼ã
protect
protectä¸linuxçéæºå¶ç±»ä¼¼ï¼äºæ¥è®¿é®ï¼å©ç¨å¼å ³ä¸ææ¥å®ç°ï¼å¹¶ä¸æ¥æprotectçtaskæ¯ä¸å¯ä»¥suspendçï¼å¿ é¡»è¦å°protectéæ¾åæå¯ä»¥æèµ·ï¼å½ä¸ä¸ªä¼å 级è¾ä½çtaskå æprotectèµæºï¼å¦æ被æ¢å ï¼ä¸ä¸ªé«ä¼å 级çtaskæHISRå¨è¯·æ±protectèµæºæ¶ä¼æ§è¡TCC_schedule_protect()让åºå¤çå¨ç»ä½ä¼å 级çtaskæ§è¡ï¼ç´å°ä½ä¼å 级çtaskæ§è¡unprotect()为æ¢ï¼æ¤æ¶taskæHISR建ç«çæ¯solicited stackï¼åæ¶å¨control_to_threadåå¼å ³ä¸æä¸æ¬¡ï¼è¿æ ·å¯ä»¥åå°ä¸æ¬¡ä¸ä¸æçåæ¢ãNUä¸å¸¸ç¨å°çæ¯system_protectï¼å®å°±æ¯ä¸æ大éï¼ä¿æ¤å æ ¸ä¸ææå ¨å±æ°æ®ç»æç顺åºè®¿é®ï¼ç²åº¦å¾å¤§ã
LISRä¸ä¸å¯ä»¥è¯·æ±protectèµæºï¼å 为LISRæ¯ä¸ætaskåæ§è¡ï¼å¦ætaskå æprotectèµæºï¼è¿æ¶LISRåå»è¯·æ±protectèµæºï¼ä¼åçæ»éï¼å 为LISR让åºå¤çå¨åï¼schedule没åæ³å次è°åº¦å°LISRæ§è¡ï¼ååçæ»éé误ï¼å æ¤å¨LISRä¸é¤äºactivate_HISRï¼ï¼ä»¥å¤ä¸å¯ä»¥ä½¿ç¨system callï¼ä¾å¦resume_taskççï¼è¿åç³»ç»è°ç¨é½ä¼è¯·æ±protectèµæºã
对äºprotectç请æ±æç §ä¸å®ç顺åºå¯ä»¥é²æ¢æ»éï¼NUçæºç ä¸ä¸è¬å°system_protectèµæºç请æ±æ¾å¨åé¢ï¼å ¶ä»å¦DM_protectå 请æ±ã
嵌入式us/os-2在PC机上的仿真步骤?,最好截图表示,源码谢谢!分析!源码!分析
1. 安装uC/OS
为了在Borland C的源码IDE环境中进行编译,并且独立于当前的分析运行环境,需要安装μC/OS-II。源码
步骤1:将μC/OS-II源码解压至磁盘C:\根目录下,分析文件目录结构为C:\SOFTWARE,源码翻页 源码 vc其中包含BLOCK、TO和uCOS-II三个文件夹。
步骤2:将BORLAND C 4.5安装至C:\BC,或将该文件夹直接放置在C盘根目录下。
步骤3:安装TASM 5.0至C:\TASM,以使用汇编器。
步骤4:修改环境变量。在“用户变量”中找到path,在其变量值末尾添加“;C:\TASM\BIN;”。
2. 验证平台正确性
在C:\SOFTWARE之外的环境中编译以下文件以验证平台正确性。
步骤1:在d:\ex1创建一个工程文件夹,并将以下文件从uCOS-II目录中复制到该文件夹:
- CPU移植相关程序:OS_CPU_A.ASM,OS_CPU_C.C,OS_CPU.H
- uCOS-II核心程序:uCOS_II.H,excel表单源码uCOS_II.C,OS_CORE.C,OS_TASK.C,OS_TIME.C,OS_FLAG.C,OS_MBOX.C,OS_MEM.C,OS_MUTEX.C,OS_Q.C,OS_SEM.C
- PC相关程序:PC.C,PC.H
- 实验一相关程序:INCLUDES.H,OS_CFG.H,TEST.C
步骤2:启动BORLAND C++ 4.5,创建工程并指定路径为d:\ex1\1.ide。个人网络源码选择目标类型为“Application[.exe]”,平台为“DOS[Standard]”,目标模式选择“Large”。
步骤3:在工程中添加以下5个文件:
- d:\ex1\TEST.C
- d:\ex1\OS_CPU_C.C
- d:\ex1\OS_CPU_A.ASM
- d:\ex1\uCOS_II.C
- d:\ex1\PC.C
步骤4:修改INCLUDES.H中的文件路径,确保正确包含:
1) #include "os_cpu.h"
2) #include "os_cfg.h"
3) #include "ucos_ii.h"
4) #include "pc.h"
步骤5:编译并链接工程文件,生成1.exe文件于工程文件夹中。
tinyos特点
TinyOS以组件化架构为基石,它提供了一系列可重用的模块,应用程序通过配置文件(A Wiring Specification)巧妙地连接这些组件,以构建并实现所需功能。 在TinyOS的事件驱动设计中,应用程序运作的核心是事件。所有的操作都基于事件触发,传感器一旦感应到信号,采集平台源码就会立即激活相应的事件处理机制。 在并发模型方面,TinyOS区分了tasks和events。tasks适用于对时间要求不那么严格的场景,它们平等执行,按照顺序依次运行,为了优化性能,每个task需要设计得简短,以减轻系统负载。另一方面,events用于对时间要求严格的任务,它们具有优先级,可以被操作完成或外部环境事件触发,通常由硬件中断机制来驱动。 TinyOS考虑到tasks的执行顺序性,避免了阻塞操作的使用。对于耗时较长的操作,TinyOS采取了分阶段处理的方式:首先,应用程序提出操作需求,然后在操作完成后独立处理结果,这样可以提高执行效率,确保系统的流畅运行。扩展资料
TinyOS是UC Berkeley(加州大学伯克利分校)开发的开放源代码操作系统,专为嵌入式无线传感网络设计,操作系统基于构件(component-based)的架构使得快速的更新成为可能,而这又减小了受传感网络存储器限制的代码长度。OS X Server企业管理系统
OS X Server是苹果公司推出的一款专为UNIX服务器设计的操作工具,它是在OS X系统上运行的一套全面的软件套件,包含了一系列服务器功能、应用和系统管理工具。部分产品源自开源,具有强大的实用价值,尤其对于拥有大量Mac设备的组织,付费产品的效益不容忽视。
然而,与Windows Server和活动目录相比,OS X Server在软件管理方面存在局限。它不支持直接在设备上安装第三方软件,部署工具如DeployStudio在Mac上的支持较为有限。苹果远程桌面,售价.美元,是缓解这一问题的解决方案。它除了能安装程序外,还允许远程查看和控制屏幕,生成硬件和软件报告,并执行UNIX命令,如安装、更新和密码更改等。对于离线的笔记本或商务电脑,苹果远程桌面的Task Server功能可以确保所有Mac同步接收应用程序和更新,只需在两台电脑上安装并配置即可。
尽管苹果远程桌面功能强大,但它存在一些不足,比如无法自动更新多台电脑,对离线设备的管理有限,且软件更新停留在年的3.0版本。作为一款管理工具,它在几百台电脑的规模下可能显得力不从心。在FileVault 2全卷加密上,它缺乏企业级管理功能,如统一加密要求、设备加密状态验证和本地密钥存储等。
为解决这些问题,开源项目KeyCzar引入了FileVault 2的企业管理功能。管理员可通过GUI或命令工具在客户端上启动加密,并将密钥存放在谷歌应用程序引擎服务器。遇到紧急情况时,管理员可以使用KeyCzar来解锁驱动器或恢复文件。不过,使用此软件需要一定的技术基础,包括源代码下载、构建和测试,以及配置应用程序引擎后台。开发者会定期提供办公时间,帮助用户解答任何疑问。
广西梧州开展电动自行车质量违法行为专项整治
ECFA時間壓力 吳內閣大考驗|天下雜誌
Super Junior圭賢、銀赫、東海「宣布離開SM娛樂」 團體活動仍持續
剛特.鮑利 vs. 鄭崇華 當綠金企業遇上藍金創業|天下雜誌
美國航天局推遲載人登月計劃
合歡山這棵樹綠到不正常!真相出乎意料 太管處揭秘是「這設備」