嵌入式
文章平均质量分 56
可乐虎
嵌入式!
展开
-
Arm nandflash&norflash启动原理
部分ARM9的CPU内部都集成有一个SRAM,SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。这样他不需要初始化就能够直接使用。这与我们在外部扩展的大容量的SDRAM是不一样的,外部大容量的SDRAM是需要初始化后才能使用的,这点大家务必要搞清楚。这点在我做过移植的处理器:s3c2410(arm920t),s3c2440(arm92转载 2015-09-17 23:51:53 · 1699 阅读 · 1 评论 -
详解μC/OS-II如何检测任务堆栈实际使用情况——即如何设置ucosii任务堆栈大小
不少屌丝同学都有类似经历吧,在使用ucosii创建任务时,关于任务堆栈大小设为多大合适搞的不清不楚,郁闷之下就随便整个数,比如就1024吧,呵呵,反正也没见得出问题,那就不多想了。 我想大多数同学都是这样做的吧。这样只是因为在一般情况下,1024确实已经足够大了,堆栈溢出的可能性很小而已。那么,如果你任务实际使用率只有很小的百分之几,一旦被你知道了,你会痛心不?我想你不痛心,μC原创 2014-11-22 22:41:20 · 4008 阅读 · 1 评论 -
μC/OS-II事件标志组的入门级使用方法
试想如下情况,有A、B、C三个事件,当A、B都满足某一条件(或执行某一动作)后C才能得到运行(持续运行或运行一次后继续等待A、B条件再次满足后再运行)。如果需要实现这样的功能,就可以用事件标志组来实现了!具体看实例://定义一个事件标志OS_FLAG_GRP *Sem_Flg = 0;//LED0任务void led0_task(void *pdata){原创 2014-11-30 23:45:50 · 2260 阅读 · 0 评论 -
详解μC/OS-II软件定时器入门使用方法
μC/OS-II软件定时器的基本使用主要分为两步:创建与启动一、基本知识1、创建定时器OS_TMR *OSTmrCreate ( INT32U dly, INT32U period, INT8U opt, OS_TMR_CALLBA原创 2014-11-29 22:32:22 · 6147 阅读 · 0 评论 -
DMA和cache一致性问题
Cache原理CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存 读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的 一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量转载 2014-11-05 00:24:55 · 966 阅读 · 0 评论 -
ARM外设寄存器Cache一致性问题
ARM外设寄存器Cache一致性问题 2012-05-22 09:44:14分类: 嵌入式 /* bank4 DM9000 ,关闭cache和写缓冲,否则出现cache不一致问题 */ MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_NCNB);以上是DM9000裸机代码,其中关掉了DM900转载 2014-11-02 21:31:52 · 1968 阅读 · 0 评论 -
Linux内核驱动将多个C文件编译成一个ko文件的方法——每个C文件里都有module_init与module_exit
以两个C文件为例:将本该被分别编译成adc_device.ko和adc_driver.ko的adc_device.c、adc_driver.c编译成一个ko文件!采用方法: 第一步、修改C文件1、去掉adc_device.c文件里module_init(xxx)、module_exit(yyy)中xxx、yyy 函数原型的关键字static2、注销adc_devic原创 2014-09-04 01:28:26 · 5532 阅读 · 1 评论 -
解决:cant't run '/etc/init.d/rcS':No such file or directory
Linux内核启动时提示这样的错误:cant't run '/etc/init.d/rcS':No such file or directory请用vim打开文件:/etc/init.d/rcS观察里面是否有“^M”这样的乱码,有的话删除即可!原创 2014-08-29 23:24:03 · 5885 阅读 · 0 评论 -
lcd fb参数如何计算——Linux 内核framebuffer LCD 驱动
本文参考了:http://www.linuxidc.com/Linux/2011-01/31800.htm感谢该文的作者。Linux内核的amba lcd控制器使用clcd_panel结构体表示一个LCD屏的硬件参数:/* include/linux/fb.h */struct fb_videomode { const char *name; /* opti转载 2014-08-28 15:25:39 · 1742 阅读 · 0 评论 -
Linux LCD驱动(一)——硬件分析和FrameBuffer
Linux 2440 LCD 控制器嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。共享资源,欢迎转载:http://hbhuanggang.cublog.cn一、开发环境主 机:VMWare--Fedora 9 开发板:Mini244转载 2014-08-28 17:13:34 · 4284 阅读 · 0 评论 -
uC/OS-II 学习笔记之:信号量、消息邮箱、消息队列之间的使用区别
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请原创 2013-05-27 22:19:34 · 7780 阅读 · 0 评论 -
Linux input 子系统应用之按键驱动
硬件平台:s5pv210软件平台:Linux2.6.35.7应用程序:inputk2_app.c#include #include #include #include #include int main(int argc, char** argv){ int fd; int count; int i = 0; int j = 0原创 2014-08-26 02:49:59 · 2060 阅读 · 0 评论 -
error: #70: incomplete type is not allowed——已解决!
今天在使用sizeof与数组时总是编译出错,百思不得其解,折腾了半天问题终于解决了!现在此做点笔记,警醒自己也方便他人! 代码结构如下:在某个c文件里定义并初始化了light_value[]这个数组,在另一个c文件要用到此数组,于是用extern声明如下:extern u8 light_value[];然后错误代码如下:for (i=0; i{原创 2013-06-14 19:51:46 · 36741 阅读 · 5 评论 -
C语言编程 - 清空键盘缓冲区
清空键盘缓冲区很多种方法,如用fflush(stdin); rewind(stdin);等,但是在linux这些都不起作用,还得我今天试了半天都没成功,上网搜了一下发现setbuf(stdin, NULL);就能直接清空键盘缓冲区了。以下几个实例:Sample one#include int main(){ char ch1; char ch2;转载 2014-04-03 17:29:40 · 1969 阅读 · 0 评论 -
代码段、数据段、堆栈段、数据段辨析
1、高位地址:栈(存放着局部变量和函数参数等数据),向下生长 (可读可写可执行)2、 堆(给动态分配内存是使用),向上生长 (可读可写可执行)3、 数据段(保存全局数据和静态数据)转载 2014-04-03 11:02:24 · 841 阅读 · 0 评论 -
STM32之CAN---配置波特率
1 位时间特性 为了掌握如何设置STM32 CAN的波特率,首先我们得先了解一下位时间特性。 位时间特性逻辑通过采样来监视串行的CAN总线,并且通过跟帧起始位的边沿进行同步,及通过跟后面的边沿进行重新同步,来调整其采样点。它的操作可以简单解释为,如下所述把名义上的每位的时间分为3段:● 同步段(SYNC_转载 2014-02-25 14:08:59 · 2078 阅读 · 0 评论 -
嵌入式c笔试题
预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你转载 2013-10-24 10:48:38 · 826 阅读 · 0 评论 -
独立编址与统一编址
在不同的系统中,I/O端口的地址编排有两种形式:存储器统一编址和I/O独立编址。 存储器统一编址(存储器映像编址):在这种编址方式中,I/O端口和内存单元统一编址,即把I/O端口当作内存单元对待,从整个内存空间中划出一个子空间给I/O端口,每一个I/O端口分配一个地址码,用访问存储器的指令对I/O端口进行操作。 存储器统一编址的优点是:I/O端口的数目几转载 2015-04-14 23:43:23 · 1563 阅读 · 0 评论 -
理解“统一编址与独立编址”,“I/O端口与I/O内存”
从CPU连出来一把线:数据总线、地址总线、控制总线,这把线上挂着N个接口,有相同的,有不同的,名字叫做存储器接口、中断控制接口、DMA接口、并行接口、串行接口、AD接口……一个设备要想接入,就用自己的接口和总线上的某个匹配接口对接……于是总线上出现了各种设备:内存、硬盘,鼠标、键盘,显示器…… 对于CPU而言,如果它要发数据到某个设备,其实是发到对应的接口,接口电路里有多个寄转载 2015-04-15 00:09:52 · 3515 阅读 · 0 评论 -
理解串口流控
A想要发送数据给B,那么用硬件的RTS/CTS作为硬件流控制机制的话,那么:A如果想要发送数据给B的话,A会使得RTS(Request To Send)引脚有效,表明其想要“请求发送”数据给作为接收设备的B,而A接着就会去检测对应的来自B的CTS引脚,直到CTS有效(此时意味着B已经做好了相关的准备工作了,然后设置了CTS(Clear To Send) ,表明自己准备好接受数据了),才会真正开转载 2015-04-29 15:16:50 · 1176 阅读 · 0 评论 -
ubuntu下Jlink的安装、配置及使用
--PC环境:Ubuntu12.10 32bit--开发板:友善之臂mini2440--Jlink版本:J-Link ARM V8PS:本文主要参考资料:1、Ubuntu 10.04下J-Link配置及使用:http://bbs.chinaunix.net/thread-3641789-1-1.html2、JLink_Linux_V422.tgz中的README文档。安装过转载 2015-07-21 21:42:46 · 6628 阅读 · 0 评论 -
欢迎使用CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl转载 2015-07-21 21:33:33 · 604 阅读 · 0 评论 -
汇编调用c函数为什么要设置栈
一.栈的整体作用 (1)保存现场/上下文 (2)传递参数:汇编代码调用c函数时,需传递参数 (3)保存临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。 二.为什么汇编代码调用c函数需要设置栈 之前看了很多关于uboot的分析,其中就有说要为C语言的运行,准备好栈。而自己在Uboot的start.S汇编代码中,关于系统初始化,也看到有栈指针初始化这个动作。但是转载 2015-08-01 11:01:07 · 1638 阅读 · 0 评论 -
详解linux平台芯片烧写流程
详解将持续更新!这里的烧写是针对板子里的nandflash中已经有uboot的情况。目的在于熟悉烧写流程及原理!连接好开发板,重新启动,进入u-boot交互界面,执行如下操作:一、配置网络 # pri# setenv ipaddr 192.168.64.11 (注:ipaddr 为开发板IP)# setenv serverip 192.168.64.12 (注:serverip 为Windows主机IP)# setenv gatewayip原创 2015-05-22 00:32:13 · 3856 阅读 · 0 评论 -
关于根文件系统的整理
根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,initt原创 2015-05-25 23:34:07 · 940 阅读 · 0 评论 -
详解将驱动程序编译进linux内核
1、进入目录linux-kernel-samsung-dev\drivers\char2、新建目标目录01.led,将驱动相关文件复制到此目录 注:需确保复制的驱动文件是能正常运行的驱动3、在目录01.led里编写Kconfig文件menu "xxx"config XXX_LED tristate "xxx_ggg210_led"原创 2015-05-26 00:02:51 · 3037 阅读 · 0 评论 -
LCD驱动移植配置总结
总结下移植LCD驱动时的参数配置情况:根据LCD数据手册和处理器数据手册LCD控制器部分,得到如下参数:一、基本参数(4个)1、宽度即水平像素点个数(eg:800)2、高度即垂直像素点个数(eg:480)3、描述单个像素点需要的位数(eg:32)4、刷新频率(eg:60)二、时序参数(6个)1、行同步信号前回扫时间2、行同步信号后回扫时间3、行同步信号脉原创 2015-05-19 21:53:13 · 2160 阅读 · 0 评论 -
简介nandflash、norflash、ram、sram、dram、rom、eeprom、flash的区别
1、nandflash Nandflash是IO设备,数据、地址、控制线都是共用的,需要软件区控制读取时序,所以不能像nor flash、内存一样随机访问,不能EIP(片上运行),因此不能直接作为boot。 S3C2440把Bootloader烧到nand flash上启动,因为在S3C2440里有一个内置的SRAM,叫做stepping stone(垫脚石,很形象原创 2015-06-02 23:49:59 · 4587 阅读 · 0 评论 -
norflash与nandflash芯片内执行(XIP)
为什么程序不能直接在nandflash上执行?出于这个疑惑带来了这篇博文,是我在网上找了很多资料后总结的,假如有误,希望马上指出来,免得我误人子弟。谢谢!首先认识下nandflash和norflash: NOR Flash 和 NAND Flash是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR Flash 技术,彻底转载 2015-06-02 23:45:27 · 1854 阅读 · 0 评论 -
linux /proc/devices文件与/dev目录区别
关于标题内容的几点解释:1、proc目录是一个虚拟文件系统,可以为linux用户空间和内核空间提供交互它只存在于内存中,而不占实际的flash或硬盘空间2、/proc/devices/里的设备是加载驱动程序时生成的3、/dev/下的设备是通过创建设备节点生成的,用户通过此设备节点来访问内核里的驱动原创 2015-05-20 23:53:21 · 4784 阅读 · 1 评论 -
linux最简单的驱动编写及测试流程
本文采用nfs挂载网络文件系统的方式,手动创建设备节点,动态加载驱动模块,对理解驱动编写流程有很大好处!一、初级驱动执行流程:1、写好Makefile文件,里面包含将应用程序编译成app文件,将驱动程序编译成mydrv.ko文件的脚本2、在ubuntu里执行sudo make3、确保mydrv.ko和app被拷贝到nfs挂载的根文件系统的/modules目录原创 2015-05-21 00:20:50 · 3106 阅读 · 0 评论 -
关于 可重入 函数的详解
一、什么是可重入函数?答:可重入函数就是多个线程访问同一个函数时,彼此之间互不影响,均能得到期望的结果二、如何使函数可重入?答:保证函数所有的输入都来自于函数的形参,所有的输出都为从函数返回值或输出参数得到, 函数内部不得使用全局变量或者静态局部变量三、不可重入函数举例 int g_flag = 0;int fun(int x){原创 2015-05-13 23:34:11 · 1055 阅读 · 0 评论 -
四线电阻触摸屏采样滤波算法C语言代码
四线电阻触摸屏的采样滤波算法,实践证明很好用的!原创 2015-05-16 01:01:56 · 3896 阅读 · 0 评论 -
四线电阻触摸屏校准
关于触摸屏校准算法的分析介绍一种比较简单的四线电阻触摸屏校准算法:一、准备工作1、设LCD分辨率为LCDX,LCDY(比如:800X480)2、LCD坐标为逻辑坐标用L表示,触摸屏坐标为物理坐标(AD值)用P表示3、触摸按下点逻辑坐标(Lx,Ly)为最终所求坐标4、原理为利用触摸按下点的物理坐标求出按下点的逻辑坐标,即将触摸屏坐标转换为LCD坐标 二、实现过程:原创 2015-05-03 18:50:55 · 8203 阅读 · 0 评论 -
阅读内核源码 VIM+Ctags
人说,磨刀不误砍材工。可是学习linux内核已经一年啦,一直都在逃避使用VIM&ctags&cscope之类的阅读 源码。一方面,搞不明白他们之间是怎么一回事,就觉得糊里糊涂的。在网上也看了一些文章,可还是晕晕乎乎。另一方面,有LXR的方便,于是就给自己一次次 的逃避找到了借口。最近,网络总是出问题,才深深体会到仅仅依靠网络还是不行的。于是乎,终于下定决心要好好挖掘一下VIM的潜力。以前就看到过这转载 2015-05-07 22:59:49 · 1777 阅读 · 0 评论 -
串口硬件流量控制说明
流量控制 对 串口而言,意味着 可以停止发送 然后重新开始,而不丢失任何数据用专用的控制线来发送 “停止”和“开始”信号RTS Request To Send 我可以接受数据,请求发送数据给我CTS Clear To Send 允许我发送数据给你?当一端 准备接受数据时, 它将RTS 升为 高电平(意思是 Request To Send to me).转载 2015-04-29 14:38:26 · 5986 阅读 · 0 评论 -
图解单片机下载程序电路原理之USB转串口线、CH340、PL2303、MAX232芯片的使用!
目前为止,我接触单片机已有不少时日,从选择元器件、原理图、PCB、电路硬件调试、软件开发也算小有心得。单片机软件开发里面第一步当属下载程序了,如果这一步都有问题,那么后面的一切便无从谈起,本人当初刚接触单片机时,对于下载电路方法及原理也是一头雾水。好在随着经验的积累以及自己的努力探求,现在对此问题算是有了点点自己的理解。故今天在此针对常用51单片机下载程序问题做下详解,以求新手们少走弯路。当然原创 2013-09-01 11:37:08 · 22004 阅读 · 2 评论 -
结构体字节对齐
结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐。 内存对齐的原因:转载 2013-11-07 00:35:49 · 917 阅读 · 0 评论 -
STC Monitor51仿真器使用指南
STC Monitor51仿真器使用指南1、 安装Keil版本的仿真驱动 2、 在Keil中创建项目 3、 项目设置,选择STC仿真驱动 4、 创建仿真芯片 5、 开始仿真 一、 安装Keil版本的仿真驱动如上图,首先选择“Keil关联设置”页面,点击“添加MCU型号到Keil中”,在出现的如下面的目录选择窗口中,定位到Keil的转载 2013-06-14 17:42:38 · 10812 阅读 · 2 评论 -
uC/OS-II开发笔记
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请转载 2013-06-04 09:18:11 · 1098 阅读 · 0 评论