ThreadX 源码及文档

所属分类:其他嵌入式/单片机内容
开发工具:C/C++
文件大小:1048KB
下载次数:31
上传日期:2018-12-10 18:19:39
上 传 者hanyong1009
说明:  硬实时操作系统threadx源代码,该操作系统曾用于美国火星登陆器摄像设备
(threadx rtos source code)

文件列表:
express.pdf (23183, 1999-12-02)
threadx\build_ap.bat (170, 1999-12-02)
threadx\build_tx.bat (4476, 1999-12-02)
threadx\build_txe.bat (7309, 1999-12-02)
threadx\demo.bld (278, 1999-12-02)
threadx\demo.c (7171, 1999-12-02)
threadx\demo.lnk (557, 1999-12-02)
threadx\demo_el.bld (294, 1999-12-02)
threadx\demo_el.lnk (626, 1999-12-02)
threadx\docs (0, 2001-04-30)
threadx\docs\ThreadX.pdf (1557201, 1999-11-01)
threadx\tx.bld (1734, 1999-12-02)
threadx\tx_api.h (32326, 1999-11-01)
threadx\tx_ba.c (11475, 1999-11-01)
threadx\tx_blo.h (6676, 1999-11-01)
threadx\tx_bpc.c (11077, 1999-11-01)
threadx\tx_bpcle.c (10067, 1999-11-01)
threadx\tx_bpd.c (9785, 1999-11-01)
threadx\tx_bpi.c (6462, 1999-11-01)
threadx\tx_br.c (10596, 1999-11-01)
threadx\tx_byt.h (6967, 1999-11-01)
threadx\tx_byta.c (12181, 1999-11-01)
threadx\tx_bytc.c (10121, 1999-11-01)
threadx\tx_bytcl.c (10149, 1999-11-01)
threadx\tx_bytd.c (10065, 1999-11-01)
threadx\tx_byti.c (6455, 1999-11-01)
threadx\tx_bytr.c (12888, 1999-11-01)
threadx\tx_byts.c (13153, 1999-11-01)
threadx\tx_efc.c (8424, 1999-11-01)
threadx\tx_efcle.c (10096, 1999-11-01)
threadx\tx_efd.c (9839, 1999-11-01)
threadx\tx_efg.c (12644, 1999-11-01)
threadx\tx_efi.c (6467, 1999-11-01)
threadx\tx_efs.c (23566, 1999-11-01)
threadx\tx_el.c (52820, 1999-12-02)
threadx\tx_el.h (36527, 1999-12-02)
threadx\tx_eve.h (6983, 1999-11-01)
threadx\tx_ghs.c (8351, 1999-12-02)
threadx\tx_ghs.h (2138, 1999-12-02)
... ...

Express Logic's ThreadX for 68332 Using the Green Hills Tools 1. Installation ThreadX for the 68332 is delivered on a single CD-ROM compatible disk. The entire distribution can be found in the sub-directory: \THREADX To install ThreadX to your hard-disk, make a THREADX\68332\GREEN directory on your hard-disk and copy all the contents of the THREADX sub-directory on the distribution disk. The following is an example MS-DOS copy command (assuming source is D: and C: is your hard-drive): D:\THREADX>XCOPY /S *.* C:\THREADX\68332\GREEN 2. Building the ThreadX run-time Library First make sure you are in the ThreadX directory you have created on your hard-drive. Also, make sure that you have setup your path and other environment variables necessary for the Green Hills development environment. At this point you may run the BUILD_TX.BAT batch file. This will build the ThreadX run-time environment in the THREADX directory. C:\THREADX\68332\GREEN> build_tx You should observe assembly and compilation of a series of ThreadX source files. At the end of the batch file, they are all combined into the run-time library file: TX.OLB. This file must be linked with your application in order to use ThreadX. 3. Demonstration System The ThreadX demonstration is designed to execute on the 68332 QUADS evaluation board and under the MULTI environment using MULTI's 68000 simulator. The instructions that follow will show you how to get the ThreadX demonstration running in these environments. Building the demonstration is easy, simply load the MULTI project file DEMO.BLD, which is located inside your ThreadX directory: C:\THREADX\68332\GREEN\DEMO.BLD You should observe the following files in the project view area: DEMO.BLD TX_ILL.68 DEMO.C DEMO.LNK README.TXT At this point, select the "Project Build" operation and observe the compilation, assembly, and linkage of the ThreadX application. After the demonstration is built, you are now ready for debugging! To run on under MULTI's 68000 simulator, select the "Remote" button from the MULTI builder (you should see "s68 68020" in the remote window). This invokes MULTI's 68020 simulator and you should observe several new windows for it. Next, select the "Debug" button from the MULTI builder. You should now observe the demonstration program in the debugger window. At this point, you are free to debug with breakpoints, data watches, etc. The demonstration system attempts to setup a 68332 periodic timer. Since the 68020 simulator does not simulate the 68332 peripherals, the timer interrupts will not work under simulation until the following commands are entered in the simulation control window: > interrupt dev1 vector 16 > interrupt dev1 priority 2 > interrupt dev1 time 10000 every 10000 > trap 16 To run on the 68332 Evaluation board, simply convert the demo output image to S-records and download it to the evaluation board. The following command can be used to do the conversion: > gsrec demo.cfe -o demo.mot 3.1 EventAnalyzer Demonstration To build a demonstration system that will also log events for the MULTI EventAnalyzer, perform the same steps as the regular demo, except build the ThreadX library with BUILD_TXE.BAT file and use the DEMO_EL.BLD build file to build the demonstration that logs all system events. 4. System Initialization The system entry point using Green Hills tools is at the label _start. This is defined within the CRT0.O file supplied by Green Hills. In addition, this is where all static and global pre-set C variable initialization processing is called from. After the Green Hills startup function returns, ThreadX initialization is is called. The 68332 specific initialization is done in the function _tx_initialize_low_level, which is located in the file TX_ILL.68. This function is responsible for setting up various system data structures, interrupt vectors, and a periodic timer interrupt source for ThreadX. In addition, _tx_initialize_low_level defines the system timer thread’s stack and determines the first available address for use by the application. By default free memory is assumed to start at the linker defined symbol __ghsbegin_freemem. The ThreadX system timer's stack is allocated here and the memory address after the timer thread's stack is passed to the application definition function, tx_application_define. 5. Assembler / Compiler / Linker Switches The following are Green Hills switches used in building the demonstration system: Compiler/Assembler Meaning Switches -G Specifies debug information -c Specifies object code output -68332 Specifies 68332 code generation There are additional linker commands inside of the file DEMO.LNK. Please use this file as a template for your application. 5.1 User defines The following defines and their associated action are as follows: Define Meaning TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included, this define causes basic ThreadX error checking to be disabled. Please see Chapter 4 in the "ThreadX User Guide" for more details. TX_DISABLE_STACK_CHECKING By default, the thread create function fills the thread's stack with a 0xEF data pattern, which is used by the MULTI debugger to calculate stack usage. This can be bypassed by compiling tx_tc.c with this define. TX_ENABLE_EVENT_LOGGING This define enables event logging for any or all of the ThreadX source code. If this option is used anywhere, the tx_ihl.c file must be compiled with it as well, since this is where the event log is initialized. TX_NO_EVENT_INFO This is a sub-option for event logging. If this is enabled, only basic information is saved in the log. TX_ENABLE_EVENT_FILTERS This is also a sub-option for event-logging. If this is enabled, run-time filtering logic is added to the event logging code. 6. Register Usage and Stack Frames The Green Hills 68K compiler assumes that registers d0-d1, and a0-a1 are scratch registers for each function. All other registers used by a C function must be preserved by the function. ThreadX takes advantage of this in situations where a context switch happens as a result of making a ThreadX service call (which is itself a C function). In such cases, the saved context of a thread is only the non-scratch registers. The following defines the saved context stack frames for context switches that occur as a result of interrupt handling or from thread-level API calls. All suspended threads have one of these two types of stack frames. The top of the suspended thread's stack is pointed to by tx_stack_ptr in the associated thread control block TX_THREAD. Offset Interrupted Stack Frame Non-Interrupt Stack Frame 0x00 1 0 0x02 d0 d2 0x06 d1 d3 0x0A d2 d4 0x0E d3 d5 0x12 d4 d6 0x16 d5 d7 0x1A d6 a2 0x1E d7 a3 0x22 a0 a4 0x26 a1 a5 0x2A a2 a6 0x2E a3 Saved SR 0x30 unused 0x32 a4 Return PC 0x36 a5 0x3A a6 0x3E Reserved 6 bytes 0x44 Interrupted SR 0x46 Interrupted PC 7. Improving Performance The distribution version of ThreadX is built without any compiler optimizations. This makes it easy to debug because you can trace or set breakpoints inside of ThreadX itself. Of course, this costs some performance. To make it run faster, you can change the BUILD_TX.BAT file to enable all compiler optimizations. In addition, you can eliminate the ThreadX basic API error checking by compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING defined. 8. Interrupt Handling ThreadX provides complete and high-performance interrupt handling for 68xxx targets. There are a certain set of requirements that are defined in the following sub-sections: 8.1 Initial Interrupt Vectors All ISRs (except for the highest-priority level ISRs) must have their entry between the labels: __tx_initialize_ISR_start: my_example_ISR: [your ISR processing here] __tx_initialize_ISR_end: This is required because a lower-priority interrupt can get interrupted before ThreadX knows about it. Hence, it could get saved as part of an executing thread’s context instead of actually being processed once the nested interrupt is finished. It is possible, however, to simply have your front-ISR processing in this area simply lockout interrupts and jump to the actual ISR processing somewhere else, e.g.: my_example_ISR_1: move.w %SR,-(%A7) ; Save SR ori.w #$0700,%SR ; Lockout interrupts jmp _my_ISR_processing ; Jump to actual ISR processing 8.2 Managed ISRs Managed ISRs are ones where ThreadX is performing all of the register saving and restoring and thread preemption if necessary. Such interrupts must conform to the following template: my_example_ISR_2: move.w %SR,-(%A7) ; Save SR ori.w #$0700,%SR ; Lockout interrupts jsr _tx_thread_context_save ; Save current system context ; Your ISR processing here. NOTE: Only Green Hills Compiler scratch ; registers (d0,d1,a0, and a1) can be used in the assembly portion of ; your ISR. If your ISR is written in C, the compiler ensures that it ; does not corrupt any of the preserved registers. When your ISR ; completes its processing, it should return and jump to the ; ThreadX context restore function. Jmp _tx_thread_context_restore ; This does not return! 8.3 Fast Interrupts For high-frequency interrupts, it may be impractical to call context save and restore on each interrupt occurrence. ThreadX supports such ISRs providing that they do not corrupt any registers, their entrance is in the designated ISR area, and they jump to _tx_thread_preempt_check when finished. The following is a good example of fast ISR processing: my_fast_ISR: ; Perform your fast, assembly language ISR processing being careful to ; save/restore any registers used. It is also assumed that this ; processing is within the ISR area mentioned before. move.w %SR,-(%A7) ; Save SR ori.w #$0700,%SR ; Lockout interrupts jmp _tx_thread_preempt_check ; Check for thread preemption caused ; by higher-priority interrupts ; that might have happened during ; this processing Of course, if the fast ISR is also the highest-priority, a simple RTE can be used in place of the three instruction sequence to check for preemption. 9. Revision History 12/02/1999 ThreadX update of 68332/Green Hills port and new Generic Code. The following files were changed for version G3.0f.3.0a: TX_API.H Added tx_eh_globals field in thread control block for thread safe libraries and added logic to bring in the event logging constants. TX_EL.H Added file to build for event logging constants. TX_GHS.H Added file to build for thread-safe library support. TX_PORT.H Changed version ID and added stack filling constant. TX_EFS.C Added optimization for setting event flags with only one thread suspended. TX_EL.C Added file to build for event logging constants. TX_GHS.C Added file to library for thread-safe C library support and stack analysis services. TX_ILL.ASM Added optional event logging code to track interrupts. TX_TC.C Added thread-safe library support, optional stack filling for debugging, and corrected a problem associated with un-initialized thread timer blocks. TX_TD.C Added thread-safe library support. TX_TIMIN.ASM Added optional event logging code to track interrupts. TX_TSB.ASM Changed initial stack pointer to guarantee long word alignment. TX_TS.ASM Removed pad word in solicited context restore. TX_TSR.ASM Added pad word in solicited context frame for long word stack alignment TXE_TMCH.C Removed code to allow timer change calls from ISRs. TXE_EFG.C Removed code to allow getting event flags from ISRs. DEMO.BLD Modified demo build options. DEMO_EL.BLD Added file for building event logging demonstration. DEMO_EL.LNK Added file for linking event logging demonstration. BUILD_AP.BAT Modified compiler options. BUILD_TX.BAT Added library safe support and changed extensions of assembly files. BUILD_TXE.BAT Added file for event log build. TX_*.C Added event logging to all thread state change services and to all kernel calls. TX*.C Changed comments and copyright header. TX*.H Changed comments and copyright header. TX*.ASM Changed comments, copyright header, and changed extensions to .68 to utilize the Green Hills preprocessor for conditional event log logic. 09/07/1999 Initial ThreadX version for 68332 using Green Hills. Copyright(c) 1996-2000 Express Logic, Inc. Express Logic, Inc. 11440 West Bernardo Court Suite 366 San Diego, CA 92127 www.expresslogic.com

近期下载者

相关文件


收藏者