自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (3)
  • 收藏
  • 关注

原创 depth-of-focus,DOF概念

聚焦深度DOF

2021-05-16 12:03:37 1583

原创 20、执行期类型识别

执行期类型识别:Runtime Type Identification,RTTI其中gen是 generic的简称,用来表现一个overloaded function。于是只要你有一个变量,或是类型type *的成员(并知道它代表一个函数),你就必须决定其特定的derived type是否为fct或是gen。在2.0 导入const member functions之前,conversion运算符不能够被overloaded,因为它们不使用参数。

2025-04-14 08:56:30 566

原创 19、Template

template是最令程序员挫败的一个主题,这一节的聚焦放在template的语意上面,我们将讨论templates在编译系统中“何时”、“为什么”以及“如何”发挥其功能。我们使用“实例化”来表示进程(process)将真正的类型和表达式绑定到template相关形式参数(formal parameters)上头。举个例子。

2025-03-14 09:06:04 1018

原创 18、new和delete运算符

但事实上它是由两个步骤完成的:1)通过适当的new运算符函数实例,配置所需的内存://调用函数库中的new运算符2)将配置得来的对象设立初值:*pi = 5;更进一步地说,初始化操作应该在内存配置成功后才执行://new 运算符地两个分离步骤int *pi;*pi = 5;以constructor来配置一个class object,情况类似。例如:在这里,如果以new运算符配置object,而其constructor抛出一个exception,配置得来的内存就会被释放掉。

2025-03-02 15:43:12 324

原创 17、对象的构造和析构

下面是cfront的输出。2)类似情况,在每一个需要静态的内存释放操作(static dealllocation)的文件中,产生一个__std()函数(译注:我想std就是static deallocation的缩写),内含必要的destructor调用操作,或是其inline expansions。3)提供一组runtime library “munch”函数:一个_main()函数(用以调用可执行文件中的所有__sti()函数),以及一个exit()函数(以类似的方式调用所有的__std()函数)。

2025-02-26 08:44:13 919

原创 3、qtcreator和makefile项目一起使用

部分老项目的build系统是makefile,这些老项目在维护期间也需要IDE单步调试。本文介绍在Linux环境中qtcreator和makefile项目如何一起使用。

2025-01-24 13:57:50 425 1

原创 16、继承体系下的对象构造

当我们定义一个object如下:T object;在这里,不明显的是constructor的调用真正伴随了什么?Constructor可能含有大量的隐藏代码,因为每个编译器会扩充每一个constructor,扩充的程度视class T的继承体系而定。这一节中,我要从“C++语言对classes所保证的语意”这个角度,探讨constructor扩充的必要性,如下所示的代码。

2025-01-15 09:02:38 976

原创 12、VxWorks6.9解决pentium4打印浮点数失败问题

下面的例子中,采用IEEE 754的标准,解析内存中存储的8字节的双精度double值。//E + 中间数1023 = 2+1023 = 1025 = 0x401 = 0b0100 0000 0001。double转换成int失败,是由于FSTP汇编指令将double的数据强制放到int的内存中失败。//E + 中间数127 = 2+127 = 129 = 0x81 = 0b1000 0001。//M 存储舍弃小数点前的1 M = 011。//M 存储舍弃小数点前的1 M = 011。

2025-01-10 15:17:13 431

原创 11、VxWorks6.9的VIP_pentium4配置说明

/配置WDB,用于调试//配置PROFILE_DEVELOPMENT,用于调试//配置内建的符号表//使能telnet服务器,用于主机通过telnet连接目标板shell//包含ifconfig命令//ifconfig命令//ping命令//包括netstat命令添加如下的组件内容模块添加SNTP client请求的服务器IPv4地址(填写具体的上位机ubuntu的地址)对于该测试,见文档《VxWorks6.9平台SNTP配置和测试》

2025-01-08 16:57:55 695

原创 10、VxWorks6.9调试User-Define DKM工程

本文解决VxWorks6.9软件第三方Makefile程序在DKM模式下如何调试的问题。

2025-01-08 11:19:24 268

转载 15、无继承情况的对象构造

public:private:这个经过封装的Point class,其大小并没有改变,还是三个连续的float。是的,不论是private或public存取层,或是member function的声明,都不会占用额外的对象空间。

2024-12-30 08:45:54 600

原创 9、VxWorks6.9平台SNTP配置和测试方法

1)VxWorks中时钟的概念我们在VxWorks中输入相关的命令如下,获得结果如下。有意思的是tickGet/time=946990/15778=60。这句话可以解读成如下的意思,time shell command获取的时间单位是秒,图中是15778秒。tickGet shell command获取的时间单位是1/60秒,图中也是15778秒。用这个接口的时钟精度是1/60。此外,每次重启PPC,时间重新计数,下面是重启后查看时间的测试结果。

2024-12-05 09:44:17 568

原创 8、Vxworks6.9 simpc模式RTP调用静态链接库

本文将在Workbench3.3+VxWorks6.9平台上,采用仿真1模式(VxWorks6.9 Simulator),进行RTP模式的动态链接库创建、单步调试。

2024-11-21 09:25:26 974

原创 7、VxWorks6.9 simpc模式RTP调试动态链接库

本文将在Workbench3.3+VxWorks6.9平台上,采用仿真1模式(VxWorks6.9 Simulator),进行RTP模式的动态链接库创建、单步调试。

2024-11-20 10:24:16 643

原创 14、Inline Functions

理论上,一个比较干净的做法是使用inline函数来set和get函数由于我们受限只能在上述的两个函数中对_x直接存取,因此也就将稍后可能发生的data members的改变所带来的冲击最小化的。如果把这些存取函数声明为inline,我们就可以继续保持直接存取members的那种高效率---同时我们兼顾了函数的封装性。此外,加法运算符不再需要被声明为Point的一个friend。

2024-11-20 08:49:02 418

原创 13、指向Member Function的指针

或者和指向member function的指针声明语法,以及指向“member selection运算符”的指针,其作用是作为this指针的空间保留者。这也是为什么static member functions(没有this指针)的类型是“函数指针”,而不是“指向member function的指针”之故。

2024-11-14 08:56:04 511

原创 6、VxWorks6.9调试User-Define RTP工程

1)host机器,即windows8虚拟机,装有完整的wind river workbench3.3和VxWorks6.9.4。2)target机器,即VxWorks6.9.4虚拟机。

2024-11-13 10:10:00 242

原创 5、VxWorks6.9采用IDE单步调试

1)host机器,即windows8虚拟机,装有完整的wind river workbench3.3和VxWorks6.9.4。2)target机器,即VxWorks6.9.4虚拟机。

2024-11-13 10:04:46 203

原创 12、Virtual Member Functions

为了支持virtual function机制,必须首先能够对于多态对象有某种形式的“执行期类型判断(runtime type resolution)”。也就是说以下的调用操作需要ptr在执行期的某些关键信息。ptr->z();如此一来,才能够找到并调用z()的适当实例。或许最直接了当但是成本最高的解决方法是把必要的信息加在ptr身上。在这样的策略下,一个指针(或是一个reference)持有两项信息。它所参考的对象的地址对象类型的某种结构,用以正确决议出z()函数实例的地址。

2024-11-08 08:54:45 885

原创 4、VxWorks6.9虚拟机网络测试

Wind River 提供的FTP服务器,BSP和VxWorks的镜像文件,虚拟机VMware Workstation Pro 17,挂载卸载虚拟磁盘工具ImDiskTk20240210,

2024-10-29 11:15:00 399

原创 3、WMWare 17虚拟机BSP和Image构建

1、工具介绍WindRiver Workbench3.3 + VxWorks6.9.4,2、详细操作步骤2.1 创建并配置BSP选择拷贝文件到工程中默认的BSP可以编译配置BSP的环节参考CSDN的博客,《VxWorks6.9在VMWare虚拟机运行》,具体参考“2.2 修改config.h内容-->2.8编译”3、工具包文件

2024-10-29 10:59:18 252

原创 2、MS-DOS系统构建

MS-DOS镜像文件,他的版本是6.2版本。挂载卸载虚拟磁盘工具ImDiskTk20240210,虚拟机VMware Workstation Pro 17,

2024-10-29 10:54:22 6

原创 1、VxWorks6.9虚拟机环境构建

为了开发VxWorks6.9.4的网络应用程序,并脱离对PowerPC板卡的依赖,我们需要构建VxWorks6.9.4虚拟机环境。我们期望VxWorks6.9.4和Wind River Workbench3.3安装在Windows 8.0上。我们也期望VxWorks6.9.4能够运行在WMWare Workstation 17 Pro上。为了实现上面的目标,采用的技术路线是:1)安装MS-DOS,让VxWorks的bootrom存放在MS-DOS的磁盘上。并有MS-DOS启动bootrom。

2024-10-29 10:18:15 179

原创 11、Member的各种调用方式

由于member function可以被重载化(overload),所以需要更广泛的mangling 手法,以提供绝对独一无二的名称。1)改写函数的signature(译注:指的是函数原型)以安插一个额外的参数到member function中,用以提供一个存取管道,使class object得以将此函数调用。C++的设计准则之一就是:nonstatic member function至少必须和一般的nonmember function有相同的效率。它提供了一个意想不到的好处:称为callback函数。

2024-10-25 08:46:40 677 1

原创 10、继承与Data Member

在C++继承模型中,一个derived class object所表现出来的东西,是其自己的members加上其base class(es) members的总和。至于derived class members和base class(es) members的排列顺序,则并未在C++ Standard中强制规定,理论上编译器可以自己安排。

2024-10-14 09:04:22 787

原创 2. ZMQ不同样式的路由方式

1、ZMQ_REQclientserviceservicesserviceDirectionLast peerBlock2、ZMQ_REPDirectionLast peerzmq_sendDirectionBlockDirectionSee text在以上的字段,对于该socket处于bind()或者connect()状态,此时路由是什么效果呢?

2024-09-25 13:21:52 884

原创 1. ZMQ发送和接收数据消息格式总结

透传.When a 'ZMQ_DEALER' socket is connected to a 'ZMQ_REP' socket each message sent must consist of an empty message part, the delimiter, followed by one or more body parts.完全是透传的样式,经过该样式的socket不添加或者去除任何消息。添加第1帧,内容是发送端的ID地址,然后告知应用层。去掉第1帧,第1帧作为路由地址发送。

2024-09-25 08:24:31 534

原创 ZMQ专栏

在学习和使用ZMQ的过程中,记录ZMQ最精华的部分。我对ZMQ的本质理解是什么?即ZMQ定义了样式通信,这种样式通信又可以转换成数据收发(发送端和接收端),这种数据收发又可以转换成数据消息格式和路由。因此ZMQ的本质最终是数据消息格式和路由。

2024-09-25 08:17:25 149

原创 9、Data Member的存取

答案是“当Point3d是一个derived class,而继承结构中有一个virtual base class,并且被存取的member(如x)是一个从该virtual base class继承而来的member”时,就会有重大的差异。这会在接下来的章节进行说明(继承对于member布局的影响)。若取一个static data member的地址,会得到一个指向其数据类型的指针,而不是一个指向其class member的指针,因为static member并不含有一个class object之中。

2024-09-22 17:24:54 807

原创 8、Data Member的绑定

但这并不一直都是正确的,而是C++2.0的Reference manual修订后才是正确的。这个古老的语言规则被称为“member rewriting rule”,大意是“一个inline函数实体,在整个class声明未被完全看见之前,是不会被评估求值(evaluated)的”。当后续再有length的nested typedef声明出现时,C++ Standard就把稍早的绑定标记为非法。Argument list中的名称还是会在他们第一次遭遇时被适当的决议(resolved)了。

2024-09-22 12:04:33 192

原创 7、类的大小

在GCC x86 64Bit中,一个empty virtual base class被视作derived class object最开头的一部分,也就是说它没有花费任何的额外空间。上述的X,Y,Z,A中没有任何一个class内含有明显的数据,其间只表示了继承关系,所以有人认为每个class的大小应该是0。在32位计算机中,通常alignment为4bytes(32位),以使bus的“运输量”达到最高的效率。对于C++的类而言,类的大小似乎并非完全由用户控制,我们看看如下的代码。

2024-09-14 08:17:39 417

原创 6、成员们的初始化列表

事实上,有些微妙的地方需要注意,list中的项目顺序是由class中members声明顺序决定的,而不是initialization list中的编排顺序决定的。在本例子中,_name被声明在_cnt之前,所以它的初始化较早。问题在于,由于声明顺序的缘故,initialization list中的i(j)其实要比j(val)更早的执行,但是j一直没有初始值,所以i(j)的执行结果导致i无法预知其值。在下面的情况下,为了让你的程序被顺序的编译,你必须使用member initialization list。

2024-09-11 08:42:36 279

原创 5、程序转换语意学

如果Point3d class声明一个或一个以上的virtual functions,或内含一个virtual base class,那么使用上述的函数将会导致那些“被编译器产生的内部members”的初值改写。把一个class object当作参数传给一个函数(或是作为一个函数的返回值),如下的代码要求局部的实例x0以memberwise的方式将xx当作初值。在编译器的实现技术上,有一种策略是导入临时性object,并调用copy constructor将它初始化,然后将此临时性object交给函数。

2024-09-05 08:48:27 567

原创 4、Copy Constructor的构造操作

1)当一个class内含一个member object而后者的class声明一个copy constructor时(不论是class设计者显示的声明,还是编译器隐式的合成),例如下面的代码,String显示的声明了,而Word隐式的合成。然后,Bear class object以另一个Bear class object作为初值,我可以看到yogi的vptr值拷贝给了winnie的vptr了,这样的操作是安全的,它是通过编译器合成的拷贝构造函数完成的。对于Word verb = noun;

2024-08-29 08:58:09 1155

原创 3、Default Constructor的构造操作

如果一个class没有任何的constructor,但是它内含一个member object,而后者有一个default constructor,那么这个class 的implicit default constructor就是nontrivial,编译器需要为该class合成一个default constructor。例如如下的代码,代码中A,B,C均需要合成一个default constructor,并在里面安插那些“允许每一个virtual base class的执行期存取操作”的代码。

2024-08-18 11:01:12 786

原创 2、C++的指针作用

不同类型所产生的指针在C++语言中有什么作用?带着这个疑问,对C++的指针进行简介。

2024-08-08 21:51:31 465

原创 1、 C++对象模型简介

为什么C++可以“自动完成”这么多事情,多态的底层实现是什么样子的,理解了C++的对象模型后,可以写出比较没有错误且比较有效的代码。

2024-08-02 08:57:52 1053

原创 ucoreOS操作系统博客导航栏

跟着清华大学的学堂在线公开课,对操作系统的原理和实验有了更加深刻的理解。回顾自己2年来从不懂实验的基本的宏定义,到能用预编译指令展开宏,从代码深奥无比,支离破碎的理解,到能全局的理解一个或多个实验。其中最值得肯定的是走了一条正确的道路,即理论加实验学习,尤其提高实验的投入时间。其次,清华大学的操作系统学习是一门十分的系统课程,有利于提高系统思维。

2024-04-03 07:50:13 605

原创 实验三 虚拟内存管理-实验部分

本文从虚拟存储原理、页面置换算法、虚拟存储实践以及代码解析的角度介绍ucore操作系统的虚拟存储技术

2024-03-10 15:38:35 1248

原创 实验二 物理内存管理-实验部分

在X86系统中,正好支持分段和分页这两种机制。将逻辑地址转换成线程地址空间的过程,称为分段,而将线性地址转换成物理地址空间的过程称为分页。分段和分页的过程如下图所示。图3-1 分段和分页分段提供一种划分处理器地址内存空间成更小的保护地址空间,这种地址空间称为段。段可以用来维持一个程序的代码、数据、堆栈。或者用来维持一个系统的数据结构,如TSS、LDT。

2024-02-17 12:33:33 1268 2

1、MS-DOS 6.2版本 2、磁盘挂载工具 3、镜像文件

包含以下文件 MS-DOS ImDiskTk-x64 bootrom、VxWorks、VxWorks.sym、vxsys.com、vxload.com

2024-10-29

devicetree-specification-v0.2.pdf

This specification is targeted towards the requirements of embedded systems. An embedded system typically consists of system hardware, an operating system, and application software that are custom designed to perform a fixed, specific set of tasks. This is unlike general purpose computers, which are designed to be customized by a user with a variety of software and I/O devices.

2020-06-08

H.264视频字节流解析成NALU

该程序完成从XXX.h264编码文件中解析出视频的基本单元NALU,NALU是H.264码流解码的基本单元。NALU包括起始码和数据部分,对于起始码,程序可以解析出0x000001或者0x00000001开头的NALU。程序由main()、int parse_h264_to_nal(char *url)、int getNextNALU(FILE *h264bytestream,NALU_t *nalu)这三个函数构成。C/C++语言代码风格,能够直接在window上或者linux上编译运行。

2020-08-18

Java文件上传与下载的例子

java下实现文件客户端与服务器之间的上传与下载;

2015-09-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除