当前位置: 首页 > news >正文

花店网站建设实训总结微信扫码关注登陆wordpress

花店网站建设实训总结,微信扫码关注登陆wordpress,wordpress子分类模板,站酷网设计素材嵌入式OS入门笔记-以RTX为案例#xff1a;三.初探进程1.理论 进程#xff0c;英文称呼很多Process, Task 等等#xff0c;一般通用操作系统称Process的比较多#xff0c;各种称呼涵义稍微有不一样。一般而言#xff0c;进程是对一个运行单元的抽象#xff0c;主要包括… 嵌入式OS入门笔记-以RTX为案例三.初探进程 1.理论     进程英文称呼很多Process, Task 等等一般通用操作系统称Process的比较多各种称呼涵义稍微有不一样。一般而言进程是对一个运行单元的抽象主要包括内存code,data,heap和stackCPU状态PC,SP和寄存器值等与其他OS管理相关的内容。进程是一个运行中的程序。在RTX中一个task就是一个进程。 一般我们有一个进程控制块Process control blockPCB用于记录进程的相关信息。在RTX上这个控制块叫做task control blockTCB是一个结构体其中的成员记录了关于该task的信息其定义在rt_TypeDef.h中 typedef struct OS_TCB { /* General part: identical for all implementations. */ U8 cb_type; /* Control Block Type */ U8 state; /* Task state */ U8 prio; /* Execution priority */ U8 task_id; /* Task ID value for optimized TCB access */ struct OS_TCB *p_lnk; /* Link pointer for ready/sem. wait list */ struct OS_TCB *p_rlnk; /* Link pointer for sem./mbx lst backwards */ struct OS_TCB *p_dlnk; /* Link pointer for delay list */ struct OS_TCB *p_blnk; /* Link pointer for delay list backwards */ U16 delta_time; /* Time until time out */ U16 interval_time; /* Time interval for periodic waits */ U16 events; /* Event flags */ U16 waits; /* Wait flags */ void **msg; /* Direct message passing when task waits */ struct OS_MUCB *p_mlnk; /* Link pointer for mutex owner list */ U8 prio_base; /* Base priority */ U8 ret_val; /* Return value upon completion of a wait */ /* Hardware dependant part: specific for CM processor */ U8 ret_upd; /* Updated return value */ U16 priv_stack; /* Private stack size, 0 system assigned */ U32 tsk_stack; /* Current task Stack pointer (R13) */ U32 *stack; /* Pointer to Task Stack memory block */ /* Task entry point used for uVision debugger */ FUNCP ptask; /* Task entry address */ } *P_TCB; 一个进程会有它自己的周期会处在不同的进程状态state见上面的state成员不同的状态有不同的意味不同的状态间可以相互转换。 在RTX中task的状态是在rt_Task.h中定义的一共有10种 /* Values for state */ #define INACTIVE 0 #define READY 1 #define RUNNING 2 #define WAIT_DLY 3 #define WAIT_ITV 4 #define WAIT_OR 5 #define WAIT_AND 6 #define WAIT_SEM 7 #define WAIT_MBX 8 #define WAIT_MUT 9 简单说来可以分为4大类inactive进程被清理ready就绪running执行和waiting等待。状态3至9都可以归为等待状态区别在于他们等待的东西不同从等待状态触发到就绪状态的条件不同。 进程的创建和消灭都是主要都牵涉到内存分配排程器的安排TCB的处理等等需要具体的OS具体的分析我们这里贴一下RTX进程创建的源代码OS_TID rt_tsk_create (FUNCP task, U32 prio_stksz, void *stk, void *argv) { /* Start a new task declared with task. */ P_TCB task_context; U32 i; /* Priority 0 is reserved for idle task! */ if ((prio_stksz 0xFF) 0) { prio_stksz 1; } task_context rt_alloc_box (mp_tcb); if (task_context NULL) { return (0); } /* If size ! 0 use a private user provided stack. */ task_context-stack stk; task_context-priv_stack prio_stksz 8; /* Pass parameter argv to rt_init_context */ task_context-msg argv; /* For size 0 system allocates the user stack from the memory pool. */ rt_init_context (task_context, prio_stksz 0xFF, task); /* Find a free entry in os_active_TCB table. */ i rt_get_TID (); os_active_TCB[i-1] task_context; task_context-task_id i; DBG_TASK_NOTIFY(task_context, __TRUE); rt_dispatch (task_context); os_tsk.run-ret_val i; return ((OS_TID)i); } 基本就是填TCB分配内存空间确定优先级和排程相关设置这里就不深入分析。消灭进程的源代码也是类似的。 2.进程相关的基本操作 进程在RTX里的基本形式是 __task void task(void){ for(;;){ //... } } 进程相关操作就是RTX提供的围绕这样一个task的一些基本操作例如创建消灭等等。 从应用角度来说了解以下进程基本操作就足够了 最主要的是这个 os_tsk_create(task_name,priority); 把函数名填入和进程的优先度优先度后面的笔记会介绍。 如果留心看源代码其实源代码的create操作要求一共4个参数(FUNCP task, U32 prio_stksz, void *stk, void *argv)。我们最基本的这个创建函数并没有接受后两个参数。如果实在有需要有以下另外三个相关的操作 os_tsk_create_ex(task_name,priority,para); 这个是用于传递一个初始参数para给相关进程的。例如你有一个LED_On的进程而你有4个LED你只有在创建进程时才能决定你点亮的是哪个LED那么就可以用这个操作通过传递参数来决定具体要亮哪个LED。 os_tsk_create_user(task_name,priority,stack,sizeof(stack)); 这个是用来给进程创建自定义stack的。需要传递stack的地址和大小。 os_tsk_create_user_ex(task_name,priority,stack,sizeof(stack),para); 这个明显就是上面两个的结合。 以上这些创建操作返回类型都是OS_TID进程ID实际值从0到255。 所以可以先声明一个该类型的值然后创建进程时让其返回该值。 2.消灭 os_tsk_delete(taskID); 填入你要消灭的进程的进程IDTID。 如果要消灭进程本身用 os_tsk_delete_self(); 注意RTX的消灭进程并不清理互斥锁或者信号灯的占有的。所以在消灭一个进程前确定进程释放了所有资源。内存资源会被这两个操作释放所以不用担心。 3.杂项 如果想要知道当前进程的ID使用以下操作 os_get_TID(); 还有一个非常重要的 os_sys_init(first_task); 这个操作初始化整个RTX如果不在main中执行这一操作一切都是空谈。该操作会创建第一个进程也就是first_task。 一般而言进程可以创造别的进程也可以消灭别的进程。但进程只能够消灭本身而不能创造本身。所以就需要有一个操作去创建第一个进程然后别的进程可由这个第一个进程去创造。 3.一个完整的例子 一下是一个从初始化到创建第一个进程到第一个进程创建别的进程最后消灭自己的一个例子 OS_TID taskID1; OS_TID taskID2; __task void init (void) { //Necessary Initialization //... //Create a task taskID1 os_tsk_create(task1, 0); taskID2 os_tsk_create(task2, 0); os_tsk_delete_self (); // Delete the init(self) task } int main(void) { //Necessary Initialization //... os_sys_init(init); } 这个简单的例子足够应付最基本使用RTX的需求了。 关于RTX的排程优先度内存分配和一些OS原语在后面的笔记会记录。 文章转载自http://blog.csdn.net/raym0ndkwan/article/details/32859989
http://www.zqtcl.cn/news/610788/

相关文章:

  • 百度网站流量查询宣传片制作公司费用
  • 安徽炒股配资网站开发搭建平台载体
  • 中华建设杂志网站记者黑龙江省建设集团有限公司网站首页
  • 成都络迈品牌网站建设网站建设的行业资讯、
  • 英语网站大全免费赤峰市建设厅官方网站
  • 宁波网站建设熊掌号成都网络关键词排名
  • 织梦网站改版需要怎么做平台设计软件
  • 企业展示型网站网站建设设计
  • 增城网站建设服务网站建设制作设计公司佛山
  • 微网站套餐自媒体网站源码模板dede
  • 企业网站改版升级成都便宜网站建设公司
  • 广州公共资源建设工程交易中心网站新塘做网站
  • 数码港 太原网站开发公司iis 建立子网站
  • 做一个自己的网站需要什么商标设计网站猪八戒
  • 傻瓜式网站建设软件保险预约
  • 网站 备案规定自己做简单网站
  • 网站上怎么做支付接口南乐网站建设
  • 咸阳网站建设公司电话做个公司网站大概多少钱
  • 网站如何做关键词排名点子网创意网
  • 浙江建设培训考试网站河源东莞网站建设
  • 网站移动端做pc端的301跳转哪些网站是增值网
  • wordpress新闻站浙江耀华建设集团网站
  • 网站开发代理企业网站推广技巧和方法
  • 俄语网站开发用模板做的网站多少钱
  • 丽水网站建设公司广州网络公司
  • 做基金的网站哪个好针对大学生推广引流
  • 国外对旅游网站的建设互联网推广和互联网营销
  • 海南省建设厅网站首页有什么做设计的兼职网站
  • 网站导航功能苏州市高新区建设局网站
  • jsp网站 值班多语种网站开发