forked from Imagelibrary/rtems
bsps: Fold external documentation into README.md
This commit is contained in:
committed by
Joel Sherrill
parent
cfdd40935d
commit
9b4ac0aa64
@@ -1,20 +0,0 @@
|
||||
To run RTEMS from scratch (without any other bootcode) on the beagles,
|
||||
you can comfortably load the executables over JTAG using gdb. This is
|
||||
necessarily target-specific however.
|
||||
|
||||
1. BBXM
|
||||
|
||||
- For access to JTAG using openocd, see simscripts/bbxm.cfg.
|
||||
- openocd then offers access to gdb using simscripts/gdbinit.bbxm.
|
||||
- start openocd using bbxm.cfg
|
||||
- copy your .exe to a new dir and that gdbinit file as .gdbinit in the same dir
|
||||
- go there and start gdb:
|
||||
$ arm-rtems4.11-gdb hello.exe
|
||||
- gdb will invoke the BBXM hardware initialization in the bbxm.cfg
|
||||
and load the ELF over JTAG. type 'c' (for continue) to run it.
|
||||
- breakpoints, C statement and single-instruction stepping work.
|
||||
|
||||
2. beaglebone white
|
||||
|
||||
This has been tested with openocd and works but not in as much detail as for
|
||||
the BBXM yet (i.e. loading an executable from scratch).
|
||||
@@ -124,3 +124,51 @@ Good luck & enjoy!
|
||||
|
||||
Ben Gras
|
||||
beng@shrike-systems.com
|
||||
|
||||
|
||||
JTAG
|
||||
----
|
||||
To run RTEMS from scratch (without any other bootcode) on the beagles,
|
||||
you can comfortably load the executables over JTAG using gdb. This is
|
||||
necessarily target-specific however.
|
||||
|
||||
1. BBXM
|
||||
|
||||
- For access to JTAG using openocd, see simscripts/bbxm.cfg.
|
||||
- openocd then offers access to gdb using simscripts/gdbinit.bbxm.
|
||||
- start openocd using bbxm.cfg
|
||||
- copy your .exe to a new dir and that gdbinit file as .gdbinit in the same dir
|
||||
- go there and start gdb:
|
||||
$ arm-rtems4.11-gdb hello.exe
|
||||
- gdb will invoke the BBXM hardware initialization in the bbxm.cfg
|
||||
and load the ELF over JTAG. type 'c' (for continue) to run it.
|
||||
- breakpoints, C statement and single-instruction stepping work.
|
||||
|
||||
2. beaglebone white
|
||||
|
||||
This has been tested with openocd and works but not in as much detail as for
|
||||
the BBXM yet (i.e. loading an executable from scratch).
|
||||
|
||||
|
||||
Testing
|
||||
-------
|
||||
To build and run the tests for this BSP, use the RTEMS tester.
|
||||
The necessary software can be built with the RTEMS source builder.
|
||||
|
||||
To build the BSP for testing:
|
||||
- set CONSOLE_POLLED=1 in the configure environment, some tests
|
||||
assume console i/o is polled
|
||||
- add --enable-tests to the configure line
|
||||
|
||||
1. Qemu
|
||||
|
||||
Linaro Qemu can emulate the beagleboard xm and so run all regression
|
||||
tests in software. Build the bbxm.bset from the RTEMS source builder and
|
||||
you will get qemu linaro that can run them. There is a beagleboardxm_qemu
|
||||
bsp in the RTEMS tester to invoke it with every test.
|
||||
|
||||
2. bbxm hardware
|
||||
|
||||
This requires JTAG, see README.JTAG. Use the beagleboardxm bsp in the
|
||||
RTEMS tester. It starts gdb to connect to openocd to reset the target
|
||||
and load the RTEMS executable for each test iteration.
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
To build and run the tests for this BSP, use the RTEMS tester.
|
||||
The necessary software can be built with the RTEMS source builder.
|
||||
|
||||
To build the BSP for testing:
|
||||
- set CONSOLE_POLLED=1 in the configure environment, some tests
|
||||
assume console i/o is polled
|
||||
- add --enable-tests to the configure line
|
||||
|
||||
1. Qemu
|
||||
|
||||
Linaro Qemu can emulate the beagleboard xm and so run all regression
|
||||
tests in software. Build the bbxm.bset from the RTEMS source builder and
|
||||
you will get qemu linaro that can run them. There is a beagleboardxm_qemu
|
||||
bsp in the RTEMS tester to invoke it with every test.
|
||||
|
||||
2. bbxm hardware
|
||||
|
||||
This requires JTAG, see README.JTAG. Use the beagleboardxm bsp in the
|
||||
RTEMS tester. It starts gdb to connect to openocd to reset the target
|
||||
and load the RTEMS executable for each test iteration.
|
||||
@@ -1,26 +0,0 @@
|
||||
# Fernando Nicodemos <fgnicodemos@terra.com.br>
|
||||
# from NCB - Sistemas Embarcados Ltda. (Brazil)
|
||||
#
|
||||
|
||||
This is the BSP for Cogent Computer System's KIT637_V6. It implements an
|
||||
updated version of the CSB337 board with a number of optional peripherals.
|
||||
|
||||
This KIT is implemented by CSB637 single board computer using the
|
||||
Atmel AT91RM9200 CPU and the CSB937 target main board. It uses an
|
||||
Optrex LCD (T-51750AA, 640x480) and Touchscreen (not supported in this
|
||||
BSP). The IDE and USB (host and device) interfaces are also not supported.
|
||||
The SD and Compact Flash cards drivers are still under development.
|
||||
|
||||
The differences in the CSB637 single board computer are very slight but
|
||||
important:
|
||||
|
||||
CSB337 CSB637
|
||||
========== ==========
|
||||
Clock speed 184MHz 184MHz
|
||||
External memory 16MB SDRAM 64MB SDRAM
|
||||
Flash memory 8MB Strata 8/16MB Strata (8MB used by default)
|
||||
Video buffer 1MB 8MB
|
||||
Video driver S1D13706 S1D13506
|
||||
PHY Layer LXT971ALC BCM5221
|
||||
|
||||
?? Some GPIO or interrupts moved around.
|
||||
@@ -13,3 +13,34 @@ The differences in the board are very slight but important:
|
||||
|
||||
Please check README.kit637_v6 for more explanation about the Cogent's
|
||||
Development Kit that uses the CSB637 single board computer.
|
||||
|
||||
|
||||
kit637_v6
|
||||
---------
|
||||
Fernando Nicodemos <fgnicodemos@terra.com.br>
|
||||
from NCB - Sistemas Embarcados Ltda. (Brazil)
|
||||
|
||||
This is the BSP for Cogent Computer System's KIT637_V6. It implements an
|
||||
updated version of the CSB337 board with a number of optional peripherals.
|
||||
|
||||
This KIT is implemented by CSB637 single board computer using the
|
||||
Atmel AT91RM9200 CPU and the CSB937 target main board. It uses an
|
||||
Optrex LCD (T-51750AA, 640x480) and Touchscreen (not supported in this
|
||||
BSP). The IDE and USB (host and device) interfaces are also not supported.
|
||||
The SD and Compact Flash cards drivers are still under development.
|
||||
|
||||
The differences in the CSB637 single board computer are very slight but
|
||||
important:
|
||||
|
||||
```
|
||||
CSB337 CSB637
|
||||
========== ==========
|
||||
Clock speed 184MHz 184MHz
|
||||
External memory 16MB SDRAM 64MB SDRAM
|
||||
Flash memory 8MB Strata 8/16MB Strata (8MB used by default)
|
||||
Video buffer 1MB 8MB
|
||||
Video driver S1D13706 S1D13506
|
||||
PHY Layer LXT971ALC BCM5221
|
||||
```
|
||||
|
||||
?? Some GPIO or interrupts moved around.
|
||||
|
||||
@@ -1,396 +0,0 @@
|
||||
+-----------------------------------------------------------------------------+
|
||||
| RTEMS 4.6.0 PC386 BSP HOWTO - 2003/05/08 |
|
||||
| |
|
||||
+-----------------------------------------------------------------------------+
|
||||
| (C) Copyright 1998 - |
|
||||
| - NavIST Group - Real-Time Distributed Systems and Industrial Automation |
|
||||
| |
|
||||
| http://pandora.ist.utl.pt |
|
||||
| |
|
||||
| Instituto Superior Tecnico * Lisboa * PORTUGAL |
|
||||
+-----------------------------------------------------------------------------+
|
||||
| Disclaimer: |
|
||||
| |
|
||||
| This file is provided "AS IS" without warranty of any kind, either |
|
||||
| expressed or implied. |
|
||||
+-----------------------------------------------------------------------------+
|
||||
| History: |
|
||||
| 12 June 2000 - Updated to 4.5 (Joel) |
|
||||
| 8 May 2003 - PXE GRUB (Chris Johns) |
|
||||
+-----------------------------------------------------------------------------+
|
||||
|
||||
|
||||
1. Introduction
|
||||
---------------
|
||||
|
||||
This tries to explain how to setup the RTEMS host environment so
|
||||
that RTEMS applications can be built for and run in a bare PC 386 or
|
||||
above.
|
||||
|
||||
It covers essentially the aspects of loading images, since
|
||||
information concerning other issues such as building the development
|
||||
tools and the RTEMS distribution can be found in the 'RTEMS 4.6.0
|
||||
On-Line Library' under 'Getting Started with RTEMS for C/C++ Users'.
|
||||
|
||||
Please note that everything in the following text using the
|
||||
notation '<...>' is just an alias to something and should always be
|
||||
substituted by the real thing!
|
||||
|
||||
|
||||
2. Building the GNU C/C++ Cross Compiler Toolset
|
||||
------------------------------------------------
|
||||
|
||||
Obtaining, building and installing the tools for building the
|
||||
PC386 BSP of RTEMS is covered in detail in the 'RTEMS 4.6.0 On-Line
|
||||
Library' -> 'Getting Started with RTEMS for C/C++ Users'. You can
|
||||
either use pre-built toolset executables or build your own from
|
||||
the instructions given there.
|
||||
|
||||
This BSP is designed to work only with ELF toolset configurations.
|
||||
This is format used by the i386-rtems target.
|
||||
|
||||
|
||||
4. Building RTEMS
|
||||
-----------------
|
||||
Obtaining, building and installing the tools for building the
|
||||
PC386 BSP is covered in detail in the 'RTEMS 4.6.0 On-Line Library' ->
|
||||
'Getting Started with RTEMS for C/C++ Users' -> 'Building RTEMS'.
|
||||
|
||||
When running configure, use the following values for the listed
|
||||
options with an i386-rtems toolset:
|
||||
|
||||
--target=i386-rtems
|
||||
--enable-rtemsbsp=pc386
|
||||
|
||||
|
||||
5. RTEMS Tests
|
||||
--------------
|
||||
|
||||
If you've completed the last step successfully, you'll find the
|
||||
RTEMS sample and test files that can be loaded with GRUB in the
|
||||
'<build_point>/pc386/tests' directory, RTEMS sample and test files in
|
||||
a format suitable for use with NetBoot in the
|
||||
'<build_point>/pc386/BootImgs' directory.
|
||||
|
||||
|
||||
6. Loading RTEMS PC386 applications
|
||||
-----------------------------------
|
||||
|
||||
6.1. Unarchiving
|
||||
----------------
|
||||
|
||||
Files which have been "tarred, gzipped" (i.e. .tar.gz or .tgz
|
||||
extension) may be unarchived with a command similar to one of the
|
||||
following:
|
||||
|
||||
zcat <file>.tgz | tar xvof -
|
||||
|
||||
OR
|
||||
|
||||
gunzip -c <file>.tgz | tar xvof -
|
||||
|
||||
OR
|
||||
|
||||
tar xzvf <file>.tgz
|
||||
|
||||
NOTE: gunzip -c is equivalent to zcat. On commercial (non-Linux)
|
||||
Unices, since the GNU utilities are not the standard 'tar' will be
|
||||
gtar (GNU tar) and 'zcat' will be 'gzcat'.
|
||||
|
||||
Given that the necessary utility programs are installed, any of
|
||||
the above commands will extract the contents of <file>.tar.gz into the
|
||||
current directory. To view the contents of an archive without
|
||||
restoring any files, use a command similar to the following:
|
||||
|
||||
zcat <file>.tgz | tar tvf -
|
||||
|
||||
|
||||
6.2 Using GRUB to load RTEMS PC386 applications from Floppy
|
||||
-----------------------------------------------------------
|
||||
|
||||
Using GRUB (GRand Unified Bootloader) is the simplest way to load
|
||||
and run your PC386 BSP samples, tests and programs. You will need to build GRUB
|
||||
so you need a working GCC and friends. The online documentation for GRUB lists
|
||||
what you need:
|
||||
|
||||
- http://www.gnu.org/manual/grub/html_node/index.html
|
||||
|
||||
You can get the latest release of GRUB from its homepage:
|
||||
|
||||
- http://www.gnu.org/software/grub/
|
||||
|
||||
Once you obtain the .tar.gz archive from:
|
||||
|
||||
- ftp://alpha.gnu.org/gnu/grub/
|
||||
|
||||
Download the lastest version (grub-0.93.tar.gz), change to a temporary
|
||||
directory (you won't need the grub files after this and can just go ahead and
|
||||
delete the whole directory structure that was generated) and unarchive
|
||||
'grub-0.93.tar.gz' following the instructions given above in [2. Unarchiving].
|
||||
|
||||
$ cd /tmp
|
||||
$ mkdir grub
|
||||
$ cd grub
|
||||
$ cat grub-0.93.tar.gz | gzip -d | tar xf -
|
||||
|
||||
after this is done create a build directory and decend into it:
|
||||
|
||||
$ mkdir build
|
||||
$ cd build
|
||||
|
||||
then configure GRUB with the standard options:
|
||||
|
||||
$ ../grub-0.93/configure
|
||||
|
||||
and if successful run make:
|
||||
|
||||
$ make
|
||||
|
||||
Once complete you should have the 'stage1' and 'stage2' files. They will be
|
||||
in the directories with the same name.
|
||||
|
||||
You should have two (2) formatted diskettes available. One of
|
||||
these will only be used temporarily to create the other one, and we'll
|
||||
refer to it as 'RAW GRUB' diskette (you can label it accordingly if
|
||||
you wish). The other diskette, which we will refer to as 'GRUB FS'
|
||||
should be high-level formatted with one of GRUB's supported file
|
||||
systems, which are: DOS FAT, BSD FFS, and Linux ext2fs.
|
||||
|
||||
A DOS FAT diskette can, obviously, be created under DOS with the
|
||||
'FORMAT' command. Under Linux, the following commands are available to
|
||||
add file systems to low-level formatted diskettes:
|
||||
|
||||
1. To add a DOS FAT file system to a low-level formatted diskette:
|
||||
|
||||
a) If you have mtools installed:
|
||||
|
||||
'mformat a:'.
|
||||
|
||||
b) Assuming that you are formatting the diskette in the first
|
||||
floppy disk drive ('/dev/fd0' under Linux):
|
||||
|
||||
'mkdosfs /dev/fd0' or
|
||||
|
||||
'mkfs.msdos /dev/fd0'.
|
||||
|
||||
2. To add a Linux ext2fs file system to a low-level formatted
|
||||
diskette, assuming that you are formatting the diskette in the
|
||||
first floppy disk drive ('/dev/fd0' under Linux):
|
||||
|
||||
'mke2fs /dev/fd0' or
|
||||
|
||||
'mkfs.ext2 /dev/fd0'.
|
||||
|
||||
Next we will install using 'rawrite' or 'dd' to the 'GRUB RAW'
|
||||
diskette.
|
||||
|
||||
NOTE: This will destroy any data currently on the diskette.
|
||||
|
||||
Execute your OS's equivalent of (this should work for recent
|
||||
FreeBSD versions and Linux just fine):
|
||||
|
||||
dd if=stage1/stage1 of=/dev/fd0 bs=512 count=1
|
||||
dd if=stage2/stage2 of=/dev/fd0 bs=512 seek=1
|
||||
|
||||
Under DOS/Windows/NT, courtesy of Eric Hanchrow (erich@microsoft.com):
|
||||
|
||||
* Use the copy /b command to binary concatenate the stage1 and
|
||||
stage2 files together via:
|
||||
|
||||
copy /b stage1\stage1 stage2\stage2 grub.raw
|
||||
|
||||
* Use rawrite.exe (which is available in many places on the net and
|
||||
in some Linux distributions) to write grub.raw to a diskette.
|
||||
|
||||
(CCJ: I am not sure about the Windows location etc)
|
||||
|
||||
Next stage: copy the 'stage1' and 'stage2' files to the 'GRUB FS'
|
||||
diskette (if you are using Linux you can mount the diskette in an
|
||||
appropriate mount point and then 'cp' the files to it, if it is either
|
||||
a DOS FAT or an EXT2FS diskette, or in the case of a DOS FAT diskette
|
||||
you can use 'mcopy' from 'mtools'.)
|
||||
|
||||
After this is done boot a PC using the 'GRUB RAW' diskette. After
|
||||
this is done, you will get GRUB's command line interface. Exchange
|
||||
'GRUB RAW' with the 'GRUB FS' diskette in the drive and issue the
|
||||
following command from GRUB's prompt:
|
||||
|
||||
install=(fd0)/stage1 (fd0) (fd0)/stage2 0x8000 (fd0)/grubmenu
|
||||
|
||||
This command will make the 'GRUB FS' diskette bootable. After this
|
||||
is done, you won't require the 'GRUB RAW' diskette anymore and you can
|
||||
delete the 'stage1' file from the 'GRUB FS' diskette.
|
||||
|
||||
Next copy all the files you wish to load to the diskette. The GRUB
|
||||
loadable test and sample files in the RTEMS distribution have '.exe'
|
||||
extension and can be found under the build point in the 'pc386/tests'
|
||||
directory. You can compress this files with gzip to save space if you
|
||||
wish. GRUB loads 'gzipped' files transparently.
|
||||
|
||||
Finally you have to create a GRUB menu configuration file. We will
|
||||
call this file 'grubmenu'. You can call it anything as long as you use
|
||||
the correct name in the 'install' command where we used 'grubmenu'.
|
||||
|
||||
The 'grubmenu' file, as far as we are interested has the following
|
||||
syntax:
|
||||
|
||||
title= Hello World Test
|
||||
kernel= (fd0)/hello.exe.gz
|
||||
|
||||
You can add as many of this entries as you want to the 'grubmenu'
|
||||
file. There should be one for each program you wish to load. The
|
||||
'title=' line provides a description for the program that will appear
|
||||
after boot in the GRUB menu for the user to choose and the 'kernel='
|
||||
line describes where the file can be found by GRUB (you should leave
|
||||
the '(fd0)/' part and just substitute the rest if you've copied the
|
||||
files to the root directory of the diskette.
|
||||
|
||||
Just boot the PC with the 'GRUB FS' diskette and you will be able
|
||||
to choose which program you want to load from GRUB's menu.
|
||||
|
||||
The GRUB documentation is available in HTML format in the 'docs'
|
||||
directory of the GRUB tree starting with the 'index.html' file.
|
||||
|
||||
|
||||
6.3 Using GRUB to load RTEMS PC386 applications via PXE NetBoot
|
||||
----------------------------------------------------------------
|
||||
|
||||
PXE is the Intel Preboot Execution Environment. A number of PC
|
||||
manufactures provide a PXE option in the BIOS. This is usually a
|
||||
Net Boot option in a BIOS configuration screen. The simplist way to
|
||||
load an RTEMS application via PXE is to use GRUB as a first stage
|
||||
loader.
|
||||
|
||||
You will need to determine your network card, and have a working
|
||||
network with a DHCP (or BOOTP), and TFTP server.
|
||||
|
||||
You may to find a TFTP server that does not support option
|
||||
negotiations. A google search shows a number of PC's have a buggy
|
||||
PXE loader. Supressing option negotiations seems to make them
|
||||
work.
|
||||
|
||||
You will need to build GRUB for your network card. Follow the
|
||||
procedure in item 6.2 up to the configure point. At this point
|
||||
run the following configure command:
|
||||
|
||||
$ ../grub-0.93/configure --enable-diskless --enable-eepro100
|
||||
|
||||
for an Etherexpress Pro 100 network card, then run make:
|
||||
|
||||
$ make
|
||||
|
||||
Once complete you should have the 'stage2/pxegrub' file. Copy
|
||||
this to your TFTP server's download directory. Configure your
|
||||
DHCP server to provide an IP address and download the image. For
|
||||
the ISC server found on operating systems such as Linux something
|
||||
like the following should do:
|
||||
|
||||
#
|
||||
# PC loading RTEMS via PXE and GRUB
|
||||
#
|
||||
|
||||
group
|
||||
{
|
||||
filename "/tftpboot/pxeboot";
|
||||
host rtems-pc { hardware ethernet 00:08:c7:73:41:65; }
|
||||
}
|
||||
|
||||
If all works your PC should boot and load GRUB over the network:
|
||||
|
||||
GRUB version 0.93 (639K lower / 64512K upper memory)
|
||||
|
||||
Address: 10.10.10.10
|
||||
NetMask: 255.255.255.0
|
||||
Server: 10.10.10.1
|
||||
Gateway: 10.10.10.1
|
||||
|
||||
[ Minimal BASH-like line editing is supported. For the first word, TAB
|
||||
lists possible command completions. Anywhere else TAB lists the possible
|
||||
completions of a device/filename. ]
|
||||
|
||||
grub>
|
||||
|
||||
Copy your RTEMS executable to the TFTP server directory then enter
|
||||
the following GRUB commands:
|
||||
|
||||
grub> root (nd)
|
||||
Filesystem type is tftp, using whole disk
|
||||
|
||||
grub> kernel ticker.exe
|
||||
[Multiboot-elf, <0x100000:0x1e5a4:0x2b08>, shtab=0x122140, entry=0x10000c]
|
||||
|
||||
grub> boot
|
||||
|
||||
The GRUB documents how to get GRUB to load a configuration file.
|
||||
|
||||
|
||||
6.4 Using NetBoot to load RTEMS PC386 applications
|
||||
---------------------------------------------------
|
||||
|
||||
To load the '*.bt' files you can
|
||||
|
||||
Alternatively, if you have a PC connected to a network with a
|
||||
BOOTP server and a TFTP server (this can very well be you're Linux
|
||||
RTEMS host system), you can use Gero Kuhlmann's NetBoot loader, to
|
||||
load RTEMS to a diskless PC across a network. You can get it from:
|
||||
|
||||
ftp://sunsite.unc.edu/pub/Linux/system/boot/ethernet/netboot-0.7.3.tar.gz
|
||||
|
||||
or in any of Sunsite's mirrors. It is also available from NetBoot's
|
||||
homepage:
|
||||
|
||||
http://www.han.de/~gero/netboot
|
||||
|
||||
After unarchiving 'netboot-0.7.3.tar.gz' you should change to the
|
||||
base directory of this and run:
|
||||
|
||||
./configure --disable-mknbi-dos --disable-mknbi-linux --disable-mknbi-mgl
|
||||
|
||||
Afterwards, you should follow the instructions contained in the
|
||||
'INSTALL' file also contained in the base directory, on how to setup the
|
||||
server(s) and to build a boot ROM for the client PC network card, or a
|
||||
boot diskette, and the PC client should be able to load the '*.bt' files
|
||||
from the server.
|
||||
|
||||
The important sections to check in the 'INSTALL FILE' are the last two:
|
||||
|
||||
- Setup of the server (only the BOOTP and TFTP parts - ignore NFS).
|
||||
===================
|
||||
|
||||
- Setup of the client including building the bootrom
|
||||
==================================================
|
||||
|
||||
all the rest can be safely ignored if you don't care to examine it.
|
||||
|
||||
|
||||
7. Technical Information
|
||||
------------------------
|
||||
|
||||
NOTE: All the following paths are relative to the base directory
|
||||
of the RTEMS distribution.
|
||||
|
||||
As of the writing of this HOWTO, PC386 images can be loaded either
|
||||
in low memory 0x10000 (64KB) until 0x97C00 (607K) using NetBoot or in
|
||||
high memory from 0x100000 (1024KB) until the top of the available
|
||||
memory using either NetBoot or GRUB.
|
||||
|
||||
If you want to change the default loading address from 1024KB to
|
||||
something else, just change the value of the variable RELOCADDR in the
|
||||
'make/custom/pc386.cfg' file to the new value you want (make sure you
|
||||
follow the instructions indicated before the definition of RELOCADDR).
|
||||
|
||||
Remember that GRUB restricts the loading addresses to values above
|
||||
0x100000 (1024KB), only NetBoot can load images in low memory.
|
||||
|
||||
After you make any changes to RELOCADDR and if you are using
|
||||
NetLoader, you'll have to recompile the
|
||||
'c/src/lib/libbsp/i386/pc386/start/start16.s' file. The easiest way to
|
||||
achieve this is just to 'make clean' and the 'make all' again. The
|
||||
quickest way is to change to
|
||||
'<build_point>/c/src/lib/libbsp/i386/pc386/start' and 'make
|
||||
RTEMS_BSP=pc386 clean all'.
|
||||
|
||||
When programming interrupt handlers take into account that the PIC
|
||||
is reprogrammed and so you should use the interface functions provided
|
||||
in '<build_point>/pc386/lib/include/irq.h> to guarantee that everything
|
||||
works ok.
|
||||
@@ -1 +0,0 @@
|
||||
The dec21140 network driver is found in libchip/networking.
|
||||
@@ -83,3 +83,475 @@ GDB can be support using:
|
||||
```
|
||||
|
||||
The GDB stub details and in shared/comm/GDB.HOWTO.
|
||||
|
||||
|
||||
SMP
|
||||
---
|
||||
The following files were developed by Erich Boleyn <erich@uruk.org>.
|
||||
The original files were copied from http://www.uruk.org/mps/ and committed
|
||||
into cvs as is. These files will be modified for RTEMS smp support,
|
||||
but the original files are being committed in order to track any file
|
||||
changes that occur. We are attempting to keep these changes as minimal
|
||||
and conainted as possible.
|
||||
|
||||
* start/smp-imps.c
|
||||
* ../include/bsp/smp-imps.h
|
||||
* ../include/bsp/apic.h
|
||||
|
||||
|
||||
Status
|
||||
------
|
||||
There are a wide range of PC configurations. This BSP has been tested
|
||||
on only a handful. There are configurations which do not yet work. The
|
||||
failure is suspected to be video card related. Here is a list of
|
||||
successes and failures.
|
||||
|
||||
```
|
||||
SUCCESSES
|
||||
=========
|
||||
GRUB - AMD K6 MMX 200Mhz + S3 ViRGE
|
||||
GRUB - 486 DX 33Mhz + Cirrus Logic CL-GD540x/542x
|
||||
GRUB - Pentium MMX 166Mhz + S3 Trio 64V2
|
||||
GRUB - Pentium (P54C) 120Mhz + S3 Trio 64V+
|
||||
GRUB - Pentium-S 133Mhz + S3 Trio 64V2
|
||||
|
||||
FAILURES
|
||||
========
|
||||
GRUB - 486 DX2 66Mhz + Cirrus Logic CL-GD5428 - reset
|
||||
GRUB - PII 333 Mhz + STB Vision 128 - reset
|
||||
GRUB - PII 300 Mhz + Permedia - reset
|
||||
GRUB - Pentium 60 Mhz + Mach 32/64 - reset
|
||||
```
|
||||
|
||||
|
||||
dec21140
|
||||
--------
|
||||
The dec21140 network driver is found in libchip/networking.
|
||||
|
||||
|
||||
HOWTO
|
||||
-----
|
||||
+-----------------------------------------------------------------------------+
|
||||
| RTEMS 4.6.0 PC386 BSP HOWTO - 2003/05/08 |
|
||||
| |
|
||||
+-----------------------------------------------------------------------------+
|
||||
| (C) Copyright 1998 - |
|
||||
| - NavIST Group - Real-Time Distributed Systems and Industrial Automation |
|
||||
| |
|
||||
| http://pandora.ist.utl.pt |
|
||||
| |
|
||||
| Instituto Superior Tecnico * Lisboa * PORTUGAL |
|
||||
+-----------------------------------------------------------------------------+
|
||||
| Disclaimer: |
|
||||
| |
|
||||
| This file is provided "AS IS" without warranty of any kind, either |
|
||||
| expressed or implied. |
|
||||
+-----------------------------------------------------------------------------+
|
||||
| History: |
|
||||
| 12 June 2000 - Updated to 4.5 (Joel) |
|
||||
| 8 May 2003 - PXE GRUB (Chris Johns) |
|
||||
+-----------------------------------------------------------------------------+
|
||||
|
||||
|
||||
1. Introduction
|
||||
---------------
|
||||
|
||||
This tries to explain how to setup the RTEMS host environment so
|
||||
that RTEMS applications can be built for and run in a bare PC 386 or
|
||||
above.
|
||||
|
||||
It covers essentially the aspects of loading images, since
|
||||
information concerning other issues such as building the development
|
||||
tools and the RTEMS distribution can be found in the 'RTEMS 4.6.0
|
||||
On-Line Library' under 'Getting Started with RTEMS for C/C++ Users'.
|
||||
|
||||
Please note that everything in the following text using the
|
||||
notation '<...>' is just an alias to something and should always be
|
||||
substituted by the real thing!
|
||||
|
||||
|
||||
2. Building the GNU C/C++ Cross Compiler Toolset
|
||||
------------------------------------------------
|
||||
|
||||
Obtaining, building and installing the tools for building the
|
||||
PC386 BSP of RTEMS is covered in detail in the 'RTEMS 4.6.0 On-Line
|
||||
Library' -> 'Getting Started with RTEMS for C/C++ Users'. You can
|
||||
either use pre-built toolset executables or build your own from
|
||||
the instructions given there.
|
||||
|
||||
This BSP is designed to work only with ELF toolset configurations.
|
||||
This is format used by the i386-rtems target.
|
||||
|
||||
|
||||
4. Building RTEMS
|
||||
-----------------
|
||||
Obtaining, building and installing the tools for building the
|
||||
PC386 BSP is covered in detail in the 'RTEMS 4.6.0 On-Line Library' ->
|
||||
'Getting Started with RTEMS for C/C++ Users' -> 'Building RTEMS'.
|
||||
|
||||
When running configure, use the following values for the listed
|
||||
options with an i386-rtems toolset:
|
||||
|
||||
```shell
|
||||
--target=i386-rtems
|
||||
--enable-rtemsbsp=pc386
|
||||
```
|
||||
|
||||
5. RTEMS Tests
|
||||
--------------
|
||||
|
||||
If you've completed the last step successfully, you'll find the
|
||||
RTEMS sample and test files that can be loaded with GRUB in the
|
||||
'<build_point>/pc386/tests' directory, RTEMS sample and test files in
|
||||
a format suitable for use with NetBoot in the
|
||||
'<build_point>/pc386/BootImgs' directory.
|
||||
|
||||
|
||||
6. Loading RTEMS PC386 applications
|
||||
-----------------------------------
|
||||
|
||||
6.1. Unarchiving
|
||||
----------------
|
||||
|
||||
Files which have been "tarred, gzipped" (i.e. .tar.gz or .tgz
|
||||
extension) may be unarchived with a command similar to one of the
|
||||
following:
|
||||
|
||||
```shell
|
||||
zcat <file>.tgz | tar xvof -
|
||||
```
|
||||
OR
|
||||
|
||||
```shell
|
||||
gunzip -c <file>.tgz | tar xvof -
|
||||
```
|
||||
OR
|
||||
|
||||
```shell
|
||||
tar xzvf <file>.tgz
|
||||
```
|
||||
NOTE: gunzip -c is equivalent to zcat. On commercial (non-Linux)
|
||||
Unices, since the GNU utilities are not the standard 'tar' will be
|
||||
gtar (GNU tar) and 'zcat' will be 'gzcat'.
|
||||
|
||||
Given that the necessary utility programs are installed, any of
|
||||
the above commands will extract the contents of <file>.tar.gz into the
|
||||
current directory. To view the contents of an archive without
|
||||
restoring any files, use a command similar to the following:
|
||||
|
||||
```shell
|
||||
zcat <file>.tgz | tar tvf -
|
||||
```
|
||||
|
||||
6.2 Using GRUB to load RTEMS PC386 applications from Floppy
|
||||
-----------------------------------------------------------
|
||||
|
||||
Using GRUB (GRand Unified Bootloader) is the simplest way to load
|
||||
and run your PC386 BSP samples, tests and programs. You will need to build GRUB
|
||||
so you need a working GCC and friends. The online documentation for GRUB lists
|
||||
what you need:
|
||||
|
||||
- http://www.gnu.org/manual/grub/html_node/index.html
|
||||
|
||||
You can get the latest release of GRUB from its homepage:
|
||||
|
||||
- http://www.gnu.org/software/grub/
|
||||
|
||||
Once you obtain the .tar.gz archive from:
|
||||
|
||||
- ftp://alpha.gnu.org/gnu/grub/
|
||||
|
||||
Download the lastest version (grub-0.93.tar.gz), change to a temporary
|
||||
directory (you won't need the grub files after this and can just go ahead and
|
||||
delete the whole directory structure that was generated) and unarchive
|
||||
'grub-0.93.tar.gz' following the instructions given above in [2. Unarchiving].
|
||||
|
||||
```shell
|
||||
$ cd /tmp
|
||||
$ mkdir grub
|
||||
$ cd grub
|
||||
$ cat grub-0.93.tar.gz | gzip -d | tar xf -
|
||||
```
|
||||
|
||||
after this is done create a build directory and decend into it:
|
||||
|
||||
```shell
|
||||
$ mkdir build
|
||||
$ cd build
|
||||
``
|
||||
then configure GRUB with the standard options:
|
||||
|
||||
```shell
|
||||
$ ../grub-0.93/configure
|
||||
```
|
||||
|
||||
and if successful run make:
|
||||
|
||||
```shell
|
||||
$ make
|
||||
```
|
||||
|
||||
Once complete you should have the 'stage1' and 'stage2' files. They will be
|
||||
in the directories with the same name.
|
||||
|
||||
You should have two (2) formatted diskettes available. One of
|
||||
these will only be used temporarily to create the other one, and we'll
|
||||
refer to it as 'RAW GRUB' diskette (you can label it accordingly if
|
||||
you wish). The other diskette, which we will refer to as 'GRUB FS'
|
||||
should be high-level formatted with one of GRUB's supported file
|
||||
systems, which are: DOS FAT, BSD FFS, and Linux ext2fs.
|
||||
|
||||
A DOS FAT diskette can, obviously, be created under DOS with the
|
||||
'FORMAT' command. Under Linux, the following commands are available to
|
||||
add file systems to low-level formatted diskettes:
|
||||
|
||||
1. To add a DOS FAT file system to a low-level formatted diskette:
|
||||
|
||||
a) If you have mtools installed:
|
||||
|
||||
'mformat a:'.
|
||||
|
||||
b) Assuming that you are formatting the diskette in the first
|
||||
floppy disk drive ('/dev/fd0' under Linux):
|
||||
|
||||
'mkdosfs /dev/fd0' or
|
||||
|
||||
'mkfs.msdos /dev/fd0'.
|
||||
|
||||
2. To add a Linux ext2fs file system to a low-level formatted
|
||||
diskette, assuming that you are formatting the diskette in the
|
||||
first floppy disk drive ('/dev/fd0' under Linux):
|
||||
|
||||
'mke2fs /dev/fd0' or
|
||||
|
||||
'mkfs.ext2 /dev/fd0'.
|
||||
|
||||
Next we will install using 'rawrite' or 'dd' to the 'GRUB RAW'
|
||||
diskette.
|
||||
|
||||
NOTE: This will destroy any data currently on the diskette.
|
||||
|
||||
Execute your OS's equivalent of (this should work for recent
|
||||
FreeBSD versions and Linux just fine):
|
||||
|
||||
```shell
|
||||
dd if=stage1/stage1 of=/dev/fd0 bs=512 count=1
|
||||
dd if=stage2/stage2 of=/dev/fd0 bs=512 seek=1
|
||||
```
|
||||
|
||||
Under DOS/Windows/NT, courtesy of Eric Hanchrow (erich@microsoft.com):
|
||||
|
||||
* Use the copy /b command to binary concatenate the stage1 and
|
||||
stage2 files together via:
|
||||
|
||||
```shell
|
||||
copy /b stage1\stage1 stage2\stage2 grub.raw
|
||||
```
|
||||
|
||||
* Use rawrite.exe (which is available in many places on the net and
|
||||
in some Linux distributions) to write grub.raw to a diskette.
|
||||
|
||||
(CCJ: I am not sure about the Windows location etc)
|
||||
|
||||
Next stage: copy the 'stage1' and 'stage2' files to the 'GRUB FS'
|
||||
diskette (if you are using Linux you can mount the diskette in an
|
||||
appropriate mount point and then 'cp' the files to it, if it is either
|
||||
a DOS FAT or an EXT2FS diskette, or in the case of a DOS FAT diskette
|
||||
you can use 'mcopy' from 'mtools'.)
|
||||
|
||||
After this is done boot a PC using the 'GRUB RAW' diskette. After
|
||||
this is done, you will get GRUB's command line interface. Exchange
|
||||
'GRUB RAW' with the 'GRUB FS' diskette in the drive and issue the
|
||||
following command from GRUB's prompt:
|
||||
|
||||
```shell
|
||||
install=(fd0)/stage1 (fd0) (fd0)/stage2 0x8000 (fd0)/grubmenu
|
||||
```
|
||||
This command will make the 'GRUB FS' diskette bootable. After this
|
||||
is done, you won't require the 'GRUB RAW' diskette anymore and you can
|
||||
delete the 'stage1' file from the 'GRUB FS' diskette.
|
||||
|
||||
Next copy all the files you wish to load to the diskette. The GRUB
|
||||
loadable test and sample files in the RTEMS distribution have '.exe'
|
||||
extension and can be found under the build point in the 'pc386/tests'
|
||||
directory. You can compress this files with gzip to save space if you
|
||||
wish. GRUB loads 'gzipped' files transparently.
|
||||
|
||||
Finally you have to create a GRUB menu configuration file. We will
|
||||
call this file 'grubmenu'. You can call it anything as long as you use
|
||||
the correct name in the 'install' command where we used 'grubmenu'.
|
||||
|
||||
The 'grubmenu' file, as far as we are interested has the following
|
||||
syntax:
|
||||
|
||||
title= Hello World Test
|
||||
kernel= (fd0)/hello.exe.gz
|
||||
|
||||
You can add as many of this entries as you want to the 'grubmenu'
|
||||
file. There should be one for each program you wish to load. The
|
||||
'title=' line provides a description for the program that will appear
|
||||
after boot in the GRUB menu for the user to choose and the 'kernel='
|
||||
line describes where the file can be found by GRUB (you should leave
|
||||
the '(fd0)/' part and just substitute the rest if you've copied the
|
||||
files to the root directory of the diskette.
|
||||
|
||||
Just boot the PC with the 'GRUB FS' diskette and you will be able
|
||||
to choose which program you want to load from GRUB's menu.
|
||||
|
||||
The GRUB documentation is available in HTML format in the 'docs'
|
||||
directory of the GRUB tree starting with the 'index.html' file.
|
||||
|
||||
|
||||
6.3 Using GRUB to load RTEMS PC386 applications via PXE NetBoot
|
||||
----------------------------------------------------------------
|
||||
|
||||
PXE is the Intel Preboot Execution Environment. A number of PC
|
||||
manufactures provide a PXE option in the BIOS. This is usually a
|
||||
Net Boot option in a BIOS configuration screen. The simplist way to
|
||||
load an RTEMS application via PXE is to use GRUB as a first stage
|
||||
loader.
|
||||
|
||||
You will need to determine your network card, and have a working
|
||||
network with a DHCP (or BOOTP), and TFTP server.
|
||||
|
||||
You may to find a TFTP server that does not support option
|
||||
negotiations. A google search shows a number of PC's have a buggy
|
||||
PXE loader. Supressing option negotiations seems to make them
|
||||
work.
|
||||
|
||||
You will need to build GRUB for your network card. Follow the
|
||||
procedure in item 6.2 up to the configure point. At this point
|
||||
run the following configure command:
|
||||
|
||||
```shell
|
||||
$ ../grub-0.93/configure --enable-diskless --enable-eepro100
|
||||
```
|
||||
|
||||
for an Etherexpress Pro 100 network card, then run make:
|
||||
|
||||
```shell
|
||||
$ make
|
||||
```
|
||||
|
||||
Once complete you should have the 'stage2/pxegrub' file. Copy
|
||||
this to your TFTP server's download directory. Configure your
|
||||
DHCP server to provide an IP address and download the image. For
|
||||
the ISC server found on operating systems such as Linux something
|
||||
like the following should do:
|
||||
|
||||
```shell
|
||||
#
|
||||
# PC loading RTEMS via PXE and GRUB
|
||||
#
|
||||
|
||||
group
|
||||
{
|
||||
filename "/tftpboot/pxeboot";
|
||||
host rtems-pc { hardware ethernet 00:08:c7:73:41:65; }
|
||||
}
|
||||
```
|
||||
|
||||
If all works your PC should boot and load GRUB over the network:
|
||||
|
||||
```shell
|
||||
GRUB version 0.93 (639K lower / 64512K upper memory)
|
||||
|
||||
Address: 10.10.10.10
|
||||
NetMask: 255.255.255.0
|
||||
Server: 10.10.10.1
|
||||
Gateway: 10.10.10.1
|
||||
|
||||
[ Minimal BASH-like line editing is supported. For the first word, TAB
|
||||
lists possible command completions. Anywhere else TAB lists the possible
|
||||
completions of a device/filename. ]
|
||||
|
||||
grub>
|
||||
```
|
||||
Copy your RTEMS executable to the TFTP server directory then enter
|
||||
the following GRUB commands:
|
||||
|
||||
```shell
|
||||
grub> root (nd)
|
||||
Filesystem type is tftp, using whole disk
|
||||
|
||||
grub> kernel ticker.exe
|
||||
[Multiboot-elf, <0x100000:0x1e5a4:0x2b08>, shtab=0x122140, entry=0x10000c]
|
||||
|
||||
grub> boot
|
||||
```
|
||||
|
||||
The GRUB documents how to get GRUB to load a configuration file.
|
||||
|
||||
|
||||
6.4 Using NetBoot to load RTEMS PC386 applications
|
||||
---------------------------------------------------
|
||||
|
||||
To load the '*.bt' files you can
|
||||
|
||||
Alternatively, if you have a PC connected to a network with a
|
||||
BOOTP server and a TFTP server (this can very well be you're Linux
|
||||
RTEMS host system), you can use Gero Kuhlmann's NetBoot loader, to
|
||||
load RTEMS to a diskless PC across a network. You can get it from:
|
||||
|
||||
ftp://sunsite.unc.edu/pub/Linux/system/boot/ethernet/netboot-0.7.3.tar.gz
|
||||
|
||||
or in any of Sunsite's mirrors. It is also available from NetBoot's
|
||||
homepage:
|
||||
|
||||
http://www.han.de/~gero/netboot
|
||||
|
||||
After unarchiving 'netboot-0.7.3.tar.gz' you should change to the
|
||||
base directory of this and run:
|
||||
|
||||
```shell
|
||||
./configure --disable-mknbi-dos --disable-mknbi-linux --disable-mknbi-mgl
|
||||
```
|
||||
|
||||
Afterwards, you should follow the instructions contained in the
|
||||
'INSTALL' file also contained in the base directory, on how to setup the
|
||||
server(s) and to build a boot ROM for the client PC network card, or a
|
||||
boot diskette, and the PC client should be able to load the '*.bt' files
|
||||
from the server.
|
||||
|
||||
The important sections to check in the 'INSTALL FILE' are the last two:
|
||||
|
||||
- Setup of the server (only the BOOTP and TFTP parts - ignore NFS).
|
||||
===================
|
||||
|
||||
- Setup of the client including building the bootrom
|
||||
==================================================
|
||||
|
||||
all the rest can be safely ignored if you don't care to examine it.
|
||||
|
||||
|
||||
7. Technical Information
|
||||
------------------------
|
||||
|
||||
NOTE: All the following paths are relative to the base directory
|
||||
of the RTEMS distribution.
|
||||
|
||||
As of the writing of this HOWTO, PC386 images can be loaded either
|
||||
in low memory 0x10000 (64KB) until 0x97C00 (607K) using NetBoot or in
|
||||
high memory from 0x100000 (1024KB) until the top of the available
|
||||
memory using either NetBoot or GRUB.
|
||||
|
||||
If you want to change the default loading address from 1024KB to
|
||||
something else, just change the value of the variable RELOCADDR in the
|
||||
'make/custom/pc386.cfg' file to the new value you want (make sure you
|
||||
follow the instructions indicated before the definition of RELOCADDR).
|
||||
|
||||
Remember that GRUB restricts the loading addresses to values above
|
||||
0x100000 (1024KB), only NetBoot can load images in low memory.
|
||||
|
||||
After you make any changes to RELOCADDR and if you are using
|
||||
NetLoader, you'll have to recompile the
|
||||
'c/src/lib/libbsp/i386/pc386/start/start16.s' file. The easiest way to
|
||||
achieve this is just to 'make clean' and the 'make all' again. The
|
||||
quickest way is to change to
|
||||
'<build_point>/c/src/lib/libbsp/i386/pc386/start' and 'make
|
||||
RTEMS_BSP=pc386 clean all'.
|
||||
|
||||
When programming interrupt handlers take into account that the PIC
|
||||
is reprogrammed and so you should use the interface functions provided
|
||||
in '<build_point>/pc386/lib/include/irq.h> to guarantee that everything
|
||||
works ok.
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
|
||||
There are a wide range of PC configurations. This BSP has been tested
|
||||
on only a handful. There are configurations which do not yet work. The
|
||||
failure is suspected to be video card related. Here is a list of
|
||||
successes and failures.
|
||||
|
||||
SUCCESSES
|
||||
=========
|
||||
GRUB - AMD K6 MMX 200Mhz + S3 ViRGE
|
||||
GRUB - 486 DX 33Mhz + Cirrus Logic CL-GD540x/542x
|
||||
GRUB - Pentium MMX 166Mhz + S3 Trio 64V2
|
||||
GRUB - Pentium (P54C) 120Mhz + S3 Trio 64V+
|
||||
GRUB - Pentium-S 133Mhz + S3 Trio 64V2
|
||||
|
||||
FAILURES
|
||||
========
|
||||
GRUB - 486 DX2 66Mhz + Cirrus Logic CL-GD5428 - reset
|
||||
GRUB - PII 333 Mhz + STB Vision 128 - reset
|
||||
GRUB - PII 300 Mhz + Permedia - reset
|
||||
GRUB - Pentium 60 Mhz + Mach 32/64 - reset
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
The following files were developed by Erich Boleyn <erich@uruk.org>.
|
||||
The original files were copied from http://www.uruk.org/mps/ and committed
|
||||
into cvs as is. These files will be modified for RTEMS smp support,
|
||||
but the original files are being committed in order to track any file
|
||||
changes that occur. We are attempting to keep these changes as minimal
|
||||
and conainted as possible.
|
||||
|
||||
+ smp-imps.c
|
||||
+ smp-imps.h
|
||||
+ ../irq/apic.h
|
||||
@@ -1,31 +0,0 @@
|
||||
Initialization :
|
||||
|
||||
set the CSR_UART_DIVISOR to the correct VALUE,
|
||||
depending on the internal frequency of the LatticeMico32 softcore.
|
||||
|
||||
for the ML401 board, this value is calculated using this formula : clk_frequency/230400/16
|
||||
clk_frequency = 100000000 Hz
|
||||
=> we must set CSR_UART_DIVISOR to 27
|
||||
|
||||
How to send a byte to uart :
|
||||
|
||||
void writechar(char c)
|
||||
{
|
||||
CSR_UART_RXTX = c;
|
||||
while(!(irq_pending() & IRQ_UARTTX));
|
||||
irq_ack(IRQ_UARTTX);
|
||||
}
|
||||
|
||||
How to receive a byte from uart :
|
||||
|
||||
|
||||
char readchar()
|
||||
{
|
||||
char c;
|
||||
while(!(irq_pending() & IRQ_UARTRX));
|
||||
irq_ack(IRQ_UARTRX);
|
||||
c = CSR_UART_RXTX;
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,3 +17,40 @@ Includes drivers for:
|
||||
- RS232 debug port
|
||||
|
||||
For more information: http://www.milkymist.org/
|
||||
|
||||
|
||||
UART
|
||||
----
|
||||
Initialization:
|
||||
|
||||
set the CSR_UART_DIVISOR to the correct VALUE,
|
||||
depending on the internal frequency of the LatticeMico32 softcore.
|
||||
|
||||
for the ML401 board, this value is calculated using this formula : clk_frequency/230400/16
|
||||
clk_frequency = 100000000 Hz
|
||||
=> we must set CSR_UART_DIVISOR to 27
|
||||
|
||||
How to send a byte to uart :
|
||||
|
||||
```c
|
||||
void writechar(char c)
|
||||
{
|
||||
CSR_UART_RXTX = c;
|
||||
while(!(irq_pending() & IRQ_UARTTX));
|
||||
irq_ack(IRQ_UARTTX);
|
||||
}
|
||||
```
|
||||
|
||||
How to receive a byte from uart :
|
||||
|
||||
|
||||
```c
|
||||
char readchar()
|
||||
{
|
||||
char c;
|
||||
while(!(irq_pending() & IRQ_UARTRX));
|
||||
irq_ack(IRQ_UARTRX);
|
||||
c = CSR_UART_RXTX;
|
||||
return c;
|
||||
}
|
||||
```
|
||||
|
||||
@@ -253,3 +253,314 @@ External interrupt lines (priority is fixed between 3 and 4):
|
||||
+-----+--------+--------+--------+--------+--------+--------+--------+--------+
|
||||
```
|
||||
|
||||
|
||||
|
||||
Timing tests
|
||||
------------
|
||||
```
|
||||
TIMING TESTS 2005-01-28
|
||||
========================
|
||||
|
||||
*** TIME TEST 1 ***
|
||||
rtems_semaphore_create 19
|
||||
rtems_semaphore_delete 21
|
||||
rtems_semaphore_obtain: available 4
|
||||
rtems_semaphore_obtain: not available -- NO_WAIT 5
|
||||
rtems_semaphore_release: no waiting tasks 12
|
||||
*** END OF TEST 1 ***
|
||||
|
||||
*** TIME TEST 2 ***
|
||||
rtems_semaphore_obtain: not available -- caller blocks 34
|
||||
*** END OF TEST 2 ***
|
||||
|
||||
*** TIME TEST 3 ***
|
||||
rtems_semaphore_release: task readied -- preempts caller 27
|
||||
*** END OF TEST 3 ***
|
||||
|
||||
*** TIME TEST 4 ***
|
||||
rtems_task_restart: blocked task -- preempts caller 54
|
||||
rtems_task_restart: ready task -- preempts caller 52
|
||||
rtems_semaphore_release: task readied -- returns to caller 18
|
||||
rtems_task_create 87
|
||||
rtems_task_start 24
|
||||
rtems_task_restart: suspended task -- returns to caller 27
|
||||
rtems_task_delete: suspended task 66
|
||||
rtems_task_restart: ready task -- returns to caller 28
|
||||
rtems_task_restart: blocked task -- returns to caller 38
|
||||
rtems_task_delete: blocked task 69
|
||||
*** END OF TEST 4 ***
|
||||
|
||||
*** TIME TEST 5 ***
|
||||
rtems_task_suspend: calling task 23
|
||||
rtems_task_resume: task readied -- preempts caller 22
|
||||
*** END OF TEST 5 ***
|
||||
|
||||
*** TIME TEST 6 ***
|
||||
rtems_task_restart: calling task 30
|
||||
rtems_task_suspend: returns to caller 9
|
||||
rtems_task_resume: task readied -- returns to caller 12
|
||||
rtems_task_delete: ready task 69
|
||||
*** END OF TEST 6 ***
|
||||
|
||||
*** TIME TEST 7 ***
|
||||
rtems_task_restart: suspended task -- preempts caller 44
|
||||
*** END OF TEST 7 ***
|
||||
|
||||
*** TIME TEST 9 ***
|
||||
rtems_message_queue_create 55
|
||||
rtems_message_queue_send: no waiting tasks 20
|
||||
rtems_message_queue_urgent: no waiting tasks 21
|
||||
rtems_message_queue_receive: available 20
|
||||
rtems_message_queue_flush: no messages flushed 8
|
||||
rtems_message_queue_flush: messages flushed 12
|
||||
rtems_message_queue_delete 29
|
||||
*** END OF TEST 9 ***
|
||||
|
||||
*** TIME TEST 10 ***
|
||||
rtems_message_queue_receive: not available -- NO_WAIT 10
|
||||
rtems_message_queue_receive: not available -- caller blocks 38
|
||||
*** END OF TEST 10 ***
|
||||
|
||||
*** TIME TEST 11 ***
|
||||
rtems_message_queue_send: task readied -- preempts caller 37
|
||||
*** END OF TEST 11 ***
|
||||
|
||||
*** TIME TEST 12 ***
|
||||
rtems_message_queue_send: task readied -- returns to caller 23
|
||||
*** END OF TEST 12 ***
|
||||
|
||||
*** TIME TEST 13 ***
|
||||
rtems_message_queue_urgent: task readied -- preempts caller 35
|
||||
*** END OF TEST 13 ***
|
||||
|
||||
*** TIME TEST 14 ***
|
||||
rtems_message_queue_urgent: task readied -- returns to caller 24
|
||||
*** END OF TEST 14 ***
|
||||
|
||||
*** TIME TEST 15 ***
|
||||
rtems_event_receive: obtain current events 0
|
||||
rtems_event_receive: not available -- NO_WAIT 5
|
||||
rtems_event_receive: not available -- caller blocks 28
|
||||
rtems_event_send: no task readied 5
|
||||
rtems_event_receive: available 9
|
||||
rtems_event_send: task readied -- returns to caller 16
|
||||
*** END OF TEST 15 ***
|
||||
|
||||
*** TIME TEST 16 ***
|
||||
rtems_event_send: task readied -- preempts caller 27
|
||||
*** END OF TEST 16 ***
|
||||
|
||||
*** TIME TEST 17 ***
|
||||
rtems_task_set_priority: preempts caller 39
|
||||
*** END OF TEST 17 ***
|
||||
|
||||
*** TIME TEST 18 ***
|
||||
rtems_task_delete: calling task 83
|
||||
*** END OF TEST 18 ***
|
||||
|
||||
*** TIME TEST 19 ***
|
||||
rtems_signal_catch 5
|
||||
rtems_signal_send: returns to caller 12
|
||||
rtems_signal_send: signal to self 20
|
||||
exit ASR overhead: returns to calling task 15
|
||||
exit ASR overhead: returns to preempting task 18
|
||||
*** END OF TEST 19 ***
|
||||
|
||||
*** TIME TEST 20 ***
|
||||
rtems_partition_create 20
|
||||
rtems_region_create 40
|
||||
rtems_partition_get_buffer: available 11
|
||||
rtems_partition_get_buffer: not available 7
|
||||
rtems_partition_return_buffer 12
|
||||
rtems_partition_delete 11
|
||||
rtems_region_get_segment: available 28
|
||||
rtems_region_get_segment: not available -- NO_WAIT 29
|
||||
rtems_region_return_segment: no waiting tasks 29
|
||||
rtems_region_get_segment: not available -- caller blocks 55
|
||||
rtems_region_return_segment: task readied -- preempts caller 72
|
||||
rtems_region_return_segment: task readied -- returns to caller 58
|
||||
rtems_region_delete 25
|
||||
rtems_io_initialize 1
|
||||
rtems_io_open 1
|
||||
rtems_io_close 1
|
||||
rtems_io_read 1
|
||||
rtems_io_write 1
|
||||
rtems_io_control 1
|
||||
*** END OF TEST 20 ***
|
||||
|
||||
*** TIME TEST 21 ***
|
||||
rtems_task_ident 60
|
||||
rtems_message_queue_ident 60
|
||||
rtems_semaphore_ident 69
|
||||
rtems_partition_ident 59
|
||||
rtems_region_ident 60
|
||||
rtems_port_ident 59
|
||||
rtems_timer_ident 61
|
||||
rtems_rate_monotonic_ident 60
|
||||
*** END OF TEST 21 ***
|
||||
|
||||
*** TIME TEST 22 ***
|
||||
rtems_message_queue_broadcast: task readied -- returns to caller 32
|
||||
rtems_message_queue_broadcast: no waiting tasks 14
|
||||
rtems_message_queue_broadcast: task readied -- preempts caller 39
|
||||
*** END OF TEST 22 ***
|
||||
|
||||
*** TIME TEST 23 ***
|
||||
rtems_timer_create 8
|
||||
rtems_timer_fire_after: inactive 12
|
||||
rtems_timer_fire_after: active 12
|
||||
rtems_timer_cancel: active 9
|
||||
rtems_timer_cancel: inactive 8
|
||||
rtems_timer_reset: inactive 14
|
||||
rtems_timer_reset: active 15
|
||||
rtems_timer_fire_when: inactive 21
|
||||
rtems_timer_fire_when: active 21
|
||||
rtems_timer_delete: active 12
|
||||
rtems_timer_delete: inactive 11
|
||||
rtems_task_wake_when 35
|
||||
*** END OF TEST 23 ***
|
||||
|
||||
*** TIME TEST 24 ***
|
||||
rtems_task_wake_after: yield -- returns to caller 3
|
||||
rtems_task_wake_after: yields -- preempts caller 18
|
||||
*** END OF TEST 24 ***
|
||||
|
||||
*** TIME TEST 25 ***
|
||||
rtems_clock_tick 7
|
||||
*** END OF TEST 25 ***
|
||||
|
||||
*** TIME TEST 26 ***
|
||||
_ISR_Disable 1
|
||||
_ISR_Flash 0
|
||||
_ISR_Enable 0
|
||||
_Thread_Disable_dispatch 1
|
||||
_Thread_Enable_dispatch 3
|
||||
_Thread_Set_state 7
|
||||
_Thread_Disptach (NO FP) 16
|
||||
context switch: no floating point contexts 12
|
||||
context switch: self 2
|
||||
context switch: to another task 1
|
||||
fp context switch: restore 1st FP task 14
|
||||
fp context switch: save idle, restore initialized 3
|
||||
fp context switch: save idle, restore idle 13
|
||||
fp context switch: save initialized, restore initialized 2
|
||||
_Thread_Resume 7
|
||||
_Thread_Unblock 6
|
||||
_Thread_Ready 5
|
||||
_Thread_Get 1
|
||||
_Semaphore_Get 1
|
||||
_Thread_Get: invalid id 0
|
||||
*** END OF TEST 26 ***
|
||||
|
||||
*** TIME TEST 27 ***
|
||||
interrupt entry overhead: returns to interrupted task 3
|
||||
interrupt exit overhead: returns to interrupted task 3
|
||||
interrupt entry overhead: returns to nested interrupt 2
|
||||
interrupt exit overhead: returns to nested interrupt 2
|
||||
interrupt entry overhead: returns to preempting task 4
|
||||
interrupt exit overhead: returns to preempting task 20
|
||||
*** END OF TEST 27 ***
|
||||
|
||||
*** TIME TEST 28 ***
|
||||
rtems_port_create 12
|
||||
rtems_port_external_to_internal 5
|
||||
rtems_port_internal_to_external 6
|
||||
rtems_port_delete 12
|
||||
*** END OF TEST 28 ***
|
||||
|
||||
*** TIME TEST 29 ***
|
||||
rtems_rate_monotonic_create 13
|
||||
rtems_rate_monotonic_period: initiate period -- returns to caller 20
|
||||
rtems_rate_monotonic_period: obtain status 10
|
||||
rtems_rate_monotonic_cancel 13
|
||||
rtems_rate_monotonic_delete: inactive 17
|
||||
rtems_rate_monotonic_delete: active 16
|
||||
rtems_rate_monotonic_period: conclude periods -- caller blocks 24
|
||||
*** END OF TEST 29 ***
|
||||
|
||||
*** TIME CHECKER ***
|
||||
Units may not be in microseconds for this test!!!
|
||||
0 100000
|
||||
Total time = 0
|
||||
Average time = 0
|
||||
NULL timer stopped at 0
|
||||
LOOP (1000) timer stopped at 188
|
||||
LOOP (10000) timer stopped at 1875
|
||||
LOOP (50000) timer stopped at 9375
|
||||
LOOP (100000) timer stopped at 18750
|
||||
*** END OF TIME CHECKER ***
|
||||
|
||||
*** TIME TEST OVERHEAD ***
|
||||
rtems_initialize_executive 0
|
||||
rtems_shutdown_executive 0
|
||||
rtems_task_create 0
|
||||
rtems_task_ident 0
|
||||
rtems_task_start 0
|
||||
rtems_task_restart 0
|
||||
rtems_task_delete 0
|
||||
rtems_task_suspend 0
|
||||
rtems_task_resume 0
|
||||
rtems_task_set_priority 0
|
||||
rtems_task_mode 0
|
||||
rtems_task_get_note 0
|
||||
rtems_task_set_note 0
|
||||
rtems_task_wake_when 1
|
||||
rtems_task_wake_after 0
|
||||
rtems_interrupt_catch 0
|
||||
rtems_clock_get 1
|
||||
rtems_clock_set 1
|
||||
rtems_clock_tick 0
|
||||
rtems_timer_create 0
|
||||
rtems_timer_delete 0
|
||||
rtems_timer_ident 0
|
||||
rtems_timer_fire_after 1
|
||||
rtems_timer_fire_when 1
|
||||
rtems_timer_reset 0
|
||||
rtems_timer_cancel 0
|
||||
rtems_semaphore_create 0
|
||||
rtems_semaphore_delete 0
|
||||
rtems_semaphore_ident 0
|
||||
rtems_semaphore_obtain 0
|
||||
rtems_semaphore_release 0
|
||||
rtems_message_queue_create 0
|
||||
rtems_message_queue_ident 0
|
||||
rtems_message_queue_delete 0
|
||||
rtems_message_queue_send 0
|
||||
rtems_message_queue_urgent 0
|
||||
rtems_message_queue_broadcast 0
|
||||
rtems_message_queue_receive 0
|
||||
rtems_message_queue_flush 0
|
||||
rtems_event_send 0
|
||||
rtems_event_receive 0
|
||||
rtems_signal_catch 0
|
||||
rtems_signal_send 0
|
||||
rtems_partition_create 0
|
||||
rtems_partition_ident 0
|
||||
rtems_partition_delete 0
|
||||
rtems_partition_get_buffer 0
|
||||
rtems_partition_return_buffer 0
|
||||
rtems_region_create 0
|
||||
rtems_region_ident 0
|
||||
rtems_region_delete 0
|
||||
rtems_region_get_segment 0
|
||||
rtems_region_return_segment 0
|
||||
rtems_port_create 0
|
||||
rtems_port_ident 0
|
||||
rtems_port_delete 0
|
||||
rtems_port_external_to_internal 0
|
||||
rtems_port_internal_to_external 0
|
||||
rtems_io_initialize 0
|
||||
rtems_io_open 0
|
||||
rtems_io_close 0
|
||||
rtems_io_read 0
|
||||
rtems_io_write 0
|
||||
rtems_io_control 0
|
||||
rtems_fatal_error_occurred 0
|
||||
rtems_rate_monotonic_create 0
|
||||
rtems_rate_monotonic_ident 0
|
||||
rtems_rate_monotonic_delete 0
|
||||
rtems_rate_monotonic_cancel 0
|
||||
rtems_rate_monotonic_period 0
|
||||
rtems_multiprocessing_announce 0
|
||||
*** END OF TIME OVERHEAD ***
|
||||
```
|
||||
|
||||
@@ -1,305 +0,0 @@
|
||||
TIMING TESTS 2005-01-28
|
||||
========================
|
||||
|
||||
*** TIME TEST 1 ***
|
||||
rtems_semaphore_create 19
|
||||
rtems_semaphore_delete 21
|
||||
rtems_semaphore_obtain: available 4
|
||||
rtems_semaphore_obtain: not available -- NO_WAIT 5
|
||||
rtems_semaphore_release: no waiting tasks 12
|
||||
*** END OF TEST 1 ***
|
||||
|
||||
*** TIME TEST 2 ***
|
||||
rtems_semaphore_obtain: not available -- caller blocks 34
|
||||
*** END OF TEST 2 ***
|
||||
|
||||
*** TIME TEST 3 ***
|
||||
rtems_semaphore_release: task readied -- preempts caller 27
|
||||
*** END OF TEST 3 ***
|
||||
|
||||
*** TIME TEST 4 ***
|
||||
rtems_task_restart: blocked task -- preempts caller 54
|
||||
rtems_task_restart: ready task -- preempts caller 52
|
||||
rtems_semaphore_release: task readied -- returns to caller 18
|
||||
rtems_task_create 87
|
||||
rtems_task_start 24
|
||||
rtems_task_restart: suspended task -- returns to caller 27
|
||||
rtems_task_delete: suspended task 66
|
||||
rtems_task_restart: ready task -- returns to caller 28
|
||||
rtems_task_restart: blocked task -- returns to caller 38
|
||||
rtems_task_delete: blocked task 69
|
||||
*** END OF TEST 4 ***
|
||||
|
||||
*** TIME TEST 5 ***
|
||||
rtems_task_suspend: calling task 23
|
||||
rtems_task_resume: task readied -- preempts caller 22
|
||||
*** END OF TEST 5 ***
|
||||
|
||||
*** TIME TEST 6 ***
|
||||
rtems_task_restart: calling task 30
|
||||
rtems_task_suspend: returns to caller 9
|
||||
rtems_task_resume: task readied -- returns to caller 12
|
||||
rtems_task_delete: ready task 69
|
||||
*** END OF TEST 6 ***
|
||||
|
||||
*** TIME TEST 7 ***
|
||||
rtems_task_restart: suspended task -- preempts caller 44
|
||||
*** END OF TEST 7 ***
|
||||
|
||||
*** TIME TEST 9 ***
|
||||
rtems_message_queue_create 55
|
||||
rtems_message_queue_send: no waiting tasks 20
|
||||
rtems_message_queue_urgent: no waiting tasks 21
|
||||
rtems_message_queue_receive: available 20
|
||||
rtems_message_queue_flush: no messages flushed 8
|
||||
rtems_message_queue_flush: messages flushed 12
|
||||
rtems_message_queue_delete 29
|
||||
*** END OF TEST 9 ***
|
||||
|
||||
*** TIME TEST 10 ***
|
||||
rtems_message_queue_receive: not available -- NO_WAIT 10
|
||||
rtems_message_queue_receive: not available -- caller blocks 38
|
||||
*** END OF TEST 10 ***
|
||||
|
||||
*** TIME TEST 11 ***
|
||||
rtems_message_queue_send: task readied -- preempts caller 37
|
||||
*** END OF TEST 11 ***
|
||||
|
||||
*** TIME TEST 12 ***
|
||||
rtems_message_queue_send: task readied -- returns to caller 23
|
||||
*** END OF TEST 12 ***
|
||||
|
||||
*** TIME TEST 13 ***
|
||||
rtems_message_queue_urgent: task readied -- preempts caller 35
|
||||
*** END OF TEST 13 ***
|
||||
|
||||
*** TIME TEST 14 ***
|
||||
rtems_message_queue_urgent: task readied -- returns to caller 24
|
||||
*** END OF TEST 14 ***
|
||||
|
||||
*** TIME TEST 15 ***
|
||||
rtems_event_receive: obtain current events 0
|
||||
rtems_event_receive: not available -- NO_WAIT 5
|
||||
rtems_event_receive: not available -- caller blocks 28
|
||||
rtems_event_send: no task readied 5
|
||||
rtems_event_receive: available 9
|
||||
rtems_event_send: task readied -- returns to caller 16
|
||||
*** END OF TEST 15 ***
|
||||
|
||||
*** TIME TEST 16 ***
|
||||
rtems_event_send: task readied -- preempts caller 27
|
||||
*** END OF TEST 16 ***
|
||||
|
||||
*** TIME TEST 17 ***
|
||||
rtems_task_set_priority: preempts caller 39
|
||||
*** END OF TEST 17 ***
|
||||
|
||||
*** TIME TEST 18 ***
|
||||
rtems_task_delete: calling task 83
|
||||
*** END OF TEST 18 ***
|
||||
|
||||
*** TIME TEST 19 ***
|
||||
rtems_signal_catch 5
|
||||
rtems_signal_send: returns to caller 12
|
||||
rtems_signal_send: signal to self 20
|
||||
exit ASR overhead: returns to calling task 15
|
||||
exit ASR overhead: returns to preempting task 18
|
||||
*** END OF TEST 19 ***
|
||||
|
||||
*** TIME TEST 20 ***
|
||||
rtems_partition_create 20
|
||||
rtems_region_create 40
|
||||
rtems_partition_get_buffer: available 11
|
||||
rtems_partition_get_buffer: not available 7
|
||||
rtems_partition_return_buffer 12
|
||||
rtems_partition_delete 11
|
||||
rtems_region_get_segment: available 28
|
||||
rtems_region_get_segment: not available -- NO_WAIT 29
|
||||
rtems_region_return_segment: no waiting tasks 29
|
||||
rtems_region_get_segment: not available -- caller blocks 55
|
||||
rtems_region_return_segment: task readied -- preempts caller 72
|
||||
rtems_region_return_segment: task readied -- returns to caller 58
|
||||
rtems_region_delete 25
|
||||
rtems_io_initialize 1
|
||||
rtems_io_open 1
|
||||
rtems_io_close 1
|
||||
rtems_io_read 1
|
||||
rtems_io_write 1
|
||||
rtems_io_control 1
|
||||
*** END OF TEST 20 ***
|
||||
|
||||
*** TIME TEST 21 ***
|
||||
rtems_task_ident 60
|
||||
rtems_message_queue_ident 60
|
||||
rtems_semaphore_ident 69
|
||||
rtems_partition_ident 59
|
||||
rtems_region_ident 60
|
||||
rtems_port_ident 59
|
||||
rtems_timer_ident 61
|
||||
rtems_rate_monotonic_ident 60
|
||||
*** END OF TEST 21 ***
|
||||
|
||||
*** TIME TEST 22 ***
|
||||
rtems_message_queue_broadcast: task readied -- returns to caller 32
|
||||
rtems_message_queue_broadcast: no waiting tasks 14
|
||||
rtems_message_queue_broadcast: task readied -- preempts caller 39
|
||||
*** END OF TEST 22 ***
|
||||
|
||||
*** TIME TEST 23 ***
|
||||
rtems_timer_create 8
|
||||
rtems_timer_fire_after: inactive 12
|
||||
rtems_timer_fire_after: active 12
|
||||
rtems_timer_cancel: active 9
|
||||
rtems_timer_cancel: inactive 8
|
||||
rtems_timer_reset: inactive 14
|
||||
rtems_timer_reset: active 15
|
||||
rtems_timer_fire_when: inactive 21
|
||||
rtems_timer_fire_when: active 21
|
||||
rtems_timer_delete: active 12
|
||||
rtems_timer_delete: inactive 11
|
||||
rtems_task_wake_when 35
|
||||
*** END OF TEST 23 ***
|
||||
|
||||
*** TIME TEST 24 ***
|
||||
rtems_task_wake_after: yield -- returns to caller 3
|
||||
rtems_task_wake_after: yields -- preempts caller 18
|
||||
*** END OF TEST 24 ***
|
||||
|
||||
*** TIME TEST 25 ***
|
||||
rtems_clock_tick 7
|
||||
*** END OF TEST 25 ***
|
||||
|
||||
*** TIME TEST 26 ***
|
||||
_ISR_Disable 1
|
||||
_ISR_Flash 0
|
||||
_ISR_Enable 0
|
||||
_Thread_Disable_dispatch 1
|
||||
_Thread_Enable_dispatch 3
|
||||
_Thread_Set_state 7
|
||||
_Thread_Disptach (NO FP) 16
|
||||
context switch: no floating point contexts 12
|
||||
context switch: self 2
|
||||
context switch: to another task 1
|
||||
fp context switch: restore 1st FP task 14
|
||||
fp context switch: save idle, restore initialized 3
|
||||
fp context switch: save idle, restore idle 13
|
||||
fp context switch: save initialized, restore initialized 2
|
||||
_Thread_Resume 7
|
||||
_Thread_Unblock 6
|
||||
_Thread_Ready 5
|
||||
_Thread_Get 1
|
||||
_Semaphore_Get 1
|
||||
_Thread_Get: invalid id 0
|
||||
*** END OF TEST 26 ***
|
||||
|
||||
*** TIME TEST 27 ***
|
||||
interrupt entry overhead: returns to interrupted task 3
|
||||
interrupt exit overhead: returns to interrupted task 3
|
||||
interrupt entry overhead: returns to nested interrupt 2
|
||||
interrupt exit overhead: returns to nested interrupt 2
|
||||
interrupt entry overhead: returns to preempting task 4
|
||||
interrupt exit overhead: returns to preempting task 20
|
||||
*** END OF TEST 27 ***
|
||||
|
||||
*** TIME TEST 28 ***
|
||||
rtems_port_create 12
|
||||
rtems_port_external_to_internal 5
|
||||
rtems_port_internal_to_external 6
|
||||
rtems_port_delete 12
|
||||
*** END OF TEST 28 ***
|
||||
|
||||
*** TIME TEST 29 ***
|
||||
rtems_rate_monotonic_create 13
|
||||
rtems_rate_monotonic_period: initiate period -- returns to caller 20
|
||||
rtems_rate_monotonic_period: obtain status 10
|
||||
rtems_rate_monotonic_cancel 13
|
||||
rtems_rate_monotonic_delete: inactive 17
|
||||
rtems_rate_monotonic_delete: active 16
|
||||
rtems_rate_monotonic_period: conclude periods -- caller blocks 24
|
||||
*** END OF TEST 29 ***
|
||||
|
||||
*** TIME CHECKER ***
|
||||
Units may not be in microseconds for this test!!!
|
||||
0 100000
|
||||
Total time = 0
|
||||
Average time = 0
|
||||
NULL timer stopped at 0
|
||||
LOOP (1000) timer stopped at 188
|
||||
LOOP (10000) timer stopped at 1875
|
||||
LOOP (50000) timer stopped at 9375
|
||||
LOOP (100000) timer stopped at 18750
|
||||
*** END OF TIME CHECKER ***
|
||||
|
||||
*** TIME TEST OVERHEAD ***
|
||||
rtems_initialize_executive 0
|
||||
rtems_shutdown_executive 0
|
||||
rtems_task_create 0
|
||||
rtems_task_ident 0
|
||||
rtems_task_start 0
|
||||
rtems_task_restart 0
|
||||
rtems_task_delete 0
|
||||
rtems_task_suspend 0
|
||||
rtems_task_resume 0
|
||||
rtems_task_set_priority 0
|
||||
rtems_task_mode 0
|
||||
rtems_task_get_note 0
|
||||
rtems_task_set_note 0
|
||||
rtems_task_wake_when 1
|
||||
rtems_task_wake_after 0
|
||||
rtems_interrupt_catch 0
|
||||
rtems_clock_get 1
|
||||
rtems_clock_set 1
|
||||
rtems_clock_tick 0
|
||||
rtems_timer_create 0
|
||||
rtems_timer_delete 0
|
||||
rtems_timer_ident 0
|
||||
rtems_timer_fire_after 1
|
||||
rtems_timer_fire_when 1
|
||||
rtems_timer_reset 0
|
||||
rtems_timer_cancel 0
|
||||
rtems_semaphore_create 0
|
||||
rtems_semaphore_delete 0
|
||||
rtems_semaphore_ident 0
|
||||
rtems_semaphore_obtain 0
|
||||
rtems_semaphore_release 0
|
||||
rtems_message_queue_create 0
|
||||
rtems_message_queue_ident 0
|
||||
rtems_message_queue_delete 0
|
||||
rtems_message_queue_send 0
|
||||
rtems_message_queue_urgent 0
|
||||
rtems_message_queue_broadcast 0
|
||||
rtems_message_queue_receive 0
|
||||
rtems_message_queue_flush 0
|
||||
rtems_event_send 0
|
||||
rtems_event_receive 0
|
||||
rtems_signal_catch 0
|
||||
rtems_signal_send 0
|
||||
rtems_partition_create 0
|
||||
rtems_partition_ident 0
|
||||
rtems_partition_delete 0
|
||||
rtems_partition_get_buffer 0
|
||||
rtems_partition_return_buffer 0
|
||||
rtems_region_create 0
|
||||
rtems_region_ident 0
|
||||
rtems_region_delete 0
|
||||
rtems_region_get_segment 0
|
||||
rtems_region_return_segment 0
|
||||
rtems_port_create 0
|
||||
rtems_port_ident 0
|
||||
rtems_port_delete 0
|
||||
rtems_port_external_to_internal 0
|
||||
rtems_port_internal_to_external 0
|
||||
rtems_io_initialize 0
|
||||
rtems_io_open 0
|
||||
rtems_io_close 0
|
||||
rtems_io_read 0
|
||||
rtems_io_write 0
|
||||
rtems_io_control 0
|
||||
rtems_fatal_error_occurred 0
|
||||
rtems_rate_monotonic_create 0
|
||||
rtems_rate_monotonic_ident 0
|
||||
rtems_rate_monotonic_delete 0
|
||||
rtems_rate_monotonic_cancel 0
|
||||
rtems_rate_monotonic_period 0
|
||||
rtems_multiprocessing_announce 0
|
||||
*** END OF TIME OVERHEAD ***
|
||||
Reference in New Issue
Block a user