自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

转载 arm启动过程详解

1、综述:    目前大多基于ARM芯片的系统都是一个比较复杂的片上系统,多数硬件模块都是可配置的,可以通过软件来设置其需要的工作状态。因此在运行用户的应用程序之前,需要由专门的一段代码来完成对系统的初始化。这一段代码就称为启动程序。    由于这类代码直接面对处理器内核和硬件控制器进行编程,一般都是用汇编语言。在ARM系统上电复位后,需要设置中断向量表、初始化各模式堆栈、设置系统时钟频率...

2019-01-14 17:34:02 5739 1

转载 ARM汇编指令集

跳转指令跳转指令用于实现程序流程的跳转在ARM程序中有以下两种方法可以实现程序流程的跳转:使用专门的跳转指令 直接向程序计数器PC(R15)写入跳转地址值。通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。ARM指令集中的跳转指令可以完...

2019-01-12 15:06:13 215

转载 arm寄存器解析

要介绍arm寄存器之前我们要先了解一下arm处理器的工作模式:Arm处理器有七种工作模式,为的是形成不同的使用级别,以防造成对系统的破坏。不同模式可以访问的寄存器不同,可以运行的指令不同。(1)usr(10000):普通应用程序运行的模式(应用程序)(2)FIQ(10001):快速中断模式,以处理快速情况,高速数据传输(3)IRQ(10010):外部中断模式,普通中断处理(4)...

2019-01-12 15:03:36 298

转载 初始化ARM处理器各模式下的堆栈指针SP(R13)

程序设计思路:通过状态寄存器与通用寄存器之间数据传输指令MRS/MSR实现,修改时应采用“读取-修改-写回”三个步骤来实现。每次只需修改相应的域即可,如本次程序只修改C控制域。同时应注意系统模式与用户模式共用SP,只需初始化其一即可。程序代码如下:(1)在GNU ARM开发环境下编程: .equ _ISR_STARTADDRESS, 0xC7FF000   @设置栈的内存基地址...

2019-01-12 15:00:35 3049

转载 Python中getopt()函数的使用

 在运行程序时,可能需要根据不同的条件,输入不同的命令行选项来实现不同的功能。目前有短选项和长选项两种格式。短选项格式为"-"加上单个字母选项;长选项为"--"加上一个单词。长格式是在Linux下引入的。许多Linux程序都支持这两种格式。在Python中提供了getopt模块很好的实现了对这两种用法的支持,而且使用简单。取得命令行参数  在使用之前,首先要取得命令行参数。使用sys模...

2019-01-09 09:27:02 213

转载 加解密,对称与非对称 签名 数字证书原理

文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理,最后演示使用makecert生成数字证书。如果发现文中有错误的地方,或者有什么地方说得不够清楚,欢迎指出! 1、基础...

2018-12-07 17:04:41 194

原创 C语言杂记

1.结构体赋值的一种方法typedef struct Fiber_t{    int a;    int b;    int c;} Fiber_t;int main() {    Fiber_t tmp;    tmp = (Fiber_t) { .a = 1, .b = 3,.c = 4 };    printf("%d,%d,%d",tmp.a,tmp.b,tmp....

2018-11-21 17:56:12 77

转载 Python模块安装方法

一、方法1: 单文件模块直接把文件拷贝到 $python_dir/Lib二、方法2: 多文件模块,带setup.py下载模块包,进行解压,进入模块文件夹,执行:python setup.py install三、 方法3:easy_install 方式 先下载ez_setup.py,运行python ez_setup 进行easy_install工具的安装,之后就可以使用easy...

2018-10-21 09:43:46 144

转载 Python模块搜索路径

最近在学习python的C++扩展(pybind11),写完一个扩展模块之后,想要在自己的环境中以后都能自动导入这个模块,而不用手动去添加路径(修改sys.path)应该怎么弄?以前最开始学习Python的时候看过这块内容,然而时间长了总会记忆不清,就再回顾了一遍。 概括来说,Python的自动搜索路径是这样的:1 程序的根目录2 PYTHONPATH环境变量设置的目录3 标准库的目录...

2018-10-21 09:31:12 201

原创 Python 的枚举 Enum

枚举是常用的功能,看看Python的枚举.from enum import EnumMonth = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) @uniqueclass Weekday(Enum): Sun = 0...

2018-10-21 09:10:56 99

转载 python type()动态创建类

 type()函数可以查看一个类型或变量的类型,Hello是一个class,它的类型就是type,而h是一个实例,它的类型就是class Hello。我们说class的定义是运行时动态创建的,而创建class的方法就是使用type()函数。type()函数既可以返回一个对象的类型,又可以创建出新的类型,比如,我们可以通过type()函数创建出Hello类,而无需通过class Hell...

2018-10-21 09:05:50 154

转载 使用Python搭建FTP服务器

SimpleHTTPServer 模块可以把你指定目录中的文件和文件夹以一个简单的 Web 页面的方式展示出来。假设我们需要以 Web 方式共享目录 /Users/Mike/Docker,只需要以下这个命令行就可以轻松实现:$ cd /Users/Mike/Docker$ python -m SimpleHTTPServerServing HTTP on 0.0.0.0 port 8...

2018-10-18 13:12:07 249

转载 Python struct模块

用处按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时,不能传输int,此时先将int转化为字节流,然后再发送; 按照指定格式将字节流转换为Python指定的数据类型; 处理二进制数据,如果用struct来处理文件的话,需要用’wb’,’rb’以二进制(字节流)写,读的方式来处理文件; 处理c语言中的结构体;struct模块中的函数函数 return...

2018-10-06 12:32:19 113

转载 Python杂谈: __init__.py的作用

我们经常在python的模块目录中会看到 "__init__.py"  这个文件,那么它到底有什么作用呢? 1. 标识该目录是一个python的模块包(module package)  如果你是使用python的相关IDE来进行开发,那么如果目录中存在该文件,该目录就会被识别为 module package 。2. 简化模块导入操作  假设我们的模块包的目录结构如下:...

2018-10-01 21:34:26 110

原创 python的时间模块

python有两个重要的时间模块,分别是time和datetime先看time模块表示时间的几种方法:1)时间元组:time.struct_time(tm_year=2016,   tm_mon=7,    tm_mday=21,                                                 tm_hour=22,       tm_min=32,...

2018-10-01 20:08:00 183

转载 python线程join的作用

几个事实1 python 默认参数创建线程后,不管主线程是否执行完毕,都会等待子线程执行完毕才一起退出,有无join结果一样2 如果创建线程,并且设置了daemon为true,即thread.setDaemon(True), 则主线程执行完毕后自动退出,不会等待子线程的执行结果。而且随着主线程退出,子线程也消亡。3 join方法的作用是阻塞,等待子线程结束,join方法有一个参数是ti...

2018-09-30 19:51:08 488

原创 python 多线程示例

#coding:utf-8import time, threading# 假定这是你的银行存款:balance = 0def change_it(n):    # 先存后取,结果应该为0:    global balance    balance = balance + n    balance = balance - nlock = threading.Lock()d...

2018-09-29 20:05:37 82

转载 SWIG 和 Python——c/c++与脚本交互

C 和 C++ 被公认为(理当如此)创建高性能代码的首选平台。对开发人员的一个常见要求是向脚本语言接口公开 C/C++ 代码,这正是 Simplified Wrapper and Interface Generator (SWIG) 的用武之地。SWIG 允许您向广泛的脚本语言公开 C/C++ 代码,包括 Ruby、Perl、Tcl 和 Python等。为了建立python的扩展模块,SWIG...

2018-09-29 17:13:04 1091

原创 python LOG系统

#! /usr/bin/env python# coding: utf-8import osimport logging class MyLogger(logging.Logger):    def __init__(self, filename='log/test.log',streamlevel=logging.DEBUG,filelevel=logging.INFO):    ...

2018-09-29 16:11:48 170

转载 聊一聊DDR3中的ODT(On-die termination)

ODT是什么鬼?为什么要用ODT?在很多关于DDR3的博文和介绍中都没有将清楚。在查阅了很多资料并仔细阅读DDR3的官方标准(JESD79-3A)之后,总算有点了头绪,下面来整理整理。1、首先ODT是什么?ODT(On-Die Termination),是从DDR2 SDRAM时代开始新增的功能。其允许用户通过读写MR1寄存器,来控制DDR3 SDRAM中内部的终端电阻的连接或者断开。在D...

2018-09-27 17:48:34 1327

转载 SSD背后的秘密:SSD基本工作原理

SSD主要由SSD控制器,FLASH存储阵列,板上DRAM(可选),以及跟HOST接口(诸如SATA,SAS, PCIe等)组成。SSD主控通过若干个通道(channel)并行操作多块FLASH颗粒,类似RAID0,大大提高底层的带宽。举个例子,假设主控与FLASH颗粒之间有8个通道,每个通道上挂载了一个闪存颗粒,HOST与FLASH之间数据传输速率为200MB/s。该闪存颗粒Page大小...

2018-09-25 19:29:11 2552

转载 线程同步(信号量和互斥量的区别)

“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这 个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信号...

2018-09-25 17:11:07 1569

转载 堆和栈的区别

一、预备知识—程序的内存分配    一个由C/C++编译的程序占用的内存分为以下几个部分    1、栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等。其    操作方式类似于数据结构中的栈。    2、堆区(heap)   —   一般由程序员分配释放,   若程序员不释放,程序结束时可能由OS回    收   。注意它与数据结构中的堆是两回事,分配...

2018-09-20 15:48:27 64

转载 C语言内存对齐

当你看到这个标题,仍想往下读的时候说明你已经开始关注数据在内存存储问题了。好吧,下面先想一个问题:struct  stu{char sex;int length;char name[10];};sizeof (struct  stu) = ???如果你的答案是:15 。那你该仔细看看下面的分析了!!!!一、概念  对齐跟数据在内存中的位置有关。如果一个变量的内存地址正...

2018-09-20 11:33:42 323

转载 C语言高级部分

一、内存大话题1.0、内存就是程序的立足之地,体现内存重要性。1.1、内存理解:内存物理看是有很多个Bank(就是行列阵式的存储芯片),每一个Bank的列就是位宽 ,每一行就是Words,则存储单元数量=行数(words)×列数(位宽)×Bank的数量;通常也用M×W的方式来表示芯片的容量(或者说是芯片的规格/组织结构)。M是以位宽为单位的总容量,单位是兆 ,W代表位宽, 单位是bit。计...

2018-09-20 11:24:04 483

转载 C/C++中#,##,__FILE__,__LINE__等的用法

#include <stdio.h>#include <string.h>#define CAT(N) X ## N //## 在宏定义中将两个字符连接起来,构成一个新的标识符#define PRINTF_XN(n) printf("X" # n "=%d\n",X ## n); //# 将对应变量字符串化//windows:#define filename...

2018-09-20 10:49:56 6503 1

原创 source insight使用技巧

source insight 自定义菜单打开base工程,编辑utils.em文件,把下面的函数添加到文件末尾在Options-->menu assignment,  左边选择Macro:Comments_orUn_gx   右边选择work,  insert //添加或取消杠星注释macro Comments_orUn_gx()  {   //用杠星注释多行,或取消杠...

2018-09-18 15:14:16 222

转载 linux进程通信,消息队列

在某个进程往一个队列写入消息之前,并不需要另外有个进程在该队列上等待消息的到达,这跟管道和FIFO是相反的,对于后两者来说,除非读出者已存在,否则先有写入者是没有意义的1、mq_open、mq_close和mq_unlink函数mq_open函数创建一个新的消息队列或者打开一个已存在的消息队列#include <mqueue.h>mqd_t mq_open(const c...

2018-09-13 11:32:52 166

转载 利用SecureCRT的VBScript进行自动化控制

在SecureCRT中使用VBSCRIPT脚本,确实能够提高我们的工作效率,并且可以实现完全的自动化。SecureCRT给我们提供了很好的平台——脚本工具制作和运行。下面就SecureCRT工具常用到的几个函数阐述如下:1. 在SecureCRT里,用得最多的应该就是crt.Screen,基本上很多操作都是基于屏幕的返回字来决定下一步该作何操作:(1):crt.Screen.WaitF...

2018-09-10 18:40:35 883

转载 链路层常见报文格式及长度

1. Ethernet帧(除去上层负载后长度为18字节)以太帧有好多种,我们最常用到的是Ethernet IIEthernet II即DIX 2.0:Xerox与DEC、Intel在1982年制定的以太网标准帧格式。Cisco名称为:ARPA  Ethernet II类型以太网帧的最小长度为64字节(6+6+2+46+4),最大长度为1518字节(6+6+2+1500+4)...

2018-08-28 19:46:09 1608

转载 container of()函数简介

在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源码时,像我们这样的一般人就会绝望了(这一堆都是什么呀? 函数还可以这样定义??? 怎么还有0呢???  哎,算了,还是放弃吧。。。)。 这就是内核大佬们厉害的地方,随便两行代码就让我们怀疑人生,凡是都需要一个过程,慢慢来吧。        其实,原理很简单:  已知...

2018-08-17 12:28:33 163

空空如也

空空如也

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

TA关注的人

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