- 博客(37)
- 资源 (3)
- 收藏
- 关注
转载 关于Linux的视频编程
<br />前言:目前正在忙于ARM平台的Linux应用程序的开发(其实是刚刚起步学习啦)。底层的东西不用考虑了,开发板子提供了NAND Bootloader,和Linux 2.6的源码,而且都编译好了。自己编译的bootloader可以用,但是Linux编译后,文件很大,暂且就用人家编译的系统,先专心写应用程序吧。。<br />正文:要做的任务是,把一块板子上的摄像头采集的图像和声卡采集的声音(貌似很啰嗦哈)通过TCP/IP协议传输到另一块板子上。第一步,先把视频获取并且在本地LCD上显示。看了板子提供的
2010-07-14 14:01:00 525 1
转载 【分析】STM32从Flash中运行程序的时序分析
大家都知道STM32的CPU时钟频率可以达到72MHz,以后还会更快,但是由于半导体制造工艺的限制,存放程序的Flash存储器不可能达到这么高的工作频率,这样当CPU直接访问Flash存储器时必须插入等待周期以得到正确的结果。问题是在Flash的速度比CPU慢的情况下,是不是可以简单地说STM32在执行Flash中的程序时每条指令都需要插入等待周期呢?等待周期的插入对程序的执行到底有多大的影响
2010-05-13 11:47:00 724
原创 STM32别名区
/**********************GPIO别名储存器映射表*************************///GPIOC_ODR[15..0]映射到别名区//GPIOC_ODR ADDRESS=0x4001 100C//别名区 ADDRESS=0x4200 0000 + (0x0001 100C*0x20) + (bitx*4) ;bitx:第x位#define PC_
2010-05-12 13:41:00 751
原创 STM32库函数效率很低
在调试PCM语音是,通过时钟下降沿来读取PCM语音的数据。时钟频率为2.048M。读取数据一直有问题,故采用读取时钟IO来向模块DI口变换高低电平来看程序效率。 若用库函数,居然过了8个时钟,我送出的IO才跳变一次。 丢弃库函数,但是IO寄存器的读写仍采用库的结构体,则需要4个时钟,IO跳变一次。 采用自己定义寄存器地址,需要3个。
2010-05-12 12:26:00 3274
原创 有关volatile的体会
以前用volatile只是用来定义寄存器变量,也听说多进程编程需要用到这个,一直没有深刻体会。 今天,通过编译器高级优化,终于发现volatile的重要性了。 问题主要是在给UC864模块开机过程中等待时发生的。 close_mobile_time=0; while(close_mobile_time 两句话,简单地等到close_mobile
2010-05-12 11:45:00 507 1
原创 STM32串口问题
采用如下方式发送数据 while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);USART_SendData(USART1, version[i]); 会产生硬件错误,不知为何。当时正是从IAP启动到simserver的应用程序,需要发送程序版本号,此时所按上述顺序发送数据则硬件出错或一直死等,直到狗重启。
2010-03-24 16:55:00 488
原创 STM32的IAP使用注意
1、在NVIC_Configuration()函数中,需要将中断向量表的偏移地址设置为0x2000,NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000); 2、修改stm32f10x_flash.icf文件, 修改define symbol __ICFEDIT_intvec_start__ = 0x08002000;
2010-03-24 11:23:00 1436
原创 S3C2442开发记录
1、原先用于2440的bootloader可以不做改动运行于2442之上,从手册上看S3C2442较2440少了一个AC97的外设,少许地方做了修改。2、三星提供的UBOOT在16M晶振的核心板的硬件环境下能够正常运行,而修改UBOOT的晶振频率到12M,启动时打印的信息有很多的乱码,估计还有哪块没有配置好,或者整个UBOOT的部分地方的频率不匹配。3、bootloader进入内核时会调用
2010-03-12 08:22:00 949 1
原创 文件系统移植问题记录
1、dev目录下面未建立pts目录,会导致telnet无法登录。2、mdev -s会建立设备节点,但是当设备移除后无法删除节点,看了busybox的编译选项也选择了热插拔支持的选项,不知道是否还有什么没配置好,采用udevd就正常了,使用udevd必须要内核支持Inotify file change notification support。3、在rcS启动时要将devfs挂载到dev目录
2010-03-09 19:44:00 302
原创 数据类型的问题
吐血调了一个晚上,结果是unsigned char 和char的问题。 当类型是char型,凡是0x80以上,即最高位是1的数据,通过"%02x"打印后会在前面填充6个‘f’,即变成ffffff87这样的数据。 而换成unsigned char型则打印正常。 但是在ARM的linux上之前没有遇到这样的问题。看来对于平台还有编译器还是
2010-03-03 08:58:00 312
转载 用Crosstool 制作交叉编译工具链
一:下载 Crosstool http://kegel.com/crosstool/ 解压到downloads文件夹 apt-get install bison apt-get install flex二:进入解压后的Crosstool vim Demo-arm-softflaot.sh 修改如下两行: TARBALLS
2010-01-18 14:11:00 1603
原创 WLAN调试简单记录
1、在内核中加入对WLAN的支持和对RTL8187L的支持。2、编译Wireless-Tool-29.tar.gz工具3、在文件系统中加入运行上述工具的库。4、利用如下命令启动无线网卡,搜网,设置IP等。 iwconfig wlan0 txpower on ifconfig wlan0 up iwlist wlan0 scanning i
2010-01-07 16:31:00 501
原创 2440文件系统制作所见之问题
今天要调WLAN,由于要向cramfs文件系统中添加一个库,想偷懒一把,直接将ARM中的文件系统拷贝出来,然后再加入库,结果出现了问题,比如mount,echo等程序无法使用。 结果发现,从ARM拷贝到windows下会将所有链接丢失。所以,重新用busybox制作了下文件系统。 文件系统虽然运行起来,结果首先发现vsftpd无法运行,其他应用程序也无法运行,开始怀疑是
2010-01-07 16:30:00 270
转载 S3C2410 MMU_Init函数简要分析
北京蓝海微芯S3C2410开发板启动源码中MMU初始化部分试分析void MMU_Init(MMU_Table table[]){ //========================== IMPORTANT NOTE ========================= //The current stack and code area cant be re-mapped in this rou
2009-12-31 14:41:00 1381 1
原创 修正2.6.24内核对于6410无法使用reboot的问题
linux-2.6.24内核对于S3C6410的支持貌似不是很好。单纯地从发送reboot命令重启系统来看,发送reboot后,内核并没有真正的去调用看门狗。只是执行了如下的一条语句(源码在"include/asm/arch/system.h"中):__raw_writel(0x6400, S3C24XX_VA_SYSCON + S3C6400_SW_RESET_OFF);
2009-12-30 16:27:00 310
转载 Linux I2C核心、总线与设备驱动
Linux I2C核心、总线与设备驱动本章导读I2C总线仅仅使用SCL、SDA两根信号线就实现了设备之间的数据交互,极大地简化对硬件资源和PCB板布线空间的占用。因此,I2C总线被非常广泛地应用在EEPROM、实时钟、小型LCD等设备与CPU的接口中。Linux定义了系统的I2C驱动体系结构,在Linux系统中,I2C驱动由3部分组成,即I2C核心、I2C总线驱动和I2C设备驱动。这3部
2009-11-19 17:00:00 399
原创 ARM-CORTEX-M3内核STM32F103VC的初次使用细节及心得记录
1、芯片的中断口最好接一个下拉电阻,否则当中断管脚悬空时,管脚上的浮空电平很容易使芯片进入中断。 2、开启串口中断前可以通过读取数据寄存器来清除串口中断标志位。芯片手册上也是这么推荐的。如果直接通过清串口接收中断标志位,然后再开启串口接收中断,则串口出现异常,会不停进中断,但是不是由接收中断引起的。 3、使用外设时,同时要配置外设对应的IO口,使该IO口的状态符合外设数据传输的需求。如:作
2009-10-14 15:29:00 2481 1
原创 arm2440+linux看门狗使用心得
1.bootloader中看门狗在通过USB下载时被用作一个16us的定时器,时间到触发一个中断,下载完成后看门狗关闭。2.可在linux启动前启动看门狗,不过默认的linux驱动加载时会对其重新初始化,初始化其频率并关闭。可以手动将关闭去除,还可以设置频率,若复位延时超出限制,可在dmesg中观察到出错信息。而且超出该限制后打开看门狗就会立即重启,估计寄存器溢出的原因,而真正写入寄存器的是低
2009-09-15 11:14:00 2152 1
转载 2440init.s文件详细解析
;========================================= ; NAME: 2440INIT.S ; DESC: C start up codes ; Configure memory, ISR ,stacks ; Initialize C-variables ; HISTORY: ; 2002.02.25:kwtark: ver 0.
2009-08-19 13:57:00 391 1
原创 linux的一些定义
信号量: IPC_EXCL 和IPC_CREAT一起使用时,当已经存在队列时,则返回失败(防止关键字重复) SETVAL(设置信号量的值) IPC_RMID(删除信号灯).
2009-08-14 17:19:00 187
原创 linux nand flash驱动的一点理解
1、通过自旋锁的方式来获得与设置flash的状态。在加锁后,若if (!chip->controller->active) 成立,即不活动,则chip->controller->active = chip;将其的活动状态变为本flash,并且如果chip->state == FL_READY成立,即空闲则将其设置为我们需求的状态,再解锁,锁防止了在设置状态过程中被抢占。获取与配置flash状态在n
2009-07-30 14:15:00 250
原创 关于MMU的一点理解
1、S3C2440的SDRAM区域是BANK6和BANK7,故RAM的起始地址为0x30000000.2、由于核心板中是有两块5616RAM(4BANK*4M*16BIT),所以不用接A0和A1,可看做32BIT RAM。地址分2次传送,分别为RA0-RA12,CA0-CA8,共22位,4M寻址空间,地址线24、25连接BA0、BA1进行块选择。3、0x48000000为2440的寄存器的
2009-07-29 15:19:00 313
原创 NAND FLASH驱动注意事项
1.NAND FLASH写入只能由1写为0,所以写入前必须先擦除,擦除后所有数据为1.2.2K大页面的64字节冗余数据按照飞凌的定义为:第0位为坏块标记,第1-4位为2K页面的ECC校验,其他为0xff。3.K9F1G08U0B的地址线有28根,对应空间应该是256MB,而实际空间为128MB,我的理解为A11是选择是数据区域还是扩展数据区域。高的16位正好是页面的地址。4.bootl
2009-07-22 17:55:00 380
原创 ADS程序入口配置
可建立一个init.s的文件,其中加入: AREA |DATA|,CODE,READONLY ENTRY EXPORT _ENTRY_ENTRY ldr r13, =0x1000 IMPORT ram_main b ram_main END 在Image entry point中加入_ENTRY。
2009-07-22 17:53:00 211
原创 arm linux内核修改积累
2.6.28.6内核修改分区:arch/arm/plat-s3c24xx/common-smdk.c看门狗驱动:drivers/watchdog/s3c2410_wdt.c 2.6.12内核修改分区:arch/arm/mach-s3c2410/devs.c
2009-07-09 10:02:00 238
转载 linux进程控制-wait()
#include /* 提供类型pid_t的定义 *//sys/types.h#include //sys/wait.hpid_t wait(int *status) 进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返
2009-07-08 09:34:00 198
转载 Linux网络编程一步一步学-select详解
select系统调用是用来让我们的程序监视多个文件句柄(file descriptor)的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变。文件在句柄在Linux里很多,如果你man某个函数,在函数返回值部分说到成功后有一个文件句柄被创建的都是的,如man socket可以看到“On success, a file descriptor for the
2009-06-29 14:55:00 183
转载 Linux下的C编程实战之文件系统编程
1.Linux文件系统 Linux支持多种文件系统,如ext、ext2、minix、iso9660、msdos、fat、vfat、nfs等。在这些具体文件系统的上层,Linux提供了虚拟文件系统(VFS)来统一它们的行为,虚拟文件系统为不同的文件系统与内核的通信提供了一致的接口。下图给出了Linux中文件系统的关系: 在Linux平台下对文件编程可以使用两类函数:(1)Linux操作系统文
2009-06-24 09:46:00 626
原创 arm linux 设置非标准波特率
由于内核和交叉编译环境中预定义的都是标准的波特率,所以需要设置非标准的波特率如8777,需要修改内核和交叉编译环境。可将不用的原先定义的好波特率改掉,比较保险。 内核修改: include/asm/termbits.h 95行 B150->B8777 drivers/char/tty_io.c 2536行 150->8777
2009-06-16 19:33:00 1553
原创 串口初始化异常版
初始化异常。#include #include #include #include #include #define FALSE -1#define TRUE 0int speed_arr[] = { B115200, B38400, B19200, B9600, B4800, B2400, B1200, B300, //
2009-06-16 19:03:00 643
原创 arm+linux 串口传送数据(正确版)
之前,利用RXD,TXD回环来读取发送的数据,原先的初始化有问题(见异常版),经常中间夹杂莫名的数据,改用下面的初始化和发送、接收函数,一切正常了。两个还未进行对比,等有空闲的时候做下对比。#include #include #include #include #include #include #include #include #include /* the
2009-06-16 17:16:00 1898 2
原创 linux printf貌似有BUG
写虚卡调用的的时候在程序中处理SC0包,应该会处理68步,但是30多步(会有细微变动)后一大段打印信息莫名丢失了,但是上层测试程序仍能收到R包,说明中间的处理还是进行了的。如果每次处理延时0.1s,所有答应信息都会显示。 使用了dup重定向,将打印信息都写到文件中,不用延时,所有的打印信息都能正确显示。 所以感觉应该是printf的缓冲问题。解决方法暂时不明。。。
2009-05-12 09:47:00 348
原创 理解dup和dup2(转)
理解dup和dup2 理解dup和dup2(转) 相信大部分在Unix/Linux下编程的程序员手头上都有《Unix环境高级编程》(APUE)这本超级经典巨著。作者在该书中讲解dup/dup2之前曾经讲过“文件共享”,这对理解dup/dup2还是很有帮助的。这里做简单摘录以备在后面的分析中使用:(1) 每个进程
2009-05-12 08:51:00 243
原创 Linux变量声明
今天调程序,由下层程序下上层程序发送A包,怎么发都不对,发现包长有问题,结果发现声明了一个临时变量send_len,初始化的时候他的值竟然是0x0A,而不是0x00,感觉与原来的飞思卡尔的平台不同。难怪以前用数组的时候里面莫名其妙竟然有"LINUX"字符。所以,最好养成声明变量即初始化的好习惯!
2009-05-07 13:32:00 395
原创 获取Linux时间,微秒级
#include #include int gettimeofday(struct timeval *tv,struct timezone *tz); 功能:将目前的时间以tv所指的结构返回。 struct timeval{ long tv_sec;//秒 long tv
2009-05-06 18:45:00 2329
原创 异常处理的入口
linux在trap_init函数中设置各种异常处理的向量,如中断向量。通过调用在arch/arm/kernel/entry-armv.S中的代码来设置异常中断的入口。 .equ stubs_offset, __vectors_start + 0x200 - __stubs_start .globl __vectors_start__vectors_start: swi
2009-04-23 21:52:00 322
原创 bus,device,driver三者关系【转载】
bus:总线作为主机和外设的连接通道,有些总线是比较规范的,形成了很多协议。如PCI,USB,1394,IIC等。任何设备都可以选择合适的总线连接到主机。当然主机也可能就是CPU本身。内存也是通过BUS连接到主机的,可内存使用的总线不是外设总线,因此和内存使用相同类型的总线的设备,谈及BUS比较含糊。一块网卡在嵌入式开发中,直接通过内存总线接入到CPU。我们在写网卡驱动时,要给该BUS定义就麻烦
2009-04-23 21:50:00 346
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人