contiki学习笔记(六)contiki程序加载器和多线程库

本文详细介绍了Contiki系统中的程序加载器和多线程库功能。程序加载器作为抽象接口,负责加载和启动程序,处理各种加载错误。多线程库则实现了抢占式多线程,允许应用程序选择性地链接,分为平台独立和平台特定两部分。
摘要由CSDN通过智能技术生成

六、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的控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值