vxworks点滴记录

 MPC852---大端模式

 

对于vxWork5.5来说: 
vxWorks操作系统是一个进程,其间的所有任务是该进程内的线程,因为他们有统一的地址空间。没有main函数。。

对于vxWorks6来说: 
你可选支持多个进程,每个进程由独立的地址空间,有堆。。。有一个内核进程在运行,也有用户进程。任务是进程里面的线程。。。。任务(线程)是调度的基本元素而不是进程。

 

intLock和taskLock 一样,当调用者进入READY、PEND、SUSPEND 这样的状态而主动让出CPU 时,VxWorks 会重新使能中断,并调度到其它任务

任务锁和互斥信号量的系统函数都支持嵌套(allows nested)

sysClkRateSet(100); //每秒100 tick


taskDelay()是最简单的延时办法,他的单位是tick

taskDelay(1)的延时时间相差很大,位于0~10ms 之间,原因用者,它延时多
长时间,就取决于调用taskDelay 时所处的时间位置

 

中断里面或者taskLock内不应该有阻塞函数(例如printf, malloc等)

 

结构体对齐--默认四字节

#define _WRS_PACK_ALIGN(x) __attribute__((packed, aligned(x)))

struct myType {
...
} _WRS_PACK_ALIGN(1);


低优先任务启动高优先级任务,高优先级任务立即启动

高优先级启动两个不同等级的低优先级任务,谁先调用谁先启动


shell常用命令

(1) i---查看所有任务
(2) checkStack(tTelnetd)----检查任务的堆栈
(3) spy--监测各任务CPU占有率
    spyStop--停止监测
    需添加development tool components--spy 组件

(4)tt--该命令可用来追踪任务挂起原因

(5)memShow--监测heap
  需添加development tool components-->show routines-->memory show routine组件

(6)printErrno value -打印系统定义的错误码的宏

development tool components-->sysbol table components-->error status table

(7)sysExcMsg--查看中断异常(下面有详细说明)

-> sysExcMsg
sysExcMsg = 0x1d197f8: value = 17152 = 0x4300
-> d 0x4300

(8)timexN--查看函数执行时间

例如:timexN delay,100

 

如果在中断处理程序中发生异常(比如上面所说的数目访问异常等),那么VxWorks
就不能象处理任务异常一样挂起任务了,因为在中断中,没有任务相关的上下文,这
时VxWorks 会记录一个简单的异常记录,并自动触发系统复位。这个简单的异常记录
依赖于事先配置的内存地址,也就是说会把这个异常信息记录在这个地址所开始的一
段存储空间中,系统复位后,我们可以通过察看这个地址来得到复位前的异常信息。
6-60
这个地址是在VxWorks 裁减时配置的,缺省值是0x4300,在一个运行中的系统,我
们可以通过sysExcMsg 这个全局变量来获得这个地址,

 

char   *   creationDate       =   __DATE__   ",   "   __TIME__;          -----获取软件编译时间

 #define ERRORMSG()      printf("%s@%d: ERROR!\n",__FILE__, __LINE__)    ----获取当前代码所在的文件及行数

 

 int变量占四个字节

 

POWERPC 大端

 

waring:  makes pointer from integer without a cast....................一般是因为对指针直接复制变量值,而不是变量地址导致

 

 在线帮忙文档--默认IE浏览器打开,其他会有问题

 

通过MALLOC申请的内存,再用FREE释放后,剩下的那个野指针怎么处理?

free后,接着加上一句p=NULL比较好一些

vxworks.h头文件 一些宏定义含义

#if !defined(FALSE) || (FALSE!=0)
#define FALSE  0
#endif

#if !defined(TRUE) || (TRUE!=1)
#define TRUE  1
#endif


#define NONE  (-1) /* for times when NULL won't do */
#define EOS  '\0' /* C string terminator */


/* return status values */

#define OK  0
#define ERROR  (-1)

/* timeout defines */

#define NO_WAIT  0
#define WAIT_FOREVER (-1)

 

读取文件信息shell命令

cd "/tffs0"

ls "/tffs0",1

 

请问一下各位,malloc最大能分配多少字节的空间是由什么决定的啊?怎么样才能知道呢 ?

memShow函数。这个值基本在(sysMemTop - RAM_HIGH)到LOCAL_MEM_SIZE之间,bootrom会更小一点。

这个可以试出来,在target shell下。
-> a=malloc(0x6000000)
a = 0x80238f30: value = -2144737348 = 0x8029e7bc
-> free(a)
value = 0 = 0x0
-> a=malloc(0x8000000)
0x8029e570 (tShell0): memPartAlloc: block too big 134217728 bytes (0x4 aligned) in partition 0x8020aa34
a = 0x80238f30: value = 0 = 0x0

空间分配config.h

 

#define LOCAL_MEM_LOCAL_ADRS 0x00000000 /* Base of RAM */
#define LOCAL_MEM_SIZE  0x02000000  /* 16 Mbyte memory available */

/* RAM address for ROM boot */
#define RAM_HIGH_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00800000)

/* RAM address for sys image */
#define RAM_LOW_ADRS  (LOCAL_MEM_LOCAL_ADRS + 0x00010000)

 

LOCAL_MEM_LOCAL_ADRS是RAM的起始地址

RAM_LOW_ADRS是VxWorks的加载点,也是VxWorks代码段的起始位置

lFREE_RAM_ADRS是VxWorks映象的结束点。通常也是系统内存池和目标服务器内存池的起始地址

 RAM_HIGH_ADRS是ROM引导程序的加载点。它也是ROM引导程序(除驻留ROM引导程序之外)的代码段的起始位置,或驻留ROM引导程序数据段的起始位置。

 

 

快捷键ESC+K---shell下复制上一条命令 

 

vxworks 编程注意地方

1.删除了*.h文件后,之前调用该头文件的文件,需重新关联dependence才能编译通过

2.其中一个点C文件定义一个全局函数,其他点C文件能直接调用

3.其中一个点C文件定义一个全局变量,其他点C必须引用才能使用

4.vxworks的C文件如果里面函数一个都未调用,则C文件的函数无法直接通过shell调试调用!

 

vxWork下怎么设置套接字的recv超时?

在VC上面可以用下面的代码来做
//============设置套接字属性============
        int nNetTimeout=1000;//1秒
        //发送时限
        setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(const char *)&nNetTimeout,sizeof(int));
        //接收时限
        setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(const char *)&nNetTimeout,sizeof(int));

 在vxworks 5.5版本下,无SO_SNDTIMEO,SO_RCVTIMO参数,可用select实现,详见博客中“select详解及代码释义”一文

 

vxwoks下生成的影像文件含义是什么?

vxWorks: 1361552(t) + 151888(d) +  1443296(b) = 2956736 (5366336 unused)

(t): TEXT   1.361552M

(d):DATA  151.888K

(b): BSS   1.443296M

系统映像包括三部分:TEXT段、DATA段、BSS段

其中TEXT段是代码段,使用的内存基本是必须的;

DATA段是数据段,包括已经初始化的全局变量和数组;

BSS段是未初始化的数据段,包括未初始化的全局变量和数组,实际上基本不占用Flash存储空间,在VxWorks系统启动的时候在内存将其进行扩展为全零。

 

ctrl+x 和ctrl+c

Ctrl+X,Ctrl+C都是在ty中处理的,分别需要通过ioctl设置OPT_MON_TRAP和OPT_ABORT
选项(默认是打开的),ctrl+c调用shellRestart实现shell重启,ctrl+x直接调用
reboot实现系统重启

ioctl(psEnv->slaveFd, FIOOPTIONS, OPT_RAW);        //---psEnv->slaveFd为调试串口句柄, 去掉ctrl+x 和ctrl+c功能 

 

调试串口如何切换成tShell使用
1.关闭tShell任务 --taskDelete( taskNameToId("tShell") );
2.重新定位shell到调试串口句柄中--shellOrigStdSet(STD_IN, psEnv->slaveFd);   ---psEnv->slaveFd为调试串口句柄
3.shell初始化--shellInit (0, TRUE);

 

请问怎样在shell中查看vxworks中的全局变量值 

全局变量可以直接查,方法就是输入全局变量名然后回车就可以了,
不过我用的时候感觉这样直接显示的是一个机器字长的值。
如果你想看的更真切,可以通过刚才查询时附带的内存地址,
d出内存来直接看。

 

如何发送255.255.255.255广播包及直接发送链路层包?

VxWorks下增强型网络驱动-END(EnhancedNetworkDriver)是一个数据链路层驱动程序,增强型网络驱动(END)是OSI模型中数据链路层的实现,通过MUX函数与网络协议层通讯。主要是使用muxBind()函数--详细见《vxworks下MUX接口的使用》

 

vxworks工程无法编译通过?

可能是makefile文件需更新,通过dependencies重新编译 (一个或多个dependencies,通常是为了编译目标文件所需要的其它文件)

 

浮点运算问题?

在生成任务时,如果在任务中使用浮点计算,一定需要将任务的标志VX_FP_TASK设置,否则将会出错

 

数学运算函数必须包括头文件

log10()函数必须包括math.h头文件,才能正常工作,否则无头文件,编译可以通过,运行不正确,怪异!

 

堆栈设置太小导致任务崩溃

程序开启了一个任务,由于任务代码很少,就10-20行,故设置堆栈1K,结果任务崩溃,改大后无问题

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

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

相关文章

第4章操作系统基础第五版Aimin.rar

第4章操作系统基础第五版Aimin.rar转载于:https://www.cnblogs.com/emanlee/archive/2010/10/14/1851101.html

python计算小数点后有几位_python的数字类型

python的数字类型分为三种,分别是整数int、 浮点数float 和 复数complex。数字是由数字字面值或内置函数与运算符的结果来创建的, 不带修饰的整数字面值会生成整数。包含小数点或幂运算符的数字字面值会生成浮点数。在数字字面值末尾加上 j 或 J 会生成虚…

c# 判断点是否在区域内 点在区域内 在多边形内 判断

方法一 算法 : public int isLeft(Point P0, Point P1,Point P2) { int abc ((P1.X - P0.X) * (P2.Y - P0.Y) - (P2.X - P0.X) * (P1.Y - P0.Y)); return abc; } private bool PointInFences(Point pnt1, Point[] fencePnts) { int wn 0,j…

Window服务的创建与删除

Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。它没有用户界面,并且也不会产生任何可视输出。任何用户消息都会被写进Windows事件日志。计算机启动时,服务会自动开始运行。它们不要用户一定登录才运行&#xf…

python颜色识别_颜色检测python

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 版权声明:本文为博主原创文章,未经博主允许不得转载。 https:blog.csdn.netu0121626…

涵盖各种编程语言的深度学习库整理大全!

Python 1. Theano是一个python类库,用数组向量来定义和计算数学表达式。它使得在Python环境下编写深度学习算法变得简单。在它基础之上还搭建了许多类库。 1.Keras是一个简洁、高度模块化的神经网络库,它的设计参考了Torch,用Python语言编写&…

epoll机制

在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中&#xf…

LSGO软件技术团队与信息1402班开展真人CS活动

LSGO软件技术团队成立于2010年10月,主要从事的应用方向为互联网与移动互联网(UI设计,前端开发,后台开发),地理信息系统;研究方向为数据分析与计算机视觉。成立几年来为学校培养了一批优秀学生&a…

a标签去掉下划线_解决 v-html 元素中标签样式失效 - Vue

最近在做一个项目&#xff0c;是对富文本编辑器生成的 HTML 渲染到页面中&#xff0c;大家都会想到当然是用 Vue 的 v-html 属性&#xff0c;于是我写下了这样的代码<template><div class"content-html" v-html"article.contentHtml" /> </…

判断 Java 中的空字符串

原文地址&#xff1a;http://www.neoease.com/string-is-empty/ 以下是 Java 判断字符串是否为空的三种方法.方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低.方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法.方法三: Java SE 6.0 才开始提供的方法, 效率和方法…

Socket的send函数在执行时报EAGAIN的错误

Socket的send函数在执行时报EAGAIN的错误] 内容提要: 当客户通过Socket提供的send函数发送大的数据包时&#xff0c;就可能返回一个EGGAIN的错误。该错误产生的原因是由于send 函数中的size变量大小超过了tcp_sendspace的值。tcp_sendspace定义了应用在调用send之前能够在k…

写让别人能读懂的代码

随着软件行业的不断发展&#xff0c;历史遗留的程序越来越多&#xff0c;代码的维护成本越来越大&#xff0c;甚至大于开发成本。而新功能的开发又常常依赖于旧代码&#xff0c;阅读旧代码所花费的时间几乎要大于写新功能的代码。 我前几天看了一本书&#xff0c;书中有这么一句…

python中什么是按位取反_Python学习中的“按位取反”笔记总结

|疑惑 最近在学习Python的过程中了解到位运算符&#xff0c;但对于按位取反有点迷糊&#xff0c;就比如说~9&#xff08;按位取反&#xff09;之后的结果是-10&#xff0c;为什么不是6呢&#xff1f;所以下面就来看看为什么不是6&#xff0c;正确结果是如何计算出来的呢&#x…

非阻IO与EWOULDBLOCK EAGAIN

非阻塞读写 默认 socket 是阻塞的&#xff0c;读写函数 read, readv, recv, recvfrom, recvmsg 以及 write, writev, send, sendto, sendmsg 都有可能会阻塞。可以将 socket 描述字设为非阻塞&#xff0c;这样&#xff0c;当 socket 描述字未就绪时&#xff0c;调用以上读写函…

一起学windows phone7开发(二十一.二 Map控件的简单使用)

1. 注册地图&#xff1a; 在使用地图之前必须先申请register key https://www.bingmapsportal.com/ 将申请到的key填到这个属性&#xff0c;地图才可以正常使用。 CredentialsProvider 属性&#xff1a;填写申请到的Register key。 2.设置中心点&#xff1a; <my:Map Height…

UML类图五种关系与代码的对应关系

UML类图中的五种关系的耦合强弱比较&#xff1a;依赖<关联<聚合<组合<继承 一、依赖关系&#xff1a; &#xff08;一&#xff09;说明 虚线箭头 可描述为&#xff1a;Uses a 依赖是类的五种关系中耦合最小的一种关系。 因为在生成代码的时候&#xff0c;这两个关系…

使用 rapidxml 做配置文件

对于配置文件&#xff0c;一般会选用ini,xml 等等的配置格式。如何快速高效的从文件内读取自己想要的信息是每个做配置文件想要达到的效果。对以小型开发我们并不用时用到msxml这种重量级的解析器。那样会给自己添麻烦的。这里我推荐大家使用rapidxml。 之前使用tinyxml 感觉还…

水晶报表实现(一)

WINFORM下创建水晶报表&#xff1a; 1、新建一个“windows应用程序” 2、添加一个数据集&#xff08;.xsd&#xff09;文件&#xff0c;它是ADO.NET数据集&#xff0c;数据集用于在断开缓存中存储数据&#xff0c;它的结构类似于关系数据库的接口&#xff0c;它公开表、行和列的…

Java swing 实现下拉框和文本框同步显示

想要MyEclipse中的swing中实现下拉框和文本框实现&#xff0c;对下拉框创建MouseEvent、ItemEvent、ActionEvent private void xingbieMouseClicked(java.awt.event.MouseEvent evt) { // TODO add your handling code here: setSelectedItem(evt, this.xingbie1); } private v…

python image 转成字节_就是这么流弊!三行Python代码,让数据处理速度提高2到6倍

选自TowardsDataScience作者&#xff1a;George Seif本文转自机器之心(nearhuman2014)本文可以教你仅使用 3 行代码&#xff0c;大大加快数据预处理的速度。Python 是机器学习领域内的首选编程语言&#xff0c;它易于使用&#xff0c;也有很多出色的库来帮助你更快处理数据。但…