mirror of https://github.com/ARMmbed/mbed-os.git
168 lines
4.1 KiB
C
168 lines
4.1 KiB
C
/* mbed Microcontroller Library
|
|
* Copyright (c) 2018-2018 ARM Limited
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
#ifndef MBED_BOOT_H
|
|
#define MBED_BOOT_H
|
|
|
|
#include "mbed_toolchain.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "mbed_rtx.h"
|
|
|
|
/**
|
|
* \defgroup boot Boot sequence
|
|
* Boot sequence overview
|
|
*
|
|
* 1. Setup target
|
|
* - Configure clocks
|
|
* - Configure watchdog (if applicable)
|
|
* - Turn on RAM (if applicable)
|
|
* - Jump to setup toolchain
|
|
* 2. Setup toolchain
|
|
* - Initialize RAM
|
|
* - Initialize standard library
|
|
* - Call mbed_init
|
|
* - jump to start rtos
|
|
* 3. Start RTOS
|
|
* - Create main thread
|
|
* - Start scheduler
|
|
* - main thread calls start mbed
|
|
* 4. Start mbed
|
|
* - Call mbed_main
|
|
* - Call main
|
|
*
|
|
* @{
|
|
*/
|
|
|
|
/* Heap limits - only used if set */
|
|
extern unsigned char *mbed_heap_start;
|
|
extern uint32_t mbed_heap_size;
|
|
|
|
/* Stack limits */
|
|
extern unsigned char *mbed_stack_isr_start;
|
|
extern uint32_t mbed_stack_isr_size;
|
|
|
|
/**
|
|
* Perform low level init of mbed
|
|
*
|
|
* The toolchain calls this function as part of the boot
|
|
* sequence. This function does the following:
|
|
* - Sets up NVIC so interrupts can be used
|
|
* - Calls into the vendor SDK so it can be used
|
|
* - Initializes the RTOS so it can be used
|
|
*
|
|
* Preconditions:
|
|
* - Target is initialized
|
|
* - Ram is initialized
|
|
* - value set for mbed_heap_start
|
|
* - value set for mbed_heap_size
|
|
* - value set for mbed_stack_isr_start
|
|
* - value set for mbed_stack_isr_size
|
|
*
|
|
* The following events must not have happened yet:
|
|
* - global constructors must not be called yet
|
|
*
|
|
*/
|
|
void mbed_init(void);
|
|
|
|
/**
|
|
* Start the main mbed application
|
|
*
|
|
* This is the last stage of the boot sequence. This function must be
|
|
* called only after the RTOS has been fully initialized.
|
|
* This function does the following:
|
|
* - Initialize the toolchain
|
|
* - Run mbed_main
|
|
* - Run main
|
|
*
|
|
* Preconditions:
|
|
* - The RTOS has been started by a call to mbed_rtos_start
|
|
*
|
|
*/
|
|
void mbed_start(void);
|
|
|
|
/**
|
|
* Perform low level initialization of the RTOS
|
|
*
|
|
* Set the RTOS to a known state but don't start the scheduler. After
|
|
* the RTOS has been initialized it is safe to create RTOS primitives
|
|
* for file locks or other purposes.
|
|
*
|
|
* Preconditions:
|
|
* - Ram is initialized
|
|
* - NVIC is setup
|
|
* - Vendor SDK must be initialized by a call to mbed_sdk_init
|
|
*/
|
|
void mbed_rtos_init(void);
|
|
|
|
/**
|
|
* Start the RTOS
|
|
*
|
|
* Start the RTOS scheduler and call mbed_start on the
|
|
* main thread. This function does not return.
|
|
*
|
|
* Preconditions:
|
|
* - RTOS has been initialized by a call to mbed_rtos_init
|
|
*/
|
|
MBED_NORETURN void mbed_rtos_start(void);
|
|
|
|
/**
|
|
* Perform toolchain specific initialization
|
|
*
|
|
* Initialize locks if this has not been done already
|
|
* and call global C++ constructors.
|
|
*
|
|
* Preconditions:
|
|
* - The RTOS has been started by a call to mbed_rtos_start
|
|
*/
|
|
void mbed_toolchain_init(void);
|
|
|
|
/**
|
|
* SDK hook for running code before ctors or OS
|
|
*
|
|
* This is a weak function which can be overridden by a target's
|
|
* SDK to allow code to run after ram is initialized but before
|
|
* the OS has been started or constructors have run.
|
|
*
|
|
* Preconditions:
|
|
* - Ram is initialized
|
|
* - NVIC is setup
|
|
*/
|
|
void mbed_sdk_init(void);
|
|
|
|
/**
|
|
* Application hook for running code before main
|
|
*
|
|
* This is a weak function which can be overridden by an application
|
|
* to allow code to run before main is called.
|
|
*
|
|
* Preconditions:
|
|
* - The RTOS has been started by a call to mbed_rtos_start
|
|
* - The toolchain has been initialized by a call to mbed_toolchain_init
|
|
*/
|
|
void mbed_main(void);
|
|
|
|
/**@}*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* MBED_BOOT_H */
|