📄 arch.h
字号:
/**************************************************************************** * nuttx/arch.h * * Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * 3. Neither the name NuttX nor the names of its contributors may be * used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************/#ifndef __ARCH_H#define __ARCH_H/**************************************************************************** * Included Files ****************************************************************************/#include <nuttx/config.h>#include <sys/types.h>#include <sched.h>#include <arch/arch.h>/**************************************************************************** * Definitions ****************************************************************************//**************************************************************************** * Public Types ****************************************************************************/typedef CODE void (*sig_deliver_t)(FAR _TCB *tcb);/**************************************************************************** * Public Variables ****************************************************************************//**************************************************************************** * Public Function Prototypes ****************************************************************************/#ifdef __cplusplus#define EXTERN extern "C"extern "C" {#else#define EXTERN extern#endif/**************************************************************************** * These are standard interfaces that must be exported to the * scheduler from architecture-specific code. ****************************************************************************//**************************************************************************** * Name: up_initialize * * Description: * up_initialize will be called once during OS * initialization after the basic OS services have been * initialized. The architecture specific details of * initializing the OS will be handled here. Such things as * setting up interrupt service routines, starting the * clock, and registering device drivers are some of the * things that are different for each processor and hardware * platform. * * up_initialize is called after the OS initialized but * before the init process has been started and before the * libraries have been initialized. OS services and driver * services are available. * ****************************************************************************/EXTERN void up_initialize(void);/**************************************************************************** * Name: up_idle * * Description: * up_idle() is the logic that will be executed * when their is no other ready-to-run task. This is processor * idle time and will continue until some interrupt occurs to * cause a context switch from the idle task. * * Processing in this state may be processor-specific. e.g., * this is where power management operations might be performed. * ****************************************************************************/EXTERN void up_idle(void);/**************************************************************************** * Name: up_initial_state * * Description: * A new thread is being started and a new TCB * has been created. This function is called to initialize * the processor specific portions of the new TCB. * * This function must setup the intial architecture registers * and/or stack so that execution will begin at tcb->start * on the next context switch. * ****************************************************************************/EXTERN void up_initial_state(FAR _TCB *tcb);/**************************************************************************** * Name: up_create_stack * * Description: * Allocate a stack for a new thread and setup * up stack-related information in the TCB. * * The following TCB fields must be initialized: * adj_stack_size: Stack size after adjustment for hardware, * processor, etc. This value is retained only for debug * purposes. * stack_alloc_ptr: Pointer to allocated stack * adj_stack_ptr: Adjusted stack_alloc_ptr for HW. The * initial value of the stack pointer. * * Inputs: * tcb: The TCB of new task * stack_size: The requested stack size. At least this much * must be allocated. * ****************************************************************************/#ifndef CONFIG_CUSTOM_STACKEXTERN STATUS up_create_stack(FAR _TCB *tcb, size_t stack_size);#endif/**************************************************************************** * Name: up_use_stack * * Description: * Setup up stack-related information in the TCB * using pre-allocated stack memory * * The following TCB fields must be initialized: * adj_stack_size: Stack size after adjustment for hardware, * processor, etc. This value is retained only for debug * purposes. * stack_alloc_ptr: Pointer to allocated stack * adj_stack_ptr: Adjusted stack_alloc_ptr for HW. The * initial value of the stack pointer. * * Inputs: * tcb: The TCB of new task * stack_size: The allocated stack size. * ****************************************************************************/#ifndef CONFIG_CUSTOM_STACKEXTERN STATUS up_use_stack(FAR _TCB *tcb, FAR void *stack, size_t stack_size);#endif/**************************************************************************** * Name: up_release_stack * * Description: * A task has been stopped. Free all stack * related resources retained int the defunct TCB. * ****************************************************************************/#ifndef CONFIG_CUSTOM_STACKEXTERN void up_release_stack(FAR _TCB *dtcb);#endif/**************************************************************************** * Name: up_unblock_task * * Description: * A task is currently in an inactive task list * but has been prepped to execute. Move the TCB to the * ready-to-run list, restore its context, and start execution. * * This function is called only from the NuttX scheduling * logic. Interrupts will always be disabled when this * function is called. * * Inputs: * tcb: Refers to the tcb to be unblocked. This tcb is * in one of the waiting tasks lists. It must be moved to * the ready-to-run list and, if it is the highest priority * ready to run taks, executed. * ****************************************************************************/EXTERN void up_unblock_task(FAR _TCB *tcb);/**************************************************************************** * Name: up_block_task * * Description: * The currently executing task at the head of * the ready to run list must be stopped. Save its context * and move it to the inactive list specified by task_state. * * This function is called only from the NuttX scheduling * logic. Interrupts will always be disabled when this * function is called. * * Inputs: * tcb: Refers to a task in the ready-to-run list (normally * the task at the the head of the list). It most be * stopped, its context saved and moved into one of the * waiting task lists. It it was the task at the head * of the ready-to-run list, then a context to the new * ready to run task must be performed. * task_state: Specifies which waiting task list should be * hold the blocked task TCB. * ****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -