六、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程序加载器和多线程库相关推荐

  1. 【OS学习笔记】十 实模式:实现一个程序加载器-程序加载器如何将用户程序加载到内存并执行

    上一篇文章学习了以下内容: 用一种不同的分段方法,从另一个不同的的角度理解处理器的分段内存访问机制 使用循环和条件转移指令来优化主引导扇区代码 点击链接查看上一篇文章:点击链接查看 对于主引导扇区部分 ...

  2. 计算机系统-程序加载器

    本文将实现一个简单的程序加载器,首先要先了解一下实模式下的内存空间分配,这是固定好的 要实现一个程序加载器,需要实现下面4个步骤 1.将用户程序从硬盘中读取到10000处(当然,放到10000-9FF ...

  3. 操作系统的 (program)loader(程序加载器)

    在计算机科学中,加载器(也叫程序加载器)属于操作系统的一部分,用于加载程序(programs)和库(libraries).加载器是执行程序和代码必不可少的组件,正是它负责将程序送入内存,为程序的运行提 ...

  4. linux程序加载器,Linux 动态连接加载器 ld-linux用法

    Linux 动态连接加载器 ld-linux用法 文章作者:网友投稿 发布时间:2009-12-10 16:21:11 来源:网络 ld-linux有两种用法,间接调用和直接调用. 间接调用时,连接器 ...

  5. 【OpenCV学习笔记之一】图像加载,修改及保存

    加载图像(用cv::imread) imread功能是加载图像文件成为一个Mat对象 其中第一个参数表示图像文件名称 第二个参数 表示加载的图像是什么类型 支持常见的三个参数值 IMREAD_UNCH ...

  6. [OpenCV学习笔记3][图像的加载+修改+显示+保存]

    正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...

  7. 安卓学习笔记---Android仿美团加载数据、小人奔跑进度动画对话框(以及顺丰快递员奔跑效果)

    最近要加一个动态的加载功能,类似于美团的效果,这篇文章写的很好,可以借鉴 博客地址: http://blog.csdn.net/jdsjlzx/article/details/43489395 我们都 ...

  8. 《ArcGIS Engine开发 从入门到精通》学习笔记1 地图的加载与保存。

    照着书上敲完了两个主要函数的代码,先mark一下,以备下次偷懒. using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Carto; private void ...

  9. WMS学习笔记:1.尝试加载WMS

    1.首先找一个可用的WMS栅格地图服务:http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi 获取GetCapabilities: http://de ...

最新文章

  1. Godaddy如何导入导出MSSQL数据库
  2. 2017-2018-1 20155338 《信息安全系统设计基础》 第四周学习总结
  3. apache属于哪个公司
  4. 在线日志文件丢失的恢复(笔记)
  5. 微信小程序模仿开眼视频app(一)——视频首页、视频详情、分类
  6. nodejs中path的用法
  7. Spring 3.2 @ControllerAdvice批注的异常处理
  8. java学习(148):三个参数的输入流
  9. Pensando Distributed Services Architecture [Pensando 分布式服务架构] - 翻译
  10. qt场景中视图QGraphicsView的缩放
  11. MSN P2P资料转载
  12. One Millisecond Face alignment with an Ensemble of Regression Trees
  13. 2021软件测试行业问卷调查报告 20 条思考
  14. Ipad 连笔记本共享360wifi热点 总是断开 解决方法
  15. nrcellcu和nrcelldu_华为5G常用MML命令(现场版本)
  16. ABS系统类最新发表的论文趋势怎么看?
  17. 分类算法-决策树、随机森林
  18. 百面机器学习:模型评估
  19. python 如何识别字符串中的人名 ,如何识别一串拼音字符串以及韵母的提取 (一些方法整理)
  20. CTF基础知识-Web

热门文章

  1. PHP极其强大的图片处理库Grafika详细教程(1):图像基本处理
  2. 软件测试管理工具——禅道(安装、讲解)
  3. VC6.0(VC++6.0)使用教程(使用VC6.0编写C语言程序)
  4. 洛谷P1941 飞扬的小鸟
  5. 对不起,我们公司不招35岁的人
  6. 【C语言】实现简单的五子棋
  7. 组播MAC地址和各类IP地址
  8. [高通SDM450][Android9.0]CTA认证--去除某些应用开机使用定位权限
  9. [nltk_data] Error loading words: <urlopen error [Errno 11004]
  10. Python 文件处理