⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hal-architecture-characterization.html

📁 ecos 文档
💻 HTML
📖 第 1 页 / 共 2 页
字号:
></TABLE
><P
>It may be necessary under some circumstances for the HAL to execute
code in the kernel idle thread's loop. An example might be to execute
a processor halt instruction. This macro provides a portable way of
doing this. The argument is a copy of the idle thread's loop counter,
and may be used to trigger actions at longer intervals than every
loop.</P
></DIV
><DIV
CLASS="SECTION"
><H2
CLASS="SECTION"
><A
NAME="AEN7851">Reorder barrier</H2
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>HAL_REORDER_BARRIER()</PRE
></TD
></TR
></TABLE
><P
>When optimizing the compiler can reorder code. In some parts of
multi-threaded systems, where the order of actions is vital, this can
sometimes cause problems. This macro may be inserted into places where
reordering should not happen and prevents code being migrated across
it by the compiler optimizer. It should be placed between statements
that must be executed in the order written in the code.</P
></DIV
><DIV
CLASS="SECTION"
><H2
CLASS="SECTION"
><A
NAME="AEN7855">Breakpoint support</H2
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>HAL_BREAKPOINT( label )
HAL_BREAKINST
HAL_BREAKINST_SIZE</PRE
></TD
></TR
></TABLE
><P
>These macros provide support for breakpoints.</P
><P
><TT
CLASS="FUNCTION"
>HAL_BREAKPOINT()</TT
> executes a breakpoint
instruction. The label is defined at the breakpoint instruction so
that exception code can detect which breakpoint was executed.</P
><P
><TT
CLASS="LITERAL"
>HAL_BREAKINST</TT
> contains the breakpoint instruction
code as an integer value. <TT
CLASS="LITERAL"
>HAL_BREAKINST_SIZE</TT
> is
the size of that breakpoint instruction in bytes. Together these
may be used to place a breakpoint in any code.</P
></DIV
><DIV
CLASS="SECTION"
><H2
CLASS="SECTION"
><A
NAME="AEN7864">GDB support</H2
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>HAL_THREAD_GET_SAVED_REGISTERS( sp, regs )
HAL_GET_GDB_REGISTERS( regval, regs )
HAL_SET_GDB_REGISTERS( regs, regval )</PRE
></TD
></TR
></TABLE
><P
>These macros provide support for interfacing GDB to the HAL.</P
><P
><TT
CLASS="FUNCTION"
>HAL_THREAD_GET_SAVED_REGISTERS()</TT
> extracts a
pointer to a <SPAN
CLASS="STRUCTNAME"
>HAL_SavedRegisters</SPAN
> structure
from a stack pointer value. The stack pointer passed in should be the
value saved by the thread context macros. The macro will assign a
pointer to the <SPAN
CLASS="STRUCTNAME"
>HAL_SavedRegisters</SPAN
> structure
to the variable passed as the second argument.</P
><P
><TT
CLASS="FUNCTION"
>HAL_GET_GDB_REGISTERS()</TT
> translates a register
state as saved by the HAL and into a register dump in the format
expected by GDB. It takes a pointer to a
<SPAN
CLASS="STRUCTNAME"
>HAL_SavedRegisters</SPAN
> structure in the
<TT
CLASS="PARAMETER"
><I
>regs</I
></TT
> argument and a pointer to the memory to
contain the GDB register dump in the <TT
CLASS="PARAMETER"
><I
>regval</I
></TT
>
argument.</P
><P
><TT
CLASS="FUNCTION"
>HAL_SET_GDB_REGISTERS()</TT
> translates a GDB format
register dump into a the format expected by the HAL.  It takes a
pointer to the memory containing the GDB register dump in the
<TT
CLASS="PARAMETER"
><I
>regval</I
></TT
> argument and a pointer to a
<SPAN
CLASS="STRUCTNAME"
>HAL_SavedRegisters</SPAN
> structure
in the <TT
CLASS="PARAMETER"
><I
>regs</I
></TT
> argument.</P
></DIV
><DIV
CLASS="SECTION"
><H2
CLASS="SECTION"
><A
NAME="AEN7882">Setjmp and longjmp support</H2
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>CYGARC_JMP_BUF_SIZE
hal_jmp_buf[CYGARC_JMP_BUF_SIZE]
hal_setjmp( hal_jmp_buf env )
hal_longjmp( hal_jmp_buf env, int val )</PRE
></TD
></TR
></TABLE
><P
>These functions provide support for the C
<TT
CLASS="FUNCTION"
>setjmp()</TT
> and <TT
CLASS="FUNCTION"
>longjmp()</TT
>
functions.  Refer to the C library for further information.</P
></DIV
><DIV
CLASS="SECTION"
><H2
CLASS="SECTION"
><A
NAME="AEN7888">Stack Sizes</H2
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>CYGNUM_HAL_STACK_SIZE_MINIMUM
CYGNUM_HAL_STACK_SIZE_TYPICAL</PRE
></TD
></TR
></TABLE
><P
>The values of these macros define the minimum and typical sizes of
thread stacks.</P
><P
><TT
CLASS="LITERAL"
>CYGNUM_HAL_STACK_SIZE_MINIMUM</TT
> defines the minimum
size of a thread stack. This is enough for the thread to function
correctly within eCos and allows it to take interrupts and context
switches. There should also be enough space for a simple thread entry
function to execute and call basic kernel operations on objects like
mutexes and semaphores. However there will not be enough room for much
more than this. When creating stacks for their own threads,
applications should determine the stack usage needed for application
purposes and then add
<TT
CLASS="LITERAL"
>CYGNUM_HAL_STACK_SIZE_MINIMUM</TT
>.</P
><P
><TT
CLASS="LITERAL"
>CYGNUM_HAL_STACK_SIZE_TYPICAL</TT
> is a reasonable increment over
<TT
CLASS="LITERAL"
>CYGNUM_HAL_STACK_SIZE_MINIMUM</TT
>, usually about 1kB. This should be
adequate for most modest thread needs. Only threads that need to
define significant amounts of local data, or have very deep call trees
should need to use a larger stack size.</P
></DIV
><DIV
CLASS="SECTION"
><H2
CLASS="SECTION"
><A
NAME="AEN7898">Address Translation</H2
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>CYGARC_CACHED_ADDRESS(addr)
CYGARC_UNCACHED_ADDRESS(addr)
CYGARC_PHYSICAL_ADDRESS(addr)</PRE
></TD
></TR
></TABLE
><P
>These macros provide address translation between different views of
memory. In many architectures a given memory location may be visible
at different addresses in both cached and uncached forms. It is also
possible that the MMU or some other address translation unit in the
CPU presents memory to the program at a different virtual address to
its physical address on the bus.</P
><P
><TT
CLASS="FUNCTION"
>CYGARC_CACHED_ADDRESS()</TT
> translates the given
address to its location in cached memory. This is typically where the
application will access the memory.</P
><P
><TT
CLASS="FUNCTION"
>CYGARC_UNCACHED_ADDRESS()</TT
> translates the given
address to its location in uncached memory. This is typically where
device drivers will access the memory to avoid cache problems. It may
additionally be necessary for the cache to be flushed before the
contents of this location is fully valid.</P
><P
><TT
CLASS="FUNCTION"
>CYGARC_PHYSICAL_ADDRESS()</TT
> translates the given
address to its location in the physical address space. This is
typically the address that needs to be passed to device hardware such
as a DMA engine, ethernet device or PCI bus bridge. The physical
address may not be directly accessible to the program, it may be
re-mapped by address translation.</P
></DIV
><DIV
CLASS="SECTION"
><H2
CLASS="SECTION"
><A
NAME="AEN7908">Global Pointer</H2
><TABLE
BORDER="5"
BGCOLOR="#E0E0F0"
WIDTH="70%"
><TR
><TD
><PRE
CLASS="PROGRAMLISTING"
>CYGARC_HAL_SAVE_GP()
CYGARC_HAL_RESTORE_GP()</PRE
></TD
></TR
></TABLE
><P
>These macros insert code to save and restore any global data pointer
that the ABI uses. These are necessary when switching context between
two eCos instances - for example between an eCos application and
RedBoot.</P
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="hal-interfaces.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="ecos-ref.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="hal-interrupt-handling.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>HAL Interfaces</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="hal-interfaces.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Interrupt Handling</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -