mg4155com > mg4155线路检测手机版 > 开荒工具,GDB使用笔记

原标题:开荒工具,GDB使用笔记

浏览次数:116 时间:2019-10-04

QNX相关历史篇章:

  • QNX简介

QNX相关历史篇章:

  • QNX简介
  • QNX Neutrino微内核

============vim编辑器的尖端用法============ctrl+alt+t 独立重新张开三个新终端ctrl+shift+t 在本来的终极中再张开一个1.复制单行复制:在非插入格局下,输入yy多行复制:nyy n表示您要复制n行(从光标所在的行初始总计,包含该行)2.粘贴p3.撤消上一步的操作u4.恢复生机上一步操作ctrl+r5.剪切ddndd 剪切多行6.设置行号:set nu打消行号:set nonu7.安装自动缩进:set ai撤除缩进:set noai8.自动跳转到函数的源码中先安装ctags那一个软件 sudo apt-get install ctags第一步:在你的.c文件所在的目录中举行ctags -Qashqai那几个命令,会自动生成一个堪当tags的涉及文件第二步:配置文件/etc/vim/vimrc在50行下边加多set aiset tags+=./tagsset tags+=/usr/include/tags跻身到/usr/include目录下运作ctags -Vision GT展开项目中自由三个文书把光标移动到函数或变量名上在按ctrl+],重回ctrl+o9.查找字符串/你要搜求的字符串 回车 暗中认可找到字符串第二次面世的职务假使要看前面出现的职位,按n就足以了?你要查究的字符串 回车 默许找到字符串最终二次出现的职责10.替换字符串:s/旧字符串/新的字符串:n,ms/旧字符串/新的字符串 把第n行到第m行中全部相符须求的字符串替换到新的字符串11.自行补齐代码ctrl+p12.跳到内定行ngg 跳到第n行gg 调到第一行GG 调到终极一行13.vim的块方式走入块模式ctrl+v步入块模式之后,用键盘下边的左右左右键选用一块区域,然后输入大写的i,输入你想要插入的新闻,输入完结之后按下ESC退出,会自动援助你补齐在此以前选择的那些区域

=============GDB调节和测验程序===========1.调解代码初级方法加打字与印刷语句:在保养语句的光景,打字与印刷关键性的变量2.行使GDB那些软件工具来接济您调节和测量试验安装gdb sudo apt-get install gdb倘令你想要使用gdb来调解你的程序,编写翻译的时候必需抬高-g那么些选项gcc hello.c -o hello -g-std=c99-Wall-E-S-cgdb调节和测量检验代码常用的指令打字与印刷代码l 私下认可只打字与印刷前边10行l 1,20 打字与印刷1到20行设置断点b 行号 b 10程序运维r程序单步运维n或许sn不进来调用的函数内部s走入调用的函数内部打字与印刷变量的值p 变量名字查看当前断点音讯info b删除断点d追踪变量的值display 变量的名字继续运行程序c 继续运营程序,直到遇见下八个断点大概程序停止3.段不当的调整(需求用到core文件,core文件中包罗了发出段错误的音信)core文件也被称作宗旨转储文件发出段错误的根本原因是你写的代码中做客了地下内部存款和储蓄器步骤:先查看系统中core文件,ulimit -a获得结果是:core file size (blocks, -c) 0 表示无法生成core文件让系统能够自动生成core文件ulimit -c unlimited使用gdb来查找段错误gdb ./程序名 core文件的名字gdb ./test core使用经验:使用core来研究段错误并非全能的,不常候找到的音讯看不懂,那就不得不选拔守旧的主意,入眼查找指针,取地址的那多少个变量是不是操作有误

ARMv8-A相关历史篇章:

    1. Fundamentals of ARMv8-A

QNX Neutrino微内核procnto兑现了嵌入式实时系统中常用的骨干POSIX功用,并提供基本的音信传递服务。而未完结的POSIX功能(比方文件、设备IO)则能够经过可选的进程和分享库来提供。微内核富含了某在那之中央对象以及操作那一个指标的例程,那些目的定义得很现实,并且中度可选拔,整个操作系统在此之上创设的。

Interprocess Communication(IPC,进度间通讯)在QNX Neutrino从一个嵌入式实时系统向二个周详的POSIX系统变化起着关键的效率。IPC是就要基础中提供各样劳动的历程内聚在一块的粘合剂。在QNX中,音讯传递是IPC的首要情势,也提供了其他的样式,除非有独特的辨证,不然这么些形式也都以凭仗本地音讯传递而完毕的。QNX Neutrino提供以下情势的IPC:

==================生成库文件==================1.库文件分为两类:动态库文件 .so结尾的文本静态库文件 .a结尾的文件库文件的名字:libxxxxxxx.solibxxxxxx.a2.动态库步骤:先将.c文件编写翻译成.o gcc test.c -o test.o -c将上一步获得的.o文件进一步编写翻译获得动态库文件gcc -fPIC -shared test.o -o libxxxx.so以前的.c能够绝不了,只行使动态库就足以扭转程序了点子一:gcc main.c libxxxx.so -o main 当运转程序的时候要求加载动态库文件,需求将libxxx.so拷贝到系统特别用来存放动态库的文本夹里面不能够写反了gcc libxxxx.so main.c -o main方法二:gcc main.c -o main -L库文件所在的门路-l库文件的名字-L 指明库文件的路线-l 指明库的名字(去掉lib,去掉后缀)即便您不想将动态库文件放置到系统私下认可的渠道中,你能够选拔自个儿设置新的路线export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH 此例子是将日前路线.设置成情状变量3.静态库步骤:先将.c文件编写翻译成.o gcc test.c -o test.o -c将上一步获得的.o文件越来越编写翻译获得静态库文件ar -rcv libxxxx.a test.o (未有-o,顺序别搞反了)从前的.c能够毫无了,只行使静态库就足以扭转程序了措施一:gcc main.c libxxxx.a -o main 由于使用的是静态库,所以没有须求将库文件拷贝到碰到变量中不可能写反了gcc libxxxx.so main.c -o main方法二:gcc main.c -o main -L库文件所在的门径 -l库文件的名字-L 指明库文件的路线-l 指明库的名字(去掉lib,去掉后缀)4.动态库和静态库的区分动态库是在程序运营的时候加载到程序中去的,所以你在运转动态库编写翻译的前后相继的时候需求借助你的库文件不过静态库是前后相继编写翻译的时候就已经自行编写翻译进去了,所以运营的时候无需正视静态库文件

ARMv8-A体系架构定义了二种实践意况:AArch64和AArch32。AArch64是ARMv8-A唯有的,接纳64-bit通用贮存器,而AArch32后向包容ARMv7-A,使用32-bit通用存放器。GNU和Linux文档不时把AArch64也称作ARM64.

图片 1QNX微内核

图片 2IPC

2017-02-09==============Makefile的使用============1.Makefile的效果:理清复杂的巨型工程项目代码之间的维系管理大型工程项目源码

AArch32执市价况与ARMv7-A的落到实处包容,在那之中囊括设想化扩张、安全扩张、LPAE(Large Physical Address Extensions)。ARMv8-A连串结构允许实践不一的软件层,举例采取软件,操作系统内核,或利用AArch32/AArch64的Hypervisor层。ARMv8-A种类结构概念了AArch32和AArch64中的推行什么样相互。

QNX Neutrino微内核提供了一连串系统调用来支撑以下服务:

贰个线程调用MsgSend()往目的线程发送音讯时会阻塞住,直到指标线程调用MsgReceive(),举行消息管理并调用MsgReply()复原后才会消除阻塞。在QNX Neutrino中,服务器线程平时是循环的,等待接受客商端发过来的新闻。能够看看客商端线程和服务器线程在音信传递进度中的状态变化:

2.Makefile的应用对象:正视推行版本一:main:main.cgcc main.c -o main注意gcc前边是用tab键缩进的,不可能利用空格

  • AArch64下的Exception Levels协会如下图:

    图片 3

  • AArch32下的Exception Levels组织如下图:

    图片 4

  • 线程
  • 音信传递
  • 信号
  • 时钟
  • 定时器
  • 暂停管理
  • 信号量
  • 互斥锁
  • 条件变量
  • 屏蔽整个体系都以依靠这个系统调用来营造的,QNX完全可抢占,以至在消息传递的历程时也能被侵占,并在抢占实现后重操旧业从前的音信传递状态。微内核准现越轻便,越低价收缩不可抢占区间的长度,同一时间,代码量少,让消除复杂的多管理器难点也变得轻易。将系统服务富含进基本的前提是,系统服务独有三个短的执行路线长度。须求实践相当多行事的操作,可以提交外界的历程或线程去做。严酷依照下面的平整来划分内核和表面进度成效的话,微内核的周转时负载不见得就超越单内核。轻易基本的上下文切换的年月一点也不慢,比较于在经过间透过新闻传递来服务诉求的岁月,上下文的切换开支人微权轻。下图演示了在非对称多管理器内核抢占的细节,在那之中,中断禁止使用或取缔抢占的时刻非常长,日常为几百纳秒。

    图片 5QNX Neutrino抢占

图片 6

版本二:TARGET=mainSRCS=main.cCC=gcc图片 7图片 8 -o $

在AArch32状态下,Trusted OS在Secure EL3中执行,而在AArch64状态下,主要在Secure EL1中执行。

在支付应用程序时(实时、嵌入式、图形等),常常会用到POSIX线程模型来贯彻八个算法同不常间实行。线程是微内核中型Mini小的的实施和调治单元,进程能够感觉是线程的“容器”,定义了线程就要里面实行的“地址空间”,进度会蕴藏二个或八个线程。应用程序中的线程有望互相独立,也恐怕紧凑的关联,QNX Neutrino提供了增进的IPC和一齐服务。当中不关乎微内核线程调用的POSIX接口有如下:

  1. 顾客端线程

本子三:(自动搜索全部的.c)TALX570GET=mainSRCS=图片 9%20CC%3Dgcc):图片 10 图片 11wildcard *.c使用wildcard这些函数相配全数的.c结尾的文书

图片 12

  • 顾客端线程调用MsgSend()后,如果服务器线程还没调用MsgReceive(),顾客端线程状态则为SEND blocked,一旦服务器线程调用了MsgReceive(),顾客端线程状态变为REPLY blocked,当服务器线程实行MsgReply()后,客商端线程状态就成为了READY
  • 如若客商端线程调用MsgSend()后,而服务器线程正阻塞在MsgReceive()上, 则顾客端线程状态一向跳过SEND blocked,直接造成REPLY blocked
  • 当服务器线程退步、退出、恐怕消失了,顾客端线程状态成为READY,此时MsgSend()会回去三个谬误值。

版本四:TARGET=mainSRCS=图片 13%20OBJ%3D)(patsubst %.c,%.o,图片 14)%20CC%3Dgcc):图片 15 图片 16patsubst那一个函数替换.c为.o

下表中的POSIX接口,微内核中有对应的接口实现平等的效率,允许本身来选取:

  1. 服务器线程

版本五:TARGET=mainSRCS=图片 17%20OBJ%3D)(patsubst %.c,%.o,图片 18)%20CC%3Dgcc):图片 19 图片 20@%.o:%.c图片 21< -o 图片 22:图片 23 图片 24 -c 有问题图片 25 -o 图片 26< 终级注重图片 27@

图片 28

  • 服务器线程调用MsgReceive()时,当未有线程给它发送音讯,它的景况为RECEIVE blocked,当无线程发送时形成READY
  • 服务器线程调用MsgReceive()时,当已经有别的线程给它发送过新闻,MsgReceive()会立马重回,而不会卡住;
  • 服务器线程调用MsgReply()时,不会阻塞;

版本六:TARGET=testSRCS=图片 29%20OBJ%3D)(patsubst %.c, %.o, 图片 30)%20CC%3Dgcc):图片 31 图片 32@%.o:%.c图片 33@ -c $<

固然经过中的线程分享进度地址空间中的全部剧情,但各种线程依然有一部分“私有”数据,在一些情形下,那几个私有多少在基本中倍受保证,举个例子线程ID/进程ID;而任何的也许不受爱护,比方线程的库房。值得注意的个人数据有:

开荒工具,GDB使用笔记。QNX的新闻服务,是间接将消息从叁个线程的地址空间拷贝到另三个线程地址空间,不必要中间缓冲,由此新闻传递的本性类似底层硬件的内部存款和储蓄器带宽。新闻内容对根本来讲未有特殊的含义,只对新闻的发送和接收者才有意义,当然,QNX也提供了定义突出的音信类型,以便能增添或代表系统提供的劳务。新闻在拷贝的时候,援助分块传输,也便是不须要接二连三的缓冲区,发送和收受线程能够钦赐向量表,在这几个表中去内定新闻在内部存款和储蓄器中的地点。这么些与DMA的scatter/gather体制仿佛。

clean:rm *.o $

本文由mg4155com发布于mg4155线路检测手机版,转载请注明出处:开荒工具,GDB使用笔记

关键词:

上一篇:嵌入式程序员如何陈设就业之路mg4155:,嵌入式

下一篇:数字三角排序,从登记到推送成功