- 博客(72)
- 收藏
- 关注
原创 vxworks异常分析方法
https://blog.csdn.net/u014082689/article/details/80177051https://blog.csdn.net/zyboy2000/article/details/6856769https://www.doc88.com/p-3498097127608.htmlhttps://blog.csdn.net/zyboy2000/article/...
2019-10-01 16:28:43
798
1
转载 如何消除CACHE对DMA的影响?
随着社会的发展、人们生活水平的提高,人们对嵌入式计算机应用的要求也越来越高。因此,对嵌入式系统的性能要求也越来越高。明显体现在嵌入式系统的CPU速度的不断提高上。但问题也随之而来,嵌入式CPU的主频不断地提高,一方面加强了CPU的处理能力,另一方面,在速度上造成了与慢速的系统存储器极不相配的情况,从而影响了整个系统的性能。为了解决这个问题,引入了CACHE技术。CACHE是一种高速缓冲存储器,...
2019-02-27 22:10:01
570
转载 MMU在VxWorks中的实现
MMU在VxWorks中的实现1.内存管理单元MMUVxWorks提供两级虚内存支持:与VxWorks捆绑在一起的基本级和需要可选产品VxVMI的完全级。1.1指令和数据MMUPowerPC MMU允许指令和数据MMU被分别允许或禁止。在SELECT_MMU下的属性窗口的参数表中的参数USER_I_MMU_ENABLE和 USER_D_MMU_ENABLE缺省是被允许的。为了允许/禁止一个...
2019-02-27 21:45:55
1561
1
转载 关于L1 L2 Cache
CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即 将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存 储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CP...
2019-01-05 20:47:39
7124
转载 cache DMA L1 L2 的一些知识
程序的局部性原理:是指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域。局部性原理又表现为:时间局部性和空间局部性。时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。空间局部性是指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将...
2019-01-05 20:30:36
980
原创 CCP下位机驱动程序解析
便于理解CAN标定的工作原理main_functionccpInitCalPage //初始化标定页,将标定ROM数据(16K)读取到RAM(初始化标定RAM)while(1)if (CAN_bNewData(8))//如果有CAN消息CAN_vGetMsgObj(8,&o); //接收CAN消息ccpCommand(&o.ubData[0]); //处理接收到的
2017-06-16 07:53:27
5201
1
转载 Hard Fault 异常调试方法
1 Cortex-M3/4的Fault简介 Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址、写只读存储位置等)和非法的程序行为(比如除以0等)等造成的。常见的4种异常及产生异常的情况如下:Bus Fault:在fetch指令、数据读写、fetch中断向量或中断时存储恢复寄存器栈情况下,检测到内存访问错误则产生Bus Fault。M
2016-05-12 09:06:56
25702
3
原创 环形缓冲区的设计与实现
#include #define MAXSIZE 8 int ringbuf[MAXSIZE]; int readldx=0; int writeldx=0; int next_data_handle(int addr) { return (addr+1) == MAXSIZE ? 0:(addr+1)
2016-01-14 11:08:14
1065
转载 FAE职业规划
FAEField Application Engineer(现场应用工程师) ,其他的说法就叫技术支持 主要工作内容:1.提供产品技术支持,包括咨询解答、产品培训、现场技术指导、故障分析和排除等2.负责市场部与R&D的沟通与信息反馈,参与技术培训和技术研讨会3.收集客户反馈意见,制定市场需求,反馈给R&D,跟踪其进展和市场反应4.制定相关工具
2015-12-25 16:06:02
7375
转载 Z-Stack协议中几个重要概念的理解
1. 原语 ZigBee设备在工作时,各种不同的任务在不同的层次上执行,通过层的服务,完成所要执行的任务。每一层的服务主要完成两种功能:根据它的下层服务要求,为上层提供相应的服务;另一咱是根据上层的服务要求,对它的下层提供相应的服务。各项服务通过服务原语来实现。 可以把原语看作是API函数 是ZigBee中最基本的操作, 一般协议都有对原语进行程序实现 在自己开发系统时,只需要
2015-12-04 10:30:44
2271
转载 知其雄,守其雌,为天下溪
知其雄 守其雌 为天下溪为天下溪 常德不离 复归於婴儿知其白 守其黑 为天下式为天下式 常德不忒 复归於无极知其荣 守其辱 为天下谷为天下谷 常德乃足 复归於朴朴散则为器 圣人用之则为官长故大制不割************************************************************************虽知阳刚的显要,但仍能
2015-05-25 18:51:59
2111
原创 ubuntu9.10 更新源 (sudo apt-get install xxx提示E: Couldn't find package xxx)
deb http://old-releases.ubuntu.com/ubuntu/ karmic main restricted universe multiversedeb http://old-releases.ubuntu.com/ubuntu/ karmic-security main restricted universe multiversedeb http://ol
2014-12-31 09:04:43
2087
转载 SQLITE3数据库错误:database disk image is malformed
SQLite有一个很严重的缺点就是不提供Repair命令。导致死亡提示database disk image is malformed它的产生有很多种可能,比如,磁盘空间不足,还有就是写入数据过程中突然掉电等。官方对产生原因的一些说明: http://www.sqlite.org/lockingv3.html#how_to_corruptsqlite my.sqlite3sql
2014-12-30 16:41:01
1680
转载 在Sqlite中通过Replace来实现插入和更新
你可能在批量处理一个事务的时候,想要批量插入一系列的数据,但是这些数据当添加完一次之后,重新添加的时候,你不想要重新添加,只是想将原有的数据进行更新,例如:我想要通过Excel将一系列的图书导入到数据库中,而这些图书在你下一次编辑之后,重新导入,只是对原有的数据进行修改。以上是一个业务的场景。在MSSQL中,你可以使用诸如:IFNOT EXISTS(
2014-12-30 10:00:27
586
转载 搭建本地SVN版本管理工具
SVN是一款功能强大的版本控制系统,对于习惯于windows环境的中国工程师而言,使用TortoiseSVN是个不错的选择,其友好的界面和易用的操作使得其很容易掌握。从网址:http://tortoisesvn.net/downloads可以下载到最新版的TortoiseSVN,如果不习惯英文界面的话还有中文语言包可以安装,真是十分方便。对于局域网内有服务器支持的版本管理系
2014-12-30 09:44:13
469
转载 SQLite3命令操作与使用总结
SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令。本文档提供一个样使用sqlite3的简要说明.一.qlite3一些常用Sql语句操作创建表: create table 表名(元素名 类型,…); 删除表: drop table 表名; 插入数据: insert into
2014-12-29 16:22:12
4677
转载 软件框架设计
软件框架 -转( 本文源自《.NET通信框架的设计、实现与应用》书稿第一章内容,未经许可,不得转载。) 转自zhuweisky 框架和类库等概念的出现都是源于人们对复用的渴望。“不要重复发明轮子”,成了软件界的一句经典名言。从最初的单个函数源代码的复用,到面向对象中类的复用(通常以类库的形式体现),再到基于组件编程中二进制组件(.NET中是以IL程序集形式存在的)
2014-12-28 11:17:49
1390
转载 SQLite优化笔记
最近在折腾一个几十 G 的 SQLite 数据库,里边有十来个表,大都有数千万条数据,结果是一个 SELECT COUNT(*) 都一个小时没动静……于是翻了些资料优化了一下,以下是流水账:1、将数据库从 HDD 转移到 SSD 。由于 SSD 的 IOPS 是 HDD 的数十倍,某些查询可以有十倍以上的提升。不过 SSD 空间实在有限,如果能把索引独立存放就好了……从 HDD 到
2014-12-26 13:45:04
830
转载 SQLite3性能优化
SQLite3性能调整主要通过pragma指令来实现。比如调整:空间释放、磁盘同步、Cache大小等。一.空间释放1.如何查询:PRAGMA auto_vacuum;含义:查询数据库的auto-vacuum标记。2.标记含义:auto-vacuum标记的含义:正常情况下,当提交一个从数据库中删除数据的事务时,数据库文件不改变大小。未使用的文件
2014-12-26 13:07:25
1001
转载 嵌入式软件的重构思想
一. 概述:有人把《重构——改善既有代码的设计》和《设计模式》并列为“JAVA行业的圣经”,这实在并不为过,其实,还可以称为面向对象软件开发的圣经,本人对面向对象略知一二,多年都是在嵌入式领域,采用结构化设计开发软件,但是,通过培训和自学习《重构——改善既有代码的设计》这本书,对软件的开发有了更深的理解,甚至有茅塞顿开的感觉,怪不得我们的软件质量提不高,怪不得我们的软件难以维护,怪不得我们的单
2014-12-22 13:21:44
951
原创 软件重构的重要性
什么是重构重构,用最简单的一句话说:就是要在不改变系统功能的情况下,对系统的内部结构进行重新调整。重构的最直接目的在于改进软件系统的内部架构。一个好的结构可以更加适应于需求的变化,更好的满足客户的需求,最大限度的延长软件系统的生命周期。为什么要重构在不改变系统功能的情况下,改变系统的实现方式。为什么要这么做?投入精力不用来满足客户关心的需求,而是仅仅改变了软件的实现方式,这是否是在
2014-12-22 11:29:57
2547
原创 LWIP分析与socket编程方法
主要介绍TCP服务器的编写步骤方法,其流程如下所示1、创建一个基于流的socket2、设置本地服务器IP地址及端口号3、绑定创建的socket和本地IP地址及端口信息4、监听该socket(listen)5、接受该socket(accept)6、发送、接收数据经过了以上几个步骤以后,一个简单的服务器就创建起来了,TCP服务器主要是多了监听和接
2014-07-09 22:20:15
8816
2
原创 学习笔记 --- LINUX USB总线驱动框架分析
现象:把USB设备接到PC1. 右下角弹出"发现android phone"2. 跳出一个对话框,提示你安装驱动程序问1. 既然还没有"驱动程序",为何能知道是"android phone"答1. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone" 提示你安装的是"设备驱动程序"
2014-04-10 10:17:06
817
原创 学习笔记 --- LINUX TTY子系统框架分析
tty_init1 创建tty_cdev字符设备 cdev_init /*设置字符设备操作函数为tty_fops*/ cdev_add /* 注册字符设备*/2 创建console_cdev字符设备(用于终端打印) cdev_init /*设置字符设备操作函数为console_fops*/ cdev_add /
2014-04-05 13:58:49
1233
原创 学习笔记 --- LINUX UART串口驱动框架分析
驱动端: s3c2440_serial_probe //匹配"s3c2440-uart"时调用这个函数 uart_add_one_port tty_register_device //注册这个tty设备uart device_create_file 设备端: s3c24xx_init_uarts (cpu->init_uarts
2014-04-05 11:29:05
2129
转载 学习笔记 --- LINUX 应用调试之添加系统调用
一、原理要想自制系统调用,当然首相要做的就是明白系统调用的过程:我们拿open函数来举个例子:当用户空间执行open函数时,会通过glibc函数库的作用最终去调用sys_open函数,sys_open函数最终又会调用我们具体注册的open函数!那么这里最主要的就是glibc函数库干了些什么呢?其实它的作用就是当用户空间执行open函数时,会去执行一条swi #val指令,这条指令会使cpu
2014-04-04 12:27:46
697
转载 学习笔记 --- LINUX应用调试之修改内核输出应用程序的段错误信息
根据之前的调试我们知道,当应用程序出错的时候,会打印一些信息。但是有时候这些信息时不够的,那么我们能否配置内核使其输出更多的信息呢?答案是肯定的,本节我们就来详细讲一下:还记得我们在运行firstdrvtest的时候曾经输出过如下一些错误信息:Unable to handle kernel paging request at virtual address 56000050pgd
2014-04-04 11:55:41
1208
转载 学习笔记 --- LINUX应用调试之使用GDB
一、调试原理这里的gdb调试是在pc机上对在开发板上运行的程序进行调试。具体来说的话,在pc机上要运行gdb,在开发板上运行dbserver。gdb调试的时候,pc机上的gdb向开发板上的gdbserver发出命令,而开发板上的gdbserver就会向应用程序发出信号,使应用程序停下来或者完成其他一些工作!由此我们知道,pc机上要运行gdb,开发板上要运行gdbserver!二、安装g
2014-04-04 11:50:36
785
转载 学习笔记 --- LINUX 驱动调试之定位系统僵死
转自:http://liu1227787871.blog.163.com/blog/static/205363197201261142752997/在系统空间可能会发生这样一种情况:系统僵死!此时系统处于僵死状态,进程不再运行!那么有没有办法找到这个僵死的进程呢?答案是肯定的!这里要引入的就是系统时钟中断的概念:即便是在系统将死的情况下,系统时钟中断依然在以固定的频率发生,那么我们就可
2014-04-03 14:50:40
706
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人