RTX任务管理
os_sys_init()
void os_sys_init (
void (*task)(void) ); /* 操作系统启动后执行的任务 */
函数描述:
注意要点:
返回值:
演示:
#include <rtl.h>
void main (void) {
os_sys_init (task1); /* start the kernel */
while(1); /* will never come here */
}
os_sys_init_prio
void os_sys_init_prio (
void (*task)(void), /* Task to start */
U8 priority); /* Task priority (1-254) */
函数描述:
注意要点:
返回值:
演示:
#include <rtl.h>
void main (void) {
os_sys_init_prio (task1, 10);
while(1);
}
os_sys_init_user
void os_sys_init_user (
void (*task)(void), /* Task to start */
U8 priority, /* Task priority (1-254) */
void* stack, /* Task stack */
U16 size); /* Stack size */
函数描述:
该函数定义在rtl.h.注意要点:
返回值:
演示:
static U64 stk1[400/8]; /* 400-byte stack */
void main (void) {
os_sys_init_user (task1, 10, &stk1, sizeof(stk1));
while(1);
}
os_tsk_create
OS_TID os_tsk_create (
void (*task)(void), /* Task to create */
U8 priority ); /* Task priority (1-254) */
函数描述:
注意要点:
返回值:
演示:
OS_TID tsk1, tsk2;
__task void task1 (void) {
..
tsk2 = os_tsk_create (task2, 1);
..
}
__task void task2 (void) {
..
}
os_tsk_create_ex
OS_TID os_tsk_create_ex (
void (*task)(void *), /* Task to create */
U8 priority, /* Task priority (1-254) */
void* argv ); /* Argument to the task */
函数描述:
注意要点:
返回值:
演示:
#include <rtl.h>
OS_TID tsk1, tsk2_0, tsk2_1;
int param[2] = {0, 1};
__task void task1 (void) {
..
tsk2_0 = os_tsk_create_ex (task2, 1, ¶m[0]);
tsk2_1 = os_tsk_create_ex (task2, 1, ¶m[1]);
..
}
__task void task2 (void *argv) {
..
switch (*(int *)argv) {
case 0:
printf("This is a first instance of task2.\n");
break;
case 1:
printf("This is a second instance of task2.\n");
break;
}
..
}
os_tsk_create_user
OS_TID os_tsk_create_user(
void (*task)(void), /* Task to create */
U8 priority, /* Task priority (1-254) */
void* stk, /* Pointer to the task's stack */
U16 size ); /* Number of bytes in the stack */
函数描述:
注意要点:
返回值:
演示:
OS_TID tsk1,tsk2;
static U64 stk2[400/8];
__task void task1 (void) {
..
/* Create task 2 with a bigger stack */
tsk2 = os_tsk_create_user (task2, 1, &stk2, sizeof(stk2));
..
}
__task void task2 (void) {
/* We need a bigger stack here. */
U8 buf[200];
..
}
os_tsk_create_user_ex
OS_TID os_tsk_create_user_ex (
void (*task)(void *), /* Task to create */
U8 priority, /* Task priority (1-254) */
void* stk, /* Pointer to the task's stack */
U16 size, /* Size of stack in bytes */
void* argv ); /* Argument to the task */
函数描述:
注意要点:
返回值:
演示:
#include <rtl.h>
OS_TID tsk1,tsk2_0,tsk2_1;
static U64 stk2[2][400/8];
__task void task1 (void) {
..
/* Create task 2 with a bigger stack */
tsk2_0 = os_tsk_create_user_ex (task2, 1,
&stk2[0], sizeof(stk2[0]),
(void *)0);
tsk2_1 = os_tsk_create_user_ex (task2, 1,
&stk2[1], sizeof(stk2[1]),
(void *)1);
..
}
__task void task2 (void *argv) {
/* We need a bigger stack here. */
U8 buf[200];
..
switch ((int)argv) {
case 0:
printf("This is a first instance of task2.\n");
break;
case 1:
printf("This is a second instance of task2.\n");
break;
}
..
}
os_tsk_delete
OS_RESULT os_tsk_delete (
OS_TID task_id ); /* Id of the task to delete */
函数描述:
注意要点:
返回值:
演示:
#include <rtl.h>
OS_TID tsk3;
__task void task2 (void) {
tsk3 = os_tsk_create (task3, 0);
..
if (os_tsk_delete (tsk3) == OS_R_OK) {
printf("\n'task 3' deleted.");
}
else {
printf ("\nFailed to delete 'task 3'.");
}
}
__task void task3 (void) {
..
}
os_tsk_delete_self
#include <rtl.h>
void os_tsk_delete_self (void);
函数描述:
注意要点:
返回值:
演示:
#include <rtl.h>
__task void task2 (void) {
..
os_tsk_delete_self();
}
os_tsk_pass
#include <rtl.h>
void os_tsk_pass (void);
函数描述:
注意要点:
返回值:
演示:
#include <rtl.h>
OS_TID tsk1;
__task void task1 (void) {
..
os_tsk_pass();
..
}
os_tsk_prio
OS_RESULT os_tsk_prio (
OS_TID task_id, /* ID of the task */
U8 new_prio ); /* New priority of the task (1-254) */
函数描述:
注意要点:
返回值:
演示:
#include <RTL.h>
OS_TID tsk1,tsk2;
__task void task1 (void) {
..
os_tsk_prio_self (5);
/* Changing the priority of task2 will cause a task switch. */
os_tsk_prio(tsk2, 10);
..
}
__task void task2 (void) {
..
/* Change priority of this task will cause task switch. */
os_tsk_prio_self (1);
..
}
os_tsk_prio_self
#include <rtl.h>
OS_RESULT os_tsk_prio_self (
U8 new_prio ); /* New priority of task (1-254) */
函数描述:
注意要点:
返回值:
演示:
#include <rtl.h>
OS_TID tsk1;
__task void task1 (void) {
..
os_tsk_prio_self(10); /* Increase its priority, for the critical section */
.. /* This is a critical section */
..
os_tsk_prio_self(2); /* Decrease its priority at end of critical section */
..
}
os_tsk_self
#include <rtl.h>
OS_TID os_tsk_self (void);
函数描述:
注意要点:
返回值:
演示:
#include <rtl.h>
OS_TID tsk1;
__task void task1 (void) {
tsk1 = os_tsk_self();
..
}
isr_tsk_get
#include <rtl.h>
OS_TID isr_tsk_get (void);
函数描述:
注意要点:
返回值:
演示:
#include <rtl.h>
void os_error (U32 err_code) {
/* This function is called when a runtime error is detected. */
OS_TID err_task;
switch (err_code) {
case OS_ERR_STK_OVF:
/* Identify the task with stack overflow. */
err_task = isr_tsk_get();
break;
case OS_ERR_FIFO_OVF:
break;
case OS_ERR_MBX_OVF:
break;
}
for (;;);
}
RTX任务管理的更多相关文章
- RTX——第7章 任务管理
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 单任务系统学习多任务系统之前,我们先来回顾下单任务系统的编程框架,即裸机时的编程框架. 裸机编程主要是采 ...
- RTX基础教程目录
以下RTX教程转载自安富莱电子论坛: http://forum.armfly.com/forum.php?mod=viewthread&tid=16909&extra=page%3D1 ...
- RTX——第13章 事件标志组
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 前面的章节我们已经讲解了任务管理和时间管理,从本章节开始讲解任务间的通信和同步机制.首先讲解任务间的通信 ...
- PHP实现RTX发送消息提醒
RTX是腾讯公司推出的企业级即时通信平台,大多数公司都在使用它,但是我们很多时候需要将自己系统或者产品的一些通知实时推送给RTX,这就需要用到RTX的服务端SDK,建议先去看看RTX的SDK开发文档( ...
- BPM任务管理解决方案分享
一.方案概述任务是企业管理者很多意志的直接体现,对于非常规性事务较多的企业,经常存在各类公司下达的各种任务跟进难.监控难等问题,任务不是完成效果不理解,就是时间超期,甚至很多公司管理层下达的任务都不了 ...
- 用Excel做出比肩任务管理软件的操作技巧
用Excel做出比肩任务管理软件的操作技巧 在项目管理中,网上有各种各样的工具可以选择,到底用哪个,曾一度困扰着我.我是一个有轻度强迫症的人,总是喜欢试用各种各样的系统,以比较他们之间的不同,试图选择 ...
- [No00008D]腾讯通RTX联系方式批量获取
公司用的RTX让我一直很不爽,QQ比RTX好多少为啥不让用,微信都有企业版了为啥还用腾讯通?终于今天发现唯一的好处是可以从服务器上拉公司妹子们的联系方式!!当然,我要这些联系方式,只是为了联tiao系 ...
- Quartz.NET总结(五)基于Quartz.net 的开源任务管理平台
前面总结了很多,关于Quartz.net 的文章,介绍了如何使用Quartz.net.不清楚的朋友,可以看我之前的系列文章,http://www.cnblogs.com/zhangweizhong/c ...
- .NET轻量级任务任务管理类
概述 最近做项目总是遇到服务跑批等需求,一直想写个任务管理的DLL,现在整理了一下思路,编写了一个DLL类库,使用方便.只要调用的子类继承服务基类便可以实现任务的整体调度.先看看页面效果: 使用方式 ...
随机推荐
- java代码发送邮箱验证码与qq邮箱smtp服务
发送邮箱的类封装,在此之前需要一个jar包 javax.mail.jar 下载链接https://github.com/javaee/javamail/releases/download/JAVAM ...
- 深入理解JVM(5)——HotSpot垃圾收集器详解
HotSpot虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,没有最好的垃圾收集器,只有最适合的垃圾收集器.根据新生代和老年代各自的特点,我们应该分别为它们选择不同的收集器,以提升垃圾回收效率. ...
- unique_ptr_c++11
unique_ptr 替代了原来的auto_ptr,指向对象具有唯一性,即同一时间只能有unique_ptr指向给定对象(和auto_ptr不同是禁止拷贝语义,通过移动语义替代) unique_ptr ...
- hihocoder1524
题目链接 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个1-N的排列A1, A2, ... AN,如果Ai和Aj满足i < j且Ai > Aj,我们 ...
- Vue 开源项目库汇总(转)
最近做了一个Vue开源项目库汇总,里面集合了OpenDigg 上的优质的Vue开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个star.https://gi ...
- poj3259 Wormholes(Bellman-Ford判断负圈)
https://vjudge.net/problem/POJ-3259 一开始理解错题意了,以为从A->B一定得走路,B->A一定得走虫洞.emmm其实回来的时候可以路和虫洞都可以走,只要 ...
- Uva11582 Colossal Fibonacci Numbers!(同余模定理+快速幂)
https://vjudge.net/problem/UVA-11582 首先明确,斐波那契数列在模c的前提下是有循环节的.而f[i] = f[i-1]+f[i-2](i>=2)所以只要有两个连 ...
- Deepin 15.4 破解安装 SecureFX-7.3 失败
参考先前的文章(Ubuntu 14 安装并破解SSH工具 SecureCRT),破解安装 SecureCRT-7.3 成功,但是破解安装 SecureFX-7.3 时就一直报错: Insuffici ...
- R12.2.4 ORA-01017: invalid username/password; logon denied
sqlplus / as sysdba ORA-01017: invalid username/password; logon denied [oracle@ebs 11.2.0]$ source / ...
- APP中的图片如何长按可以下载并保存图片到相册出错处理
https://www.cnblogs.com/interdrp/p/9302164.html 接上文. 如果用户在保存图片过程中,不小心拒绝了相册的访问权限