使用cmake-tools 在vscode 中编译CMakeList项目 1、cmake documentationhttps://cmake.org/cmake/help/latest/index.html2、Creating and using shared libraries with different compilers on different operating systemshttp://gernotklingler.com/blog/...
【SylixOS】DRM中的Plane概念 1. 简介 11.1 Plane的历史 11.2 Plane的功能 11.3 Plane的类型 11.4 Plane的测试用例 2 简介在DRM(Direct Rendering Manager)中,学习了drmModePageFlip和drmModeSetCrtc的用法。但是这两个接口都只能全屏显示Framebuffer的内容,如何才能在屏幕上只显示fra...
【SylixOS】Qt 基于FrameBuffer渲染界面 1.简介Qt是目前一款比较主流的人机交互界面库。它有很强的跨平台能力,可移植性好,被广泛应用在PC端以及嵌入式领域。Qt可大致分为两部分:QtGui和QtCore,QtGui提供开发人员一套完整的开发控件,可以快速开发客户端界面;QtCore则负责底层渲染以及事件驱动等。而本章节主要介绍的是Qt的渲染机制,在Qt5中将底层渲染和窗口管理大致分为:SylixOSFB、LinuxFB、KMS、XC...
【SylixOS】QT之绘图引擎QPainterEngine 简介在QT中所有的绘图操作都是通过QPainter来完成的,甚至QT自身所有控件窗口的绘制都是通过QPainter绘制显示。另外QPainterDevice为作为绘图设备存在。其实最后所有的操作都是通过QT自身的QPainterEngine来实现一些的绘制渲染。绘制流程 QPainter提供绘制接口 对于QPainter来说,内部有一个状态堆栈,任何时候都可以通过调用 save()...
【SylixOS】QT-QWS流程介绍 QWS简介QWS(QT Windows System)是QT自行开发的窗口系统,体系结构类似X Windows的C/S结构。QWS Server在物理设备上显示,QWS Client实现界面,两者通过socket进行彼此的通讯。在很多嵌入式系统里,QT程序基本上都是用QWS来实现,这样保证程序的可移植性。QWSServer服务端QT程序没有严格区分服务端程序和客户端程序,通知指定-plat...
【SylixOS】QT程序启动加载流程简介(一) QT应用程序启动加载流程简介 QWS与QPA启动客户端程序区别 QWS(Qt Window System)介绍 QWS(Qt Windows System)是QT自行开发的窗口系统,体系结构类似X Windows的C/S结构。QWS Server在物理设备上显示,QWS Client实现界面,两者通过socket进行彼此的通讯。在很多嵌入式系统里,QT程序基本上都是用QWS来实...
【编程语言】const限定词的用法 面向对象是C++的重要特性.但是c++在c的基础上新增加的几点优化也是很耀眼的就const直接可以取代c中的#define以下几点很重要,学不好后果也也很严重const1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j; //非法,导致编译错误 j=i; //合法2. 必须初始化
【UNIX】内核对内核空间内存的管理以及对用户进程的堆内存分布 常用的内核内存分配函数 1)_get_free_pages是最原始的内存分配方式,至二级从伙伴系统中获取原始页框,返回值为第一个页框的起始地址。_get_free_pages在实现上只是封装了alloc_pages函数,而alloc_pages分配的长度为1 2)Kmem_cache_alloc是基于slab分配器的一种内存分配方式,适用于反复分配释放同
【UNIX】内核对进程的调度机制 (调度器) 对于一般进程,CPU的使用时间都是系统平均分配给每一个进程的,因此这种公平分享都从进程的角度出发的。 1) 调度时机:什么情况下,什么时候进行调度2) 调度的策略:根据什么准则选取下一个进程3) 调度方式:是“可剥夺”还是“不可剥夺”,当正在运行的进程并不自愿放弃对从CPU 的使用权时,是否强制性的暂时剥夺其使用权,停止其运行而给其他进程一个机会
【编程语言】进程中栈空间的参数返回值以及局部变量的分布 在进程中对于局部变量是怎么分配的,以及函数是怎么调用的其实也就是讲解栈区的具体使用过程。( 下面代码图摘要于网络) 首先,我们要知道,栈中存放的是一个个被调函数所对应的堆栈帧,当函数fun1被调用,则fun1的堆栈帧入栈,fun1返回时,fun1的堆栈帧出栈。什么是堆栈帧呢,堆栈帧其实就是保存被调函数返回时下一条执行指令的指针、主调函数的堆栈帧的指针、主调函数传递给被调函数的
【UNIX】从一个可执行文件的生成到进程在内存中分布 (上)/可执行文件的生成 一个源程序要生成可执行文件,需要通过编译器来实现,而编译器所起的作用就是把程序员编写的高级语言翻译成机器能读懂的低级语言(二进制代码),这里编译器起到翻译的作用。在Linux操作系统中采用的是GCC交叉编译工具。 虽然说GCC是个编译器,但是使用GCC从一个C语言程序生成可执行文件不仅仅只是编译过程,而是要经过四个相互关联的步骤:预处理(也称预编译,preprocessing)、编译(co
【编程语言】变量的定义以及与extern声明的区别 变量的定义与声明的区别 首先,变量的定义一定是发生在变量声明(extern)之前,变量的声明可以有多个,但是变量的定义只有一种,变量的声明影响变量的引用和作用域,而变量的定义则只是单方面的创建变量以及初始化赋值等,若变量再定义时没有初始化,则会在文件执行编译的时候随机赋值1)变量在定义时分配内存空间,同时也可能进行赋初值2)变量在声明时不会分配内存空间,变量的声明只是声
【编程语言】变量的存储时期/作用域以及static/extern的用法 存储类: 存储时期 链接 内存管理 对于一个变量(不同的存储类型)可以通过存储时期,链接属性,以及相应的作用域来描述它。存储时期就是变量在内存中的保留时间,变量的作用域和链接在一起表明程序的哪些部分可以通过变量名来使用该变量。于是就有了不通过的存储时期,链接属性,以及作用域的组合 【1】存储时期(变量的生命期,表示存取一
【编程语言】诚迈试题二 1. linux内核内存分配方式 Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间 2. new/delete和malloc/free的区别 (1)操作对象有所不同。 malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。对于非内部数据类的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动
【系统移植】U_BOOT移植 U-BOOT移植 Bootloader引导启动 0x0000_0000 0x0000_8000 32KB IROM0x0002_0000 0x0003_8000 96KB IRAM0x0003_4000 0x0003_8000 16KB BL1 The boot loader is divided into t
从普通的函数调用到操作系统内核空间的访问 从普通的函数调用到操作系统内核空间的访问 首先通过了解认识函数的原理来体会函数的调用 1)函数首先什么是函数,函数是用于完成特定任务的程序代码自包含单元(这里的自包含单元听着可能不懂,其实就是代码段{}花括号里面的每条代码,以分号结尾的集合,它们是为了完成某种特定的功能而去编写的程序)那么在为什么要使用函数,一般来说,函数的使用可以省略代码的重复编写,这里就涉及到函数的调用
【Linux界面】配置VI颜色,秀出代码世界的情趣 作为一个Linux敲代码的人来说长期要与vi界面打交道,对着枯燥的代码,而且还没有一点颜色可言,除了白色还是白色,背景图片也是经典的紫色,多乏味,我们敲代码的也可以也有自己的生活情趣,不管是一个界面,我们也要设计出自己的理想图形,这样才可以更好的舒服的去看代码敲代码,变出牛叉的程序来【1】当我们打开一个vi界面时可以通过点击编辑的配置文件选项来设置自己的个性,下面将通过一个个的图形界面
ARM平台环境搭建与交叉编译的实现 通过启动的打断机制可以使得arm平台在没有操作系统的情况下的驱动加载,直接通过GPIO和一些特定的IO引脚与片内外设的控制器或者直接挂载在系统的数据总线和地址总线上,当我们通过eclipse编译后生成的bin文件通过串口终端下载到内存地址的0x20008000处,此处的0x20008000是u-boot引导内核启动的起始地址,所以当我们把编译好的bin文件下载到此处,之后再在此处运行,从而可以驱动