contiki-main.c 文件的进程分析

基本进程的创建实例:

共三部分:创建进程、进程自启动和进程的主体部分

 1 /* 声明一个名为hello_world_process和led_process进程
 2 PROCESS 宏实际上声明一个函数并定义一个进程控制块,
 3 新创建的进程 next 指针指向空,进程名称为“Hello world”和“led”*/
 4 PROCESS(hello_world_process, "Hello world");
 5 PROCESS(led_process, "led");
 6 /* 进程需要自动启动,即当节点启动时启动本进程 */
 7 AUTOSTART_PROCESSES(&led_process,&hello_world_process);
 8
 9 /* hello_world_process进程的主体部分 */
10 PROCESS_THREAD(hello_world_process, ev, data)
11 {
12     /* 所有的进程开始执行前都必须要有这条语句 */
13     PROCESS_BEGIN();
14
15     printf("Hello world :)\n");
16
17     /* 所有的进程结束时都必须要有这条语句 */
18     PROCESS_END();
19 }
20 /*led_process进程的主题部分*/
21 PROCESS_THREAD(led_process, ev, data)
22 {
23   PROCESS_BEGIN();//宏用于辅助保存断点信息 (即行数 ),
24   //欲实现的代码必须放在宏 PROCESS_BEGIN 与 PROCESS_END 之间
25   while(1)
26   {
27     static struct etimer et;
28     etimer_set(&et, CLOCK_SECOND/10);
29     PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
30
31     led_on(0);
32     printf("LED0 ----ON-----\r\n");
33
34     led_off(1);
35     printf("LED1 -----OFF-----\r\n");
36
37     etimer_set(&et, CLOCK_SECOND/10);
38     PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
39
40     led_off(0);
41     printf("LED0 -----OFF-----\r\n");
42     led_on(1);
43     printf("LED1 ----ON-----\r\n");
44
45   }
46    PROCESS_END();//宏用于辅助保存断点信息 (即行数 )
47 }

然后在main函数中:

 1 int main()
 2 {
 3
 4     BoardInit();
 5     DEBUG("BoardInit Done!");
 6     printf("Initialising\r\n");
 7     clock_init();//时钟初始化
 8     process_init();//进程初始化
 9
10     process_start(&etimer_process, NULL);//启动系统进程
11     autostart_start(autostart_processes);//启动用户自启动进程
12     printf("Processes running\r\n");
13     while(1) {
14          do
15         {
16          }
17         while(process_run() > 0);
18         idle_count++;
19     }
20 }        

参考博客:http://blog.csdn.net/ferlansue/article/details/7256964

时间: 2024-10-13 05:17:06

contiki-main.c 文件的进程分析的相关文章

linux用户进程分析

       经过实验3的介绍,我们需要来点实在的,所以将我们理解的流程用于linux系统的分析.换句话说,通过类比的方式去进行描述与理解linux相关的部分.本节的内容很详实,而且也分析了很久,所以长话短说,静静的去感受与理解linux内核代码的实现.当然,我们实验的系统代码很简单而且直接,但是linux内核经过20多年的发展,更有成千上万的开发者共同维护,所以对于代码的书写会更加精练,对于基础相对薄弱的程序员去理解有一些障碍,但是反过来说,更有利于我们语言知识的提高. 如下的介绍方法是对

Android源码分析--system_server进程分析

在上一篇博文中我们进行了有关Zygote进程的分析,我们知道Zygote进程创建了一个重要的进程–system_server进程后就进入了无限循环中,之后Android系统中的重要任务就交给了system_server进程,作为zygote的嫡长子进程,system_server进程的意义非凡,今天我们来分析一下system_server进程. 创建system_server进程 在ZygoteInit中main方法中,通过调用startSystemServer方法开启了system_serve

android init进程分析 基本流程

(懒人最近想起我还有csdn好久没打理了,这个android init躺在我的草稿箱中快5年了,稍微改改发出来吧) android设备上电,引导程序引导进入boot(通常是uboot),加载initramfs.kernel镜像,启动kernel后,进入用户态程序.第一个用户空间程序是init, PID固定是1.在android系统上,init的代码位于/system/core/init下,基本功能有: 管理设备 解析并处理启动脚本init.rc 实时维护这个init.rc中的服务 init进程的

Dump 文件生成与分析

近期两天因为项目的须要,研究了一下Dump文件相关的知识,今天做一个小节(因为研究不久而且第一次写blog,希望网友们看到不要见笑). Dump文件是进程的内存镜像.能够把程序的运行状态通过调试器保存到dump文件里.   Dump文件是用来给驱动程序编写人员调试驱动程序用的,这样的文件必须用专用工具软件打开,比方使用WinDbg打开. 当我们的程序公布出去之后,在客户机上是无法跟踪自己代码的bug的,所以Dump(扩展名是 .dmp)文件对于我们来说特别实用.我们能够通过.dmp文件把出现bu

进程分析之CPU

进程分析之CPU 本文转载自:https://github.com/ColZer/DigAndBuried/blob/master/system/cpu.md 在<进程分析之内存>文中,对系统/进程的内存使用情况进行分析了,本文将从cpu使用情况对进程进行分析:在这之前,先针对cpu比较相关几个概念进行介绍 CPU INFO的阅读以及对基本概念的了解: cpu从硬件到系统层面有三个概念:物理CPU个数.物理核数.逻辑核个数:其中物理CPU的个数即硬件层面实实在在的CPU的个数:现在CPU都为多

Windows下获取Dump文件以及进程下各线程调用栈的方法总结(转)

1. Dump文件的用途 Dump文件, 主要用于诊断一个进程的运行状态,尤其是碰到崩溃(Crash)或者挂起(hang)不响应时,需要分析它的工作状态.  除了平时常见的attach到这个进程, 分析Dump文件就成了一个重要的手段了. 相信一些做软件维护和支持的工程师在这方面深有体会, 比如某天某时,客户说, 呀, 糟糕, 服务器进程挂掉了, 怎么回事? 然后,看看了日志文件,也没有什么可用的信息.  技术支持告诉他, 按某步骤生成一个dump文件来看看...... 2. 如何生成Dump文

设置当前exe执行文件为进程工作目录

设置当前exe执行文件为进程工作目录 两种办法: 1,   API void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext ); 这个函数将文件全名(带路径)分解成路径名,文件名,后缀名. 2, API BOOL PathRemoveFileSpec(           LPTSTR pszPath ); 使用例子: #include <windows.h> #include <

使用django表单,使网页添加上传文件,并分析文件。

开发环境是: apache + python + django+ eclipse(开发环境) 欲达到目的: 在网页上,添加上传文件控件.然后读取csv文件,并分析csv文件. 操作步骤: django 是MVC的设计模式 (模型M,视图V,控制器C) 1.从django的基本模型中,构建自己的模型. 在myforms.py文件中添加如下代码,之后在html显示的表单数据就可以采用这个模型的数据了. from django import forms from django.views.decora

映射文件实现进程通信

发送端 //1.在页面文件中创建一个可共享的文件句柄 //2使用默认安全对象 //3.可读,可写打开打开映射 //4.最大长度的高32位 //5.最大长度的低32位,此为size大小 //6.指定文件映射对象的名字 //return:新建文件映射对象的句柄,0表示出错 HANDLE m_sh = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1000, "yingshe"); if (!m_sh) {