contiki学习笔记(六)contiki程序加载器和多线程库
六、contiki程序加载器
contiki程序加载器是一个用于加载和启动程序的抽象接口。
Data Structures
struct dsc//DSC程序描述结构。
ModulesThe 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 0No error.
#define LOADER_ERR_READ 1Read error. //读取错误
#define LOADER_ERR_HDR 2Header error. //标头错误
#define LOADER_ERR_OS 3Wrong OS. //操作系统错误
#define LOADER_ERR_FMT 4Data format error. //数据格式错误
#define LOADER_ERR_MEM 5Not enough memory. //内存空间不够
#define LOADER_ERR_OPEN 6Could not open file. //无法打开文件
#define LOADER_ERR_ARCH 7Wrong architecture. //建筑错误
#define LOADER_ERR_VERSION 8Wrong OS version. //错误操作系统版本
#define LOADER_ERR_NOLOADER 9Program loading not supported. //不支持程序加载
#define LOADER_LOAD(name, arg) LOADER_ERR_NOLOADERLoad and execute a program. //加载并执行项目
#define LOADER_UNLOAD()Unload a program from memory. //从内存中卸载
#define LOADER_LOAD_DSC(name) NULLLoad 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 1No 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的控制。
contiki学习笔记(六)contiki程序加载器和多线程库相关推荐
- 【OS学习笔记】十 实模式:实现一个程序加载器-程序加载器如何将用户程序加载到内存并执行
上一篇文章学习了以下内容: 用一种不同的分段方法,从另一个不同的的角度理解处理器的分段内存访问机制 使用循环和条件转移指令来优化主引导扇区代码 点击链接查看上一篇文章:点击链接查看 对于主引导扇区部分 ...
- 计算机系统-程序加载器
本文将实现一个简单的程序加载器,首先要先了解一下实模式下的内存空间分配,这是固定好的 要实现一个程序加载器,需要实现下面4个步骤 1.将用户程序从硬盘中读取到10000处(当然,放到10000-9FF ...
- 操作系统的 (program)loader(程序加载器)
在计算机科学中,加载器(也叫程序加载器)属于操作系统的一部分,用于加载程序(programs)和库(libraries).加载器是执行程序和代码必不可少的组件,正是它负责将程序送入内存,为程序的运行提 ...
- linux程序加载器,Linux 动态连接加载器 ld-linux用法
Linux 动态连接加载器 ld-linux用法 文章作者:网友投稿 发布时间:2009-12-10 16:21:11 来源:网络 ld-linux有两种用法,间接调用和直接调用. 间接调用时,连接器 ...
- 【OpenCV学习笔记之一】图像加载,修改及保存
加载图像(用cv::imread) imread功能是加载图像文件成为一个Mat对象 其中第一个参数表示图像文件名称 第二个参数 表示加载的图像是什么类型 支持常见的三个参数值 IMREAD_UNCH ...
- [OpenCV学习笔记3][图像的加载+修改+显示+保存]
正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...
- 安卓学习笔记---Android仿美团加载数据、小人奔跑进度动画对话框(以及顺丰快递员奔跑效果)
最近要加一个动态的加载功能,类似于美团的效果,这篇文章写的很好,可以借鉴 博客地址: http://blog.csdn.net/jdsjlzx/article/details/43489395 我们都 ...
- 《ArcGIS Engine开发 从入门到精通》学习笔记1 地图的加载与保存。
照着书上敲完了两个主要函数的代码,先mark一下,以备下次偷懒. using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Carto; private void ...
- WMS学习笔记:1.尝试加载WMS
1.首先找一个可用的WMS栅格地图服务:http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi 获取GetCapabilities: http://de ...
最新文章
- Godaddy如何导入导出MSSQL数据库
- 2017-2018-1 20155338 《信息安全系统设计基础》 第四周学习总结
- apache属于哪个公司
- 在线日志文件丢失的恢复(笔记)
- 微信小程序模仿开眼视频app(一)——视频首页、视频详情、分类
- nodejs中path的用法
- Spring 3.2 @ControllerAdvice批注的异常处理
- java学习(148):三个参数的输入流
- Pensando Distributed Services Architecture [Pensando 分布式服务架构] - 翻译
- qt场景中视图QGraphicsView的缩放
- MSN P2P资料转载
- One Millisecond Face alignment with an Ensemble of Regression Trees
- 2021软件测试行业问卷调查报告 20 条思考
- Ipad 连笔记本共享360wifi热点 总是断开 解决方法
- nrcellcu和nrcelldu_华为5G常用MML命令(现场版本)
- ABS系统类最新发表的论文趋势怎么看?
- 分类算法-决策树、随机森林
- 百面机器学习:模型评估
- python 如何识别字符串中的人名 ,如何识别一串拼音字符串以及韵母的提取 (一些方法整理)
- CTF基础知识-Web
热门文章
- PHP极其强大的图片处理库Grafika详细教程(1):图像基本处理
- 软件测试管理工具——禅道(安装、讲解)
- VC6.0(VC++6.0)使用教程(使用VC6.0编写C语言程序)
- 洛谷P1941 飞扬的小鸟
- 对不起,我们公司不招35岁的人
- 【C语言】实现简单的五子棋
- 组播MAC地址和各类IP地址
- [高通SDM450][Android9.0]CTA认证--去除某些应用开机使用定位权限
- [nltk_data] Error loading words: <urlopen error [Errno 11004]
- Python 文件处理