git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@715 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
gdisirio 2009-02-04 15:18:37 +00:00
parent 36deb792c1
commit e4245075be
4 changed files with 1640 additions and 202 deletions

File diff suppressed because it is too large Load Diff

View File

@ -21,6 +21,7 @@
* @page articles Articles * @page articles Articles
* @{ * @{
* ChibiOS/RT Articles and Code Examples: * ChibiOS/RT Articles and Code Examples:
* - @subpage article_portguide
* - @subpage article_atomic * - @subpage article_atomic
* - @subpage article_saveram * - @subpage article_saveram
* - @subpage article_interrupts * - @subpage article_interrupts

114
docs/src/portguide.dox Normal file
View File

@ -0,0 +1,114 @@
/*
ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
This file is part of ChibiOS/RT.
ChibiOS/RT is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS/RT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @page article_portguide Porting ChibiOS/RT for Dummies
* @{
* Porting the operating system on a new platform is one of the most common
* tasks. The difficulty can range from easy to very difficult depending
* on several factors.<br>
* We can divide in problem in several classes of progressively increasing
* difficulty:
* - @ref port_board
* - @ref port_family
* - @ref port_chip
* - @ref port_core
* .
* Another kind of port type is porting to another compiler and this is an
* added complexity level on the above classes. The kernel itself is portable
* but the port-specific code usually contains compiler specific extensions to
* the C language and the asm files syntax is almost never compatible.
*
* @section port_board Porting the OS to a new board
* This is the easiest port type, the scenario is that the specific
* microcontroller is already supported and a demo exists. This scenario also
* applies when porting the OS on a custom hardware using a supported
* microcontroller. This task can be easily performed with the following
* steps:
* -# Create a new directory under the ChibiOS/RT installation directory:
* <code>./projects/<i>@<my_app_name@></i></code>
* -# Copy the microcontroller demo code under the newly created directory.
* -# Customize the demo. Usually there are only four files that need to
* be modified:
* - @p board.h This file contains the I/O pins setup for the uC, it
* may also contain other board-dependent settings, as example, clock and
* PLL settings. Customize this file depending on your target hardware.
* - @p board.c This file contains the initialization code, it is possible
* you just need to customize @p board.h and not this file. If you have
* some hardware specific initialization code then put it here.
* - @p Makefile You may edit this file in order to remove the test related
* sources and/or add you application source files.
* - @p main.c It contains the demo simple code, clean it and write your
* own @p main() function here, use this file just as a template.
* -# Compile your application and debug.
* .
* @section port_family Porting the OS to a closely related microcontroller
* In this scenario all the above steps are required but an analysis must
* be performed to evaluate the differences between from the supported micro
* and the target micro. Often the micros just differ for the memory area
* sizes and a change to the linker script is enough (the file is usually
* named @p ch.ld). Chips having more or less peripherals, everything else
* being the same or compatible are not a problem also as long the timer and
* the serial peripherals used by the port do not change.<br>
* If there are differences in the internal peripherals, as example non
* compatible interrupt controllers (this happens in the LPC2000 family)
* or differences in UARTS, timers etc then the port falls in the following
* category.
*
* @section port_chip Porting the OS to another microcontroller using the same core
* This kind of port is required when a target microcontroller has the same
* core (a common example: ARM7) of a supported microcontroller but has
* differences in the internal peripherals.<br>
* If this is your case proceed as follow:
* -# Create a new directory under @p ./ports and name it as follow:
* <code><i>@<arch@></i>-<i>@<chip@></i>[-<i>@<compiler@></i>]</code>
* The compiler part can be omitted if the port uses GCC (our default).
* Examples: @p ARM7-LPC236x or @p ARMCM3-STM32F103-IAR
* -# Copy into the newly created directory the most closely related existing
* chip port.
* -# Rename the files in order to reflect the name of the new chip.
* -# Work out the differences in the drivers.
* -# Edit the documentation file @p port.dox, this is required if you want
* to regenerate this documentation including your work.
* .
* Usually this kind of port just requires a serial driver (and those are very
* similar each other) and some code for the interrupt controller (this one
* can be part of the core port, as example the Cortex-M3 has this as standard
* part of the core).<br>
* When the chip port is completed created your application as seen in the
* previous sections.
*
* @section port_core Porting the OS to a whole new architecture
* This is the hardest scenario, the time required by core ports depends
* strongly by the target architecture complexity and the level of support you
* need for the architecture specific features.<br>
* As a reference, the MSP430 port took me 2 hours and it worked at the first
* run, it can be a reference for simple architectures, the ARM Cortex-M3 was
* painful instead, the architecture enforces you to implement things in a very
* specific way and I spent 2 week to go through all the documentation and
* figure out the correct way to implement the port (you can see that the
* preemption context switch is done in a very peculiar way because the
* exceptions architecture).<br>
* One thing is sure, port an OS to a new architecture is not an easy task and
* if you have the required experience for such an effort then probably you
* don't need any advice from me. Just follow the directory patterns and fill
* the OS template files, the hardest part is decide the correct and efficient
* way to implement the context switching.
*/
/** @} */

View File

@ -110,6 +110,9 @@ Win32-MinGW - ChibiOS/RT simulator and demo into a WIN32 process,
- Articles and notes previously in the wiki now merged in the general - Articles and notes previously in the wiki now merged in the general
documentation and updated, the wiki entries are obsolete and will be removed. documentation and updated, the wiki entries are obsolete and will be removed.
- New application notes and articles added. - New application notes and articles added.
- Removed the inclusion graph from the documentation because the little
info they add and the size of all the images. It is possible to configure
Doxygen to have them again (and more graph types).
*** 1.0.1 *** *** 1.0.1 ***
- FIX: Modified the default value for the STM32 HSI setup it was 1, it should - FIX: Modified the default value for the STM32 HSI setup it was 1, it should