六、contiki程序加载器
contiki程序加载器是一个用于加载和启动程序的抽象接口。
Data Structures
struct dsc
//DSC程序描述结构。
Modules
The Contiki ELF loader
ContikiELF加载器将ELF(可执行链接格式)对象文件链接、重新定位并加载到正在运行的Contiki系统中。
Files
file loader.h
默认定义和错误值的contiki程序加载。
Defines
#define DSC(dscname, description, prgname, process, icon) CLIF const struct dsc dscname = {description, prgname}
Instantiating macro for the DSC structure.
//为DSC结构实例化宏。
#define LOADER_OK 0
No error.
#define LOADER_ERR_READ 1
Read error. //读取错误
#define LOADER_ERR_HDR 2
Header error. //标头错误
#define LOADER_ERR_OS 3
Wrong OS. //操作系统错误
#define LOADER_ERR_FMT 4
Data format error. //数据格式错误
#define LOADER_ERR_MEM 5
Not enough memory. //内存空间不够
#define LOADER_ERR_OPEN 6
Could not open file. //无法打开文件
#define LOADER_ERR_ARCH 7
Wrong architecture. //建筑错误
#define LOADER_ERR_VERSION 8
Wrong OS version. //错误操作系统版本
#define LOADER_ERR_NOLOADER 9
Program loading not supported. //不支持程序加载
#define LOADER_LOAD(name, arg) LOADER_ERR_NOLOADER
Load and execute a program. //加载并执行项目
#define LOADER_UNLOAD()
Unload a program from memory. //从内存中卸载
#define LOADER_LOAD_DSC(name) NULL
Load a DSC (program description). //加载DSC
#define LOADER_UNLOAD_DSC(dsc)
Unload a DSC (program description). //卸载DSC
Detailed Description
contiki程序加载器是一个用于加载和启动程序的抽象接口。
程序描述结构
contiki DSC结构用于描述程序。
它包括描述程序的字符串、磁盘上程序文件的名称(或指向不支持磁盘的系统的程序初始化函数的指针)、位图图标和同一图标的文本版本。
DSC被保存到一个文件中,该文件可以由诸如“目录”应用程序之类的程序加载,该程序读取磁盘上的所有DSC文件,并在一个窗口中显示图标和描述。
Define Documentation
#define DSC ( dscname,
description,
prgname,
process,
icon
) CLIF const struct dsc dscname = {description, prgname}
为DSC结构实例化宏。
Parameters:
dscname 包含DSC的C变量的名称。
description 描述程序的单行文本。
prgname 磁盘上程序的名称。
initfunc A pointer to the initialization function of the program.
icon 指向CTK图标的指针。
#define LOADER_LOAD ( name,
arg
) LOADER_ERR_NOLOADER
加载并执行一个程序。
此宏用于加载和执行程序,需要依赖于体系结构的代码的支持。实际的程序加载是由特定于体系结构的函数完成的。
Note:
加载LOADER_LOAD()的程序必须调用LOADER_UNLOAD()函数来卸载自己。
Parameters:
name 要加载的程序的名称。
arg 传递给程序的指针参数。
Returns:
加载程序错误,如果加载成功,则为LOADER_OK。
#define LOADER_LOAD_DSC ( name ) NULL
加载一个DSC(程序描述)。
加载一个DSC(程序描述)到内存中,并返回一个指向DSC的指针。
Returns:
指向DSC的指针,如果无法加载,则为空。
七、多线程库
事件驱动的Contiki内核本身并不提供多线程,相反,抢占式多线程被实现为一个库,可以选择地与应用程序链接。
Modules
架构支持多线程
contiki多线程库需要一些架构特定的支持来建立和交换栈。
Defines
#define MT_OK 1
No error.
Functions
void mt_init (void)
Initializes the multithreading library.
void mt_remove (void)
Uninstalls (卸载)library and cleans up.
void mt_start (struct mt_thread *thread, void(*function)(void *), void *data)
Starts a multithreading thread.
void mt_exec (struct mt_thread *thread)
Execute(执行) parts of a thread(线程).
void mt_yield (void)
Voluntarily give up the processor. //yield 放弃
void mt_exit (void)
Exit a thread.
void mt_stop (struct mt_thread *thread)
Stop a thread.
Detailed Description
事件驱动的contiki内核本身并不提供多线程,相反,先发制人的多线程是作为一个库实现的,可以选择与应用程序链接。
该库由两个部分组成:一个独立于平台的部分,它适用于所有运行Contiki的平台,另一个特定于平台的部分,必须针对多线程库应该运行的平台具体实现。
Function Documentation
void mt_exec ( struct mt_thread * thread )
执行线程的各个部分。
这个函数被一个康智奇进程调用并运行一个线程。在线程被放弃或被抢占之前,函数不会返回。
Note:
必须首先使用mt_init()函数初始化线程库。
Parameters:
指向必须由调用者分配的结构mt_thread块的指针。
void mt_exit ( void )
Exit a thread.
从执行线程中调用此函数以退出线程。函数永远不会返回。
void mt_start ( struct mt_thread * thread,
void(*)(void *) function,
void * data
)
Starts a multithreading thread.
Parameters:
thread 指向mt_thread结构的指针,该结构必须事先由调用者分配。
function 指向要设置的线程的入口函数的指针。将被传递给入口函数的指针。
void mt_stop ( struct mt_thread * thread )
Stop a thread.
为了清理一个线程,这个函数被一个contiki进程调用。然后,调用者可以丢弃struct mt_thread块。
Parameters:
thread 指向必须由调用者分配的结构mt_thread块的指针。
void mt_yield ( void )
自动放弃处理器。
这个函数由正在运行的线程调用,以放弃对CPU的控制。