
嵌入式软件开发
linulysz
服务器后台
展开
-
IO端口 和 IO 内存
IO端口和IO 内存一、概念1.1什么是IO端口? 芯片内核之外有诸多外设,如GPIO,I2C,USB,LCD等等,在S3C2440中,各种外设挂到了AHB总线或APB总线上,每种外设都是通过读写与其相关的寄存器进行控制。外设中寄存器的地址就称作IO端口。1.2什么是IO内存? 将寄存器地址和设备内存地址映射到某个内存地址区段,这个原创 2014-11-26 23:16:31 · 890 阅读 · 0 评论 -
Ubuntu-ARM FL2440 交叉编译及dnw下载环境搭建成功
在ubuntu下开发arm9,arm-linux-gcc 交叉编译器的安装,minicom和dnw的使用,希望可以帮助新手,也望大侠赐教。原创 2014-03-23 21:47:16 · 2034 阅读 · 0 评论 -
临界资源和临界区
临界资源: 各进程采取互斥的方式,实现共享的资源称作临界资源。 属于临界资源的硬件有,打印机,磁带机等;软件有消息队列,变量,数组,缓冲区等。诸进程间采取互斥方式,实现对这种资源的共享。临界资源是一次仅允许一个进程将使用的共享资源。临界区: 每个进程中访问临界资源的那段代码称为临界区(c转载 2014-12-12 16:12:59 · 3027 阅读 · 0 评论 -
几个字符串和内存操作函数
int strcmp(char *str1, char *str2 ):将串str1和str2进行比较,字符串相等时,函数返回0; str1 返回负值;str1 >str2,返回正值。int strncmp(char *str1, char *str2, int转载 2014-12-06 22:50:28 · 558 阅读 · 0 评论 -
linux container_of 宏
container_of()宏在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码:/** * container_of - cast a member of a structure out to the containing structure * @ptr: th转载 2014-12-06 22:22:36 · 611 阅读 · 0 评论 -
LDD3 中 awk 语句的解释
在ldd3的一个创建节点的shell脚本中,用到了awk文本处理工具,在这里做一下解释。 原句:major=$(awk "\\$2==\"$module\" {print \\$1}"/proc/devices) Module变量在脚本中定义为 scull. /proc/devices是awk要处理的输入文件。原创 2014-11-30 17:03:13 · 684 阅读 · 0 评论 -
Awk关系运算符和布尔运算符
Awk关系运算符和布尔运算符 Awk关系运算符及其意义 运算符原创 2014-11-28 19:24:40 · 4640 阅读 · 0 评论 -
ARM9蜂鸣器汇编实验
参照飞凌FL2440的官方汇编程序,按自己的习惯写了一下。程序如下:AREA SAMPLE,CODE,READONLY;声明代码段 ENTRY ;入口 LDR R1,=0x56000018 ;GPBUP B口上拉禁止 LDR R2,=0xFFF STR R2,[R1] LDR R1,=0x56000010 ;GPBCON B0口输出原创 2014-03-15 09:24:10 · 2103 阅读 · 0 评论 -
初学ARM
初学ARM,一开始遇到的事情总是让人不爽,但是回过头来还是自己太着急,忽略了细节。 首先是DNW的USB连接不上,然后是AXD+JLINK调试连不上。其实只有两个问题。一是USB的驱动没安装对,在厂家的资料里,USB的驱动文件夹了只有两个文件,我以为这太少了,估计不能用,于是在装驱动的时候就没找这个文件夹,其实在在资料里安装方法都有的。二是在codewarrior里的设置,在ARM原创 2014-03-13 12:35:17 · 1023 阅读 · 0 评论 -
CodeWarrior 编译程序连接有误
用CodeWarrior写了一小段汇编程序,结果链接不成功,说是找不到批处理文件。经过查找,发现是Target settings中的post—linker不是ARM fromELF,而是batch file runner,改回来就好了。原创 2014-03-10 12:17:55 · 3722 阅读 · 0 评论 -
关于petitfatfs的移植问题
我用petit fatfs给sd卡里的txt文件夹写数据,为什么会把原来的数据给刷掉,只有当下写的数据。移动读写指针好像也不管用。这是什么原因?请大家指教。原创 2013-04-18 21:12:59 · 1727 阅读 · 0 评论 -
Keil4 编译时出现RL-ARM is not allowed with this license
最近在用MDK编译一个别人的工程时,有如上提示:原因是没有注册Real-Time OS;解决方法:编译时出现RL-ARM is not allowed with this license" name="image_operate_90361371644044725" alt="Keil4 编译时出现RL-ARM is not allowed with this license" src转载 2015-06-23 18:14:16 · 2018 阅读 · 0 评论 -
gnu-linker 译文一
本文纯属自己翻译,不能保证其准确性,欢迎拍砖;如有转载,注明出处。3.链接器脚本每个链接都由链接器脚本控制,而链接器脚本又由链接器命令语言书写。链接器脚本的主要目的在于描述输入文件的各个段如何向输出文件映射,并且控制输出文件如何在内存中存放。大多数连接器脚本无非只做这些事情。但是,必要的时候,链接器脚本通过下面的命令直接操作连接器进行一些其他的操作。链接器总是要用到链接器脚本。原创 2014-12-16 18:26:00 · 2710 阅读 · 0 评论 -
awk记录和域
Awk记录和域 awk认为输入的文件是结构的,将每个输入文件行定义为记录,行中的每个字符串定义为域,域之间用空格、TAB键或其他符号分隔,这些符号叫做分隔符。 awk默认空格键是分隔符,TAB键被认为是连续的空格键来处理(两个或多个连续原创 2014-11-28 19:13:41 · 2004 阅读 · 0 评论 -
S3C2440时钟和电源管理
七、时钟&电源管理概述时钟&电源管理模块包含三部分:时钟控制,USB控制,电源控制。 时钟控制逻辑可以生成三种时钟信号,CPU使用的FCLK,AHB总线外设使用的HCLK,APB总线外设使用的PCLK。S3C2440A有两个锁相环,一个用于生成FCLK,HCLK,PCLK;另一个专门用于USB模块的48Mhz频率。时钟控制模块可以不使用锁相环产生低速时钟,也可以通过软翻译 2015-07-20 23:08:06 · 1321 阅读 · 0 评论 -
s3c2440锁相环
s3c2440锁相环框图如下:MPLL包含如下几部分:VCO(电压控制振荡器),产生与输入直流电压相应的输出频率;分频器P,以p分频输入频率;分频器M,以m分频VCO输出频率,作为相频检测器PFD的输入;分频器S,以s分频VCO输出频率,这就是Mpll(Mpll模块的输出);相异检测器;电荷泵(charge pump);环路滤波器(loop filter).输出时钟频率翻译 2015-07-21 23:01:23 · 930 阅读 · 0 评论 -
S3C2440A时钟控制逻辑
时钟控制逻辑时钟控制逻辑决定时钟源是PLL还是外部时钟。当PLL配置为新的的频率值,时钟控制逻辑将禁止FCLK,直到经过PLL锁定时间后PLL输出稳定。时钟控制逻辑同样作用于上电复位和掉电恢复模式。 上点复位晶振在几毫秒之内开始振荡,OSC时钟稳定之后,nRESET释放,PLL就根据默认配置运作。然而,PLL刚刚上电后并不稳定,所以在软件配置PLLCON翻译 2015-07-22 22:58:11 · 1161 阅读 · 0 评论 -
关于GSM模块的问题
我的GSM模块在发送中文信息失败后,不能再接受其他命令了,请各位帮帮忙,下面是我截的图:原创 2013-04-23 20:41:26 · 2655 阅读 · 0 评论 -
关于STM32正交编码的问题
最近在做STM32正交编码测速,下载了一个貌似官方提供的一个程序,但是看不懂,希望看到贴的大侠不吝赐教。s16 ENC_Get_Electrical_Angle(void)//s16 int16_t{s32 temp;temp=(s32)(TIM_GetCounter(ENCODER_TIMER))*(s32)(UINT32_MAX/(4*ENCODER_PPR));//s原创 2013-08-03 10:08:21 · 6390 阅读 · 1 评论 -
ubuntu minicom 给开发板传输程序并运行
别人都用原创 2014-10-24 21:34:38 · 1499 阅读 · 0 评论 -
自己编个bootload(复制于http://www.chinaunix.net 中tzwolf的文章)
看到这篇文章,非得粘贴到自己博客里才甘心,非常感谢作者tzwolf的分享!自己编个bootload关键字:MCIMX31 U-boot ARM bootload参考资料:>,>开发平台:成都莱得的IMX31开发板http://www.nidetech.com/service-mx31module.htm小时候总觉得写个操作系统是件很酷的事情。也见过很多牛人动不动就自己编转载 2014-03-31 16:16:16 · 999 阅读 · 0 评论 -
__I、 __O 、__IO volatile是什么?怎么用? .
本文转自denghuanhuandeng的专栏 __I、 __O 、__IO是什么意思?这是ST库里面的宏定义,定义如下:#define __I volatile const /*!< defines 'read only' permissions */#define __O volatile /*!< defines 'write only' permis转载 2015-06-25 09:08:13 · 639 阅读 · 0 评论 -
Jlink现在经常会提示clone不合法解决方法
转自:openedv [楼主位] 天涯萍水Eric编译好程序之后点仿真,就出现这个提示,然后MDK就退出了。重刷固件以后还是没好后来发现:用SEGGER安装目录下的JLinkARM.dll替换掉MDK安装目录下的./ARM/Segger/JLinkARM.dll就可以了转载 2015-06-23 21:57:41 · 3344 阅读 · 2 评论 -
关于SD卡的问题
如何判断一个卡所属的版本,像V2.0,V1.X,这个信息应该从哪里获得?我用的是1GB的kingston和sandisk。谢谢!这个问题解决了,只有SDHC才有版本问题,1GB的sd卡不用关心这个问题。原创 2013-04-12 17:23:18 · 1277 阅读 · 0 评论 -
ARM信号量操作指令
信号量操作指令一、信号量用于进程间的同步和互斥。对信号量的操作通常是一个原子操作,即在一条指令中,完成信号量的读取和修改操作,而不能被中断。ARM中提供了两条指令完成信号量的操作(ARM v6架构之前的):SWP(交换指令)SWP{} Rd, Rm, [Rn]用于将一个内存单元(内存单元地址存放在寄存器Rn中)的内容读取到一个寄存器Rd,同时将另一个寄存器Rm的原创 2014-12-13 19:22:34 · 1654 阅读 · 0 评论 -
可重入函数和不可重入函数
可重入函数 可重入函数主要用于多任务环境中,一个可重入函数简单来说是可以被中断的函数,即可以在函数执行的任何时刻中断它,转入os调度下去执行另一段代码,而返回控制时不出现错误,这意味着它除了使用自己栈上的变量以外,不依赖于任何环境(包括static),这样的函数就是purecode(纯代码)可重入,可以允许该函数有多个副本在运行,由于它们使用的是分离的栈,故不会相互干扰,如果确实需要访问转载 2014-12-09 12:26:03 · 663 阅读 · 0 评论 -
可变参数编程练习
//可变参数的编程练习//编程步骤://1.在函数原型中使用省略号,省略号应该是最后一个参量//2.在函数定义中创建一个va_list类型的变量//3.用宏将该变量初始化为一个参数列表//4.用宏访问这个参数列表//5.用宏完成清理工作#include #include double sum(int, ...);//函数原型中使用省略号//最右边的参原创 2014-12-09 09:53:41 · 614 阅读 · 0 评论 -
字符设备驱动框架
字符设备驱动框架一、linux软件系统的层次关系一个应用程序操作底层驱动程序的过程: 1 . 应用程序使用库提供的open函数打开某一个设备文件。 2. 库根据open函数传入的参数执行swi(软件中断)指令,这会引起CPU异常,进入内核。 3 . 内核的异常处理函数根据这些参数找到原创 2014-12-03 09:43:41 · 1101 阅读 · 0 评论 -
Awk格式化输出/内置字符串函数/数组
一、格式化输出 awk一大主要功能就是产生报表,报表就要按照预订的格式输出,awk借鉴C,也定义了printf输出语句,它可以规定输出的格式,printf基本语法如下: printf(格式控制符,参数) 由上可知 printf语句包含两部分:①格式控制符,以 % 开始,描述格式规范;②参数列表,比如变量名列表原创 2014-11-29 11:36:15 · 1611 阅读 · 0 评论 -
嵌入式linux2.6.12内核源码树配置及hello_world模块实验
前面说到要编写Linux 2.6的驱动,必须建立内核源码树,前面建立的源码树是针对i686平台的,但是我么嵌入式系统用的是arm平台,所以也要建立arm平台的内核源码树。首先下载与你嵌入式系统平台版本号一致的linux内核,我的版本为2.6.30. 第一步:先解压源代码 tar -jxvf linux-2.6.30.tar.bz2 第二步:进入刚才解压后的目录linux-2.6原创 2014-10-25 21:44:06 · 894 阅读 · 0 评论 -
keil生成bin文件
参考网上博文,发现只需要进行如下配置即可,具体的fromelf.exe的命令选项并没有进行深究。红色部分所圈住的内容是" fromelf.exe --bin -o @p.bin @p.axf "并且工程中的Output如下:图中,.axf .bin .hex .uvproj都在同一个目录之下。原创 2015-06-07 14:04:06 · 679 阅读 · 0 评论 -
keil4 进行 S3C2440裸机开发
用Keil-MDK开发TQ2440裸机程序入门教程——LED流水灯实现觉得此编文章很详实,故转载之,来自http://www.amobbs.com/thread-5281512-1-1.html开发板也差不多买了半年了, 以前照着教程用的是软件是ADS,在win7下老是崩溃, 后来才知道ADS早就不提供支持了, ADS的公司怎样怎样了...(此处省略300..)然后我就捣鼓转载 2015-05-27 12:46:56 · 3239 阅读 · 2 评论 -
linux中C嵌arm汇编 __asm__ __volatile__
本文转自:http://blog.youkuaiyun.com/geekcome/article/details/6216436 ,本人只添加了一些注释带有C/C++表达式的内联汇编格式:__asm__ __volatile__(“Instructionlist”:Output:Input:Clobber/Modify)__asm____asm__是GCC关键字asm的宏定义:转载 2014-12-12 20:37:12 · 5268 阅读 · 0 评论 -
临界区的问题产生一
临界区问题是嵌入式软件编程一个不得不面对的关键性问题。特别对于底层驱动,代码在内存中只有一份,上层的多任务或者多进程,都会对同一个驱动去访问,这样不可避免的遇到了任务之间打架的问题,处理好这个问题是区分一个菜鸟和老鸟的根本性关键之一。接下来谈谈临界区产生的原因:假设有以下代码:[cpp] view plaincopyint x; void process转载 2014-12-12 16:46:01 · 978 阅读 · 0 评论 -
Awk表达式和系统变量
Awk表达式和系统变量一、awk表达式 一个awk表达式可由数字、字符常量、变量、操作符、函数和正则表达式自由组合而成。 awk中的变量不需要声明,直接定义赋值即可。变量名不能以数字开头,每个变量有两种类型的值: 数值和原创 2014-11-28 19:28:27 · 1054 阅读 · 0 评论 -
ARM体系结构和处理器系列
一.ARM的一些特点ARM芯片具有RISC体系的一般特点:1.有大量寄存器 2.绝大多数操作都在寄存器中进行,通过Load/Store体系结构在内存和寄存器之间传递数据3.寻址方式简单 4.采用固定长度的指令格式此外,ARM还有一些特别的技术,保持高性能之外,减小芯片体积降低功耗1.同一条数据处理指令包含了算术逻辑处理单元和移位处理2.使用地址自增自减优化程序中的循环转载 2014-03-28 15:43:35 · 1078 阅读 · 0 评论