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

建设银行河北省分行网站邯郸外贸网站建设公司

建设银行河北省分行网站,邯郸外贸网站建设公司,建一个免费网站的流程,长沙h5手机网站制作嵌入式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.yutouwan.com/news/310593/

相关文章:

  • 个人网站 flash鲜花类网站建设策划书范文
  • 用宝塔做网站步骤点点 网站建设
  • 网站建设推广市场wordpress 七牛不更新
  • 网页设计与网站建设电话python做网站优势
  • 做智能网站平台已购买域名 如何做网站
  • 最专业微网站首选公司免费html网站开发教程
  • 网站由哪些部分组成部分组成部分组成线下推广平台有哪些
  • 四川建设主管部门网站做网站贵么
  • 在线建站平台营销型网站制作哪个好薇
  • 建个公司网站要多少钱京东网页设计教程
  • 以前做视频的网站吗互联网门户网站是什么意思
  • 企业宣传网站设计论文绵阳市网站建立
  • 有服务器自己怎么做网站响应式表白网站源码
  • 成都网络优化网站建设电子商务网站的建设视频
  • 课程网站开发流程图及原型图做微信的网站有哪些
  • 中小学 网站建设 通知可以做网站的路由器
  • 郑州网站个人开发商业空间设计有限公司
  • 湘潭哪里做网站现在网站建站的主流语言是什么
  • 新农村建设在哪个网站申请微信公众号运营策划书范文
  • 长沙做互联网平台长沙百度网站排名优化
  • 网站建设预算策划个性化网站成功的案例
  • 中国精品课程网站网络设计工资高吗
  • 湖北商城网站建设做网站的论文摘要
  • php网站模板开源今天的新闻内容
  • 重庆的网站设计公司价格知乎 做网站的公司 中企动力
  • 除了Joomla用什么做网站好网站pv uv有什么作用
  • 怎么做网站发货福州关键词搜索排名
  • 六安网站建设中铁建设集团门户网站登录
  • 做影视网站犯法吗怎么网上接网站开发单自己做
  • 重庆网站推广营销代理农业推广硕士