linux rt 应用程序,RTlinux编程

RTlinux主要的api函数

实时应用程序分为两部分,内核部分和应用部分,应用部分需要和内核部分通过FIFO进行数据交换和控制,除此之外和一般应用程序没有太多区别,内核部分比较复杂,程序以模块方式挂入内核,这部分程序的编写需要对底层的东西有较高的要求,除了掌握RTLinux的API以外还需要对Linux内核编程有较深的了解,以及对硬件部分也有比较熟悉的掌握.

没有找到完整的rtlinux的api说明,下面是网上找到的主要的一些函数.

POSIX 线程创建函数

一个实时程序是由几个执行的线程组成的。线程是轻量级进程,它们共享共有的地址空间。在RTLinux中,所有的线程共享Linux内核地址空间。

int pthread_create (pthread_t *thread, pthread_attr_t * attr, void * (*start_routine)(void *), void *arg)

这是RTLinux的标准POSIX线程创建函数。这个线程运行函数指针start_routine指向的过程,arg是这个函数的指针的入口参数。线程的属性由attr对象决定,可以为这个属性设置CPU号、堆栈大小等属性。设定若为NULL,将会使用默认属性。返回0表示成功创建线程,线程号放在thread所指向的空间;返回非0表示创建失败。线程的属性决定在特定的CPU上创建线程(pthread_attr_setcpu_np),是否使用FPU(pthread_attr_setfp_np)。

int pthread_attr_init (pthread_attr_t *attr)

初始化线程运行的属性。

int pthread_ attr_setschedparam (pthread_attr_t *attr, const structsched_param *param)和

int pthread_ attr_setschedparam (constpthread_attr_t *attr, struct sched_param *param)

这两个函数根据程序的需要相应地从attr中设定/取得线程的运行参数。param是为调度的SCHED_FIFO和SCHED_RR策略定义的属性。

int pthread_attr_setcpu_np (pthread_atte_t *attr, int cpu)和

int pthread_attr_getcpu_np (pthread_atte_t *attr, int cpu)

设定/取得线程运行的CPU号。在SMP机器上允许线程在一个特定的CPU上运行。

int pthread_cancel (pthread_t thread)

取消一个运行的线程。

int pthread_delete_np (pthread_t thread)

删除一个线程,并且释放该线程的所有资源。返回0表示成功删除,非0表示删除失败。

pthrad_t pthread_self (void)

获得当前正在运行的线程号。

clockid_t rtl_getschedclock (void)

获得当前调度方法的时钟。

int rtl_setclockmode (clockid_t clock, int mode, hrtime_t mode_param)

设置当前的时钟模式,mode=RTL_CLOCK_MODE_ONESHOT时是非周期( 一次性) 模式mode_param参数无用;

mode=RTL_CLOCK_MODE_PERIODIC时是周期模式,mode_param参数是周期的长度。

int pthread_wait_np (void)

当前周期的线程运行结束,总是返回0。

时间相关函数

RTLinux提供了一些时钟函数用于计时功能,包括线程调度,获得TSP(timestamps)等。

下面的是一般的计时函数(需要包含rtl_time.h):

int clock_gettime(clockid_t clock_id, struct timespec *ts);

读取当前的时间,保存到clock_id所指的对象中。

hrtime_t clock_gethrtime(clockid_t clock);

读取当前时间,但返回一个64位(hrtime_t)的纳秒时间值。

struct timespec {

time_t tv_sec; /*秒*/

long tv_nsec; /*纳秒*/

};

一些时间转换的函数,用于把时间格式转换为另外一种格式。

时间转换函数(需要包含rtl_time.h):

hrtime_t timespec_to_ns(const struct timespec *ts)

timespec到纳秒数转换

struct timespec timespec_from_ns(hrtime_t t)

纳秒数到timespec转换

const struct timespec * hrt2ts(hrtime_t value)

下面是一些支持的时钟类型。

时钟类型相关的宏:

CLOCK_MONOTONIC: POSIX时钟,以恒定速率运行;不会复位和调整

CLOCK_REALTIME:标准POSIX实时时钟。目前与

CLOCK_MONOTONIC时钟相同

CLOCK_RTL_SCHED:调度器用来任务调度的时钟

以下是机器结构相关的时钟:

CLOCK_8254:在x86单处理器机器上用于调度的时钟

CLOCK_APIC:用在SMP x86机器的时钟

线程调度函数

RTLinux提供一些调度方式,允许线程代码在特定的时刻运行。

RTLinux使用单纯优先级驱动的调度器,更搞优先级的线程总是被选择运行。如果两个线程的优先级拥有一样的优先级,选择那一个线程运行是不确定的。

RTLinux使用下面的调度API:

int pthread_setschedparam (pthread_t thread, int policy, const structsched_param *param)

设置一个线程的调度参数,用policy和sched_param两个参数设置thread的调度参数属性:

policy=SCHED_RR:使用Round-Robin方法调度

policy=SCHED_FIFO:使用先进先出的方法调度

返回0表示成功调度,非0表示失败。

int pthread_getschedparam (pthread_t thread, int policy, const structsched_param *param)

获得一个线程的调度参数。将获得的policy和sched_param结构放在入口参数所指向的地址里面。

int pthread_make_periodic_np (pthread_t thread, hrtime start_time,hrtime_t period)

这个函数标记thread线程为可运行。线程将在start_time时刻开始运行,运行的时间间隔由period给定。

int pthread_wait_np (void)

pthread_wait_np函数将挂起当前运行发线程直到下一周期。这个线程必须是pthread_make_periodic_np函数标记为可执行。

int sched_get_priority_max (int policy)和

int sched_get_priority_min (int policy)

确定sched_priority可能的值。

实时任务与

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于dns预解析

DNS 实现域名到IP的映射。通过域名访问站点,每次请求都要做DNS解析。目前每次DNS解析,通常在200ms以下。针对DNS解析耗时问题,一些浏览器通过DNS Prefetch 来提高访问的流畅性。 什么是 DNS Prefetch ? DNS Prefetch 是一种DNS 预解析技术&a…

linux nslcd服务,redhat – sssd vs nslcd for RHEL-5/6

sssd可能是更具“前瞻性”的选择.在这种程度上,其他答案是正确的.也就是说,与流行的观点相反,sssd并没有完全取代nslcd的功能.nslcd优于sssd的主要(情境)优势是您可以编写带参数替换的自定义authz查询:pam_authz_search FILTERThis option allows flexible fine tun…

bzoj4631

4631: 踩气球 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 260 Solved: 133[Submit][Status][Discuss]Description 六一儿童节到了, SHUXK 被迫陪着M个熊孩子玩一个无聊的游戏:有N个盒子从左到右排成一排,第i个盒子里装着Ai个气球。SH…

hpcp5225设置linux网络,惠普HP color laserjet CP5225打印机驱动

软件标签:惠普CP5225驱动是为同名打印机推出的驱动程序,维持着打印机的正常工作,小编提供了驱动下载,若是你的惠普CP5225打印机在使用过程中出现不能打印或者无法被电脑识别等问题,快来本站下载该驱动来解决问题吧!安装…

Dubbo底层采用Socket进行通信详解

由于Dubbo底层采用Socket进行通信,自己对通信理理论也不是很清楚,所以顺便把通信的知识也学习一下。 n 通信理论 计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。 1.一组信息(通常是字节)的各位数据被…

linux 网络协议栈变化,ZZ Linux网络协议栈学习

最近学习linux内核网络协议栈,把数据包接收流程大致理了一下,前面也看了瀚海书香兄的总结,感觉总结的比我精炼,抓住了主干,是一目了然的那种我的这篇本来是自己看得,因此把我自己学习中一些遇到的问题写了出…

delete删除

delete只能删除属性,不能删除变量和原型链上的属性 1,对象属性删除 var obj {name: mary } delete obj.name; console.log(obj.name); // undefined 2、删除数组中的元素,删除值,不能删除索引 var arr [1, 2, 3]; console.log(arr[0], arr…

linux安装各种文件格式,Embeded linux中的各类文件系统

Cramfs:(优点:只读,目的:不可更改文件、防入侵)1.下载cramfs-1.1源码工具http://files.cnblogs.com/files/pokerface/cramfs-1.1.tar.gz2.解压tar xvzf cramfs-1.1.tar.gz -C /home/liuzhengwu/tools3.编译make4.得到COPYING cra…

拯救者linux无法正常关机,Ubuntu无法关机解决办法

说明:如果不成功请参考一下文章最后的内容,也许会有帮助。其实不止在ubuntu里面,fedora里面我也遇到了这个问题,就是电脑可以重启,但是不能直接关机,否则就一直停在关机界面,需手动关机。郁闷很…

ES6 正则的扩展

1. RegExp构造函数 ES5中,RegExp构造函数的参数: 参数是字符串,这时第二个参数表示正则表达式的修饰符(flag)参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝。但是,ES5不允许此时使用…

华为荣耀笔记本linux系统怎么样,荣耀笔记本和华为笔记本有什么区别

以荣耀Magic Book Pro和华为matebook 14为例,其区别如下:1、屏幕:荣耀Magic Book Pro屏幕尺寸为16.1英寸,显示比例为16比9,分辨率为1920乘以1080,华为matebook 14屏幕尺寸为14英寸,显示比例3比2…

初始Angularjs2

一、为什么使用Angularjs2 Angularjs2全面使用了模块化、组件化的思想,它有如下的特性: 1)模块化 在ng2的应用中,所有的系统功能都是模块化的,开发者只需要按需导入模块化的好处在于可以当应用加载时,是按需…

linux中输入ls出现蓝色的点,linux上ls的蓝色太深,怎么处理

linux下ls的蓝色太深,怎么办?在linux下使用ls命令时,会将目录以蓝色显示。在某些显示器上,黑底蓝字,看起来相当费力,以至于我有时候不得不使用dir命令,全部显示成白色。先看一个图:看…

四色着色问题 c语言编程,数据结构-图着色问题

7-38 图着色问题 (25 分)图着色问题是一个著名的NP完全问题。给定无向图G(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配…

HTML学习笔记4之第五章第六章

2017-03-02 完成第五章第六章的学习 第五章&#xff1a;为界面增加图像 浏览器处理图像的过程&#xff1a;先请求页面&#xff0c;若需要图片&#xff0c;在请求图片 图像的格式&#xff1a;JPEG&#xff0c;PNG&#xff0c;GIF&#xff0c;各自的特点和优势 内联元素<img&g…

c语言printf %llo,c++ - Printf疯狂了 - 堆栈内存溢出

你不能使用%d来打印long long 。 你必须使用%lld 。 (因此请使用"\\n%d %d | %lld %lld | %d %d"作为格式字符串。)特别是&#xff0c;显而易见的是&#xff0c;在“52 0 | 52 0”中&#xff0c;第一个52 0是a.rez &#xff0c;第二个52 0是b.rez (这些中的每一个都是…

js柯里化

function sum(x){console.log(x:x);var y function(x){ console.log(xx:x);console.log(y:y);return sum(xy) }y.toString y.valueOf function(){ return x; } console.log(yy:y);return y; } sum(1)(2)(3)(4);//10 转载于:https://www.cnblogs.com/yuri2016/p/6496486.ht…

用c语言随机获区100个整数,用rand() 函数去100 个随机的整数的有关问题

用rand() 函数去100 个随机的整数的问题int rand100 (((double) rand() / (double) RAND_MAX) * RANGE_MAX RANGE_MIN);你让 RANGE_MAX1&#xff1b;RANGE_MIN 0问题&#xff1a;1 rand() 返回的是 什么类型的数&#xff1f;2 (double) rand() / (double) RAND_MAX)&#x…

BZOJ 3697: 采药人的路径 [点分治] [我想上化学课]

传送门 题意&#xff1a; 路径有$-1,1$两种权值&#xff0c;求有多少路径满足权值和为$0$且有一个点将路径分成权值和为$0$的两段 第四节课本来想去上化学&#xff0c;然后快上课了这道题还没调出来.....可恶我想上化学 昨天两节语文课潸然的李煜讲座也没去听呜呜听说今天的语文…

c#语言规范所在文件夹,C#规范整理·语言要素

如有不理解&#xff0c;请留言&#xff0c;开始!1. 正确操作字符串拼接字符串一定要考虑使用 StringBuilder ,默认长度为16,实际看情况设置。StringBuilder本质&#xff1a; 是以非托管方式分配内存。同时StringFormat方法 内部也是使用StringBuilder进行字符串格式化。2. 使用…