u-boot1.1.6 start.s代码分析 在start.s中有如下定义 .globl _start (start.s的第一条语句) ……… _TEXT_BASE: .word TEXT_BASE .word表示在当前地址保存TEXT_BASE这个值,TEXT_BASE在config.mk中定义,它的值为0x33D00000,_TEXT_BASE是这个地址的标号,我们可以通过这个标号找到这个地址,在编译之后它才有具体
编译通过的U-boot和使用的arm-linux-gcc编译器 说实话编译U-boot挺累人的,要做的修改不是很多,但是在编译器上花的功夫却很多,经常遇到各种奇怪的问题。下面是编译通过的U-boot和对应的gcc编译器GCC下载地址:http://download.csdn.net/detail/king_mcu/9002001U-Boot下载地址:http://download.csdn.net/detail/king_mcu/9002011
再谈TQ2440使用TFTP下载程序 一、安装TFTP服务器软件,设置好文件路径,并启动,如下图:设置好之后点save保存,确定,启动TFTP二、电脑和开发板的连接和配置,其实也就是让电脑和开发板处于同一网段就可以了:1、电脑用无线连接路由器(用网线也可以);2、开发板用网线连接路由器;3、关闭电脑防火墙(这个一定要记住,开始多次失败就是因为这个);4、开发板串口连接电脑,打开secureCRT
赛普拉斯蓝牙BLE---主机协议栈事件描述 以下内容纯属个人翻译,有误之处还望指出!赛普拉斯蓝牙BLE协议栈会产生多种事件,在事件产生的时候会执行用户定义的回调函数,事件类型以参数形式传入。主要有以下五种事件:Generic events: 0x01 to 0x1FGAP events: 0x20 to 0x3FGATT events: 0x40 to 6FL2AP events: 0x70 to 0x7FFut
赛普拉斯蓝牙BLE---Component API Reference 1、GAP 函数1.1、GAP Peripheral函数函数原型:CYBLE_API_RESULT_T CyBle_GappStartAdvertisement(uint8 advertisingIntervalType);描述:在PSOC Creator GUI中配置好BLE组件的参数之后,调用这个函数进行广播。设备就能够被GAP Central设备发现。只有设备处于
快速排序 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。 总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快
安装GRUB到U盘 GRUB安装到U盘,这样在电脑上的linux系统引导出错的时候,就可以用U盘直接引导linux系统启动了关键的几步是:3、激活/dev/sdb2 ,这步很重要,如不激活,是引导不了的(在用cfdisk时就是有没有标志成boot) 5、格式化/dev/sdb2,建议格式化为ext2格式 (即建立文件系统)
OTP 文章出处http://forum.eepw.com.cn/thread/120354/1/随着嵌入式应用的越来越广泛,产品的安全也显得越来越重要。一方面是为了保护硬件设计,另外一方面也是为了产品本身的安全,防止被HACKED.在嵌入式系统当中,所有的代码和系统数据都是被存储在FLASH芯片内部的。FLASH芯片的特点是可多次擦写,而且掉电数据不会丢失。为了保护FLASH中的数据
C可变参数列表 我想很多人和我一样,当对c语言有了一定了解之后,一定会对printf函数产生好奇,因为它可以接受不确定数目的参数。这是怎么实现的呢?看下它的声明: int printf(const char *fmt, ...); 这个...表示的是什么,在c语言里面,这个叫做可变参数的声明,...就是说它有不确定个参数,专业术语叫可变参数。我们去看看它的源代码: int
VIM配置 .vimrc 出处:点击打开链接VIM 中可供用户定制的选项非常非常多, 作为初学者, 我们没有必要了解这么多东西。 下面, 滇狐简单列出了一些最常用的配置项, 大家可以根据自己的需要将这些内容添加到自己的 .vimrc 中。1 基本设置set nocp 该命令指定让 VIM 工作在不兼容模式下。 在 VIM 之前, 出现过一个非常流行的编辑器叫 vi。 VIM 许多
linux下制作启动U盘 linux下制作linux系统的启动U盘,最简单的方法莫过于使用 dd命令首先准备好系统镜像,我拿Centos6.4亲测成功。把U盘插上电脑,在/dev 目录下查看,一般是sdb 命令如下:dd if=/home/CentOS-6.4-i386-liveDVD.iso of=/dev/sdb等待一段时间后即可完成刻录,然后重新启动电脑,选择从U盘启动即可,接下来就是Cent
GDB调试时查看数据 文章出处点击打开链接在用gdb调试程序时,当程序运行到之前设置的断点时,很容易想到的操作就是查看当前变量的值,而gdb可以很轻易地满足的你的需求的~~在gdb中最常用的命令就是print(简写p),具体格式如下:print print/f f代表输出的格式 x 按十六进制格式显示变量 d 按十进制格式显示变量 u 按十六进制格式显示无符号整型 o 按八进制格式
GDB进行汇编级的调试 gcc -S test.c生成test.s文件as -o test.o -gstabs test.s生成test.o文件gcc -o test -Wall test.ogdb test
GDB调试 七、八年前写过一篇《用GDB调试程序》,于是,从那以后,很多朋友在MSN上以及给我发邮件询问我关于GDB的问题,一直到今天,还有人在问GDB的相关问题。这么多年来,有一些问题是大家反复在问的,一方面,我觉得我以前的文章可能没有说清楚,另一方面,我觉得大家常问的问题正是最有用的,所以,在这里罗列出来。希望大家补充。一、多线程调试多线程调试可能是问得最多的。其实,重要就是下面几个命令:
C 和指针---阅读笔记 只有当数组名在表达式中使用的时候,编译器才会为它产生一个指针常量(所以不要把数组名和指针等同对待)。注意,是指针常量,而不是指针变量!你不能修改指针常量的值。 只有在两种场合下,数组名并不用指针常量来表示------就是当数组名作为sizeof操作符或单目操作符&到操作数时。sizeof 返回整个数组的长度,而不是指向数组名的指针的长度。 int array[10
IAR右键无法跳转到定义 的解决方法 用IAR编译程序,有时候编译通过了,但是右键无法GO TO Definition 解决方法有两个:第一、Tools -> Option -> Project 把Generate browse information 勾上第二、如果第一种方法,发现Generate browse information已经勾上了,那么点VIEW ->source browser 打开代码浏览窗口,然后再
零死角玩转STM32---单通道ADC分析 /*adc.h*/#define ADC1_DR_Address ((u32)0x4001244C)void ADC_Configuration(void);/*adc.c*/#include "adc.h" vu16 ADC_ConvertedValue; //此变量用来存放DMA读取到的ADC转换的结果,在main函数中 extern vu1
零死角玩转STM32---阅读摘记三 一、ADC(DMA模式) CPU的最高时钟频率是72MHz,而ADC模块的最高时钟频率是14MHz。如果需要达到ADC模块的最高时钟频率,CPU的最高频率只能设置到14M x 4=56M。(PCLK2的常用时钟频率为72MHz,而ADCCLK必须低于14MHz,所以在这个情况下,ADCCLK最高频率为PCLK2的8分频,即ADCCLK=9MHz。若希望使ADC以最高的频率14MHz运行,可以把
零死角玩转STM32---阅读摘记二 一、管脚STM32F103VET6,具有100个管脚,除去晶振输入、电源输入、Boot引脚,剩下的80个引脚均为GPIO。它们分布在GPIOA~GPIOE的5个端口组之中,每个小组有16个引脚,所有的GPIO引脚都可以用作外部中断源的输入,每个GPIO引脚可配置为8种模式,不同的引脚还有相应的复用功能,复用功能重映射 等,足以满足应用需求STM32的浮空输入模式(GPIO_Mode_IN_
零死角玩转STM32---阅读摘记一 一、时钟相关从时钟树的分析,看到经过一系列的倍频、分频后得到了几个与我们开发密切相关的时钟。SYSCLK:系统时钟,STM32大部分器件的时钟来源。主要由AHB预分频器分配到各个部件。HCLK:由AHB预分频器直接输出得到,它是高速总线AHB的时钟信号,提供给存储器,DMA及cortex内核,是cortex内核运行的时钟,cpu主频就是这个信号,它的大小与STM32运算速度,数据存取速
关于把keil上的工程移植到IAR上 尝试了几次把STM 的keil工程移植到IAR,还好都成功了,这里把移植过程中需要注意的地方记下。。。第一步肯定是先建一个工程文件夹PWM,然后文件夹里面在建几个子文件夹:user、inc、startup 基本也就这三个。当然,还得STM的官方库目录拷贝过来,于是工程目录下就有四个文件夹(其实建几个都是随意的,按着习惯来就行,也可以对于着keil的工程来建对应的文件夹)。第二步就该把kei
linux 下编译STM32 今天,尝试了在我使用的Gentoo系统上位Cortex-m3构建GNU工具链,没想到如此简单。 以超级用户权限运行如下命令: crossdev --g 4.3.1-r1 -t arm-elf 因为官方的gcc在4.3版本下加入了对cortex-m3的支持,所以上面的命令用 --g 4.3.1-r1参数,指定了4.3.1-r1版的GCC。整个编译过程非常顺利,编译 成功后得到了:
关于用IAR建立 STM32工程的问题 最近开始从KEIL MDK转到IAR上面,由于刚接触IAR,有许多不熟悉的地方,本来对STM32就不是很熟悉,又换新的开发环境,所以折腾了蛮久的。创建工程时包含的头文件,core_cm3.h 这个头文件居然跟编译器的版本有关,开始的时候我是从别人的工程里面拷了一个core_cm3.h文件,结果一编译,一堆错误,“__interwork __softfp”,搞得一头雾水,网上查了好久,原来别人
c和指针 1. 要从逻辑上删除一段C代码,更好的方法是使用#if 指令。2. 预处理指令:预处理器读入源代码,根据预处理指令对其进行修改,然后把修改过的源代码递交给编译器。3. 所有传递给函数的参数都是按值传递的。地址传递也相当值传递,因为地址本身也可以作为一个特殊的“值”,所以地址传递也是一种特殊的值传递。只是为了强调其特殊性,故称之为“地址传递”。4.
fedora 下的dos模拟器 Linux下使用MASM编写汇编程序目前多数学校的微机原理课程使用的是MASM汇编器,而Linux中的汇编工具是nasm 。二者之间的语法有不少差别,不能通用。安装dosemu 之后可以在Linux中使用MASM和Debug安装 #yum install dosemu准备汇编工具 debug提示: dosemu已
第二章 shell程序设计 shell是用户与linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令,许多强大的功能都能通过shell实现1、重定向 文件描述符:0 为一个程序的标准输入、1为标准输出、2为标准错误输出 使用 > file.txt 可以将程序标准输出重定向到一个文件,默认情况下会将该文件的内容覆盖 >>file.txt 则将程序标准
第一章 入门 1、头文件、库文件 编程时需要用头文件来提供对常量的定义和对系统函数及库函数调用的声明,这些头文件几乎总是位于 /usr/include目录及其子目录中。。。那些依赖于特定linux版本的头文件通常在 /usr/include/sys 和 /usr/include/linux 中 用C语言编译器时,可以使用 -I 标志来包含保存在子目录或非标准位置中的头文件 eg:
我的linux程序设计------>历程 喜欢linux的shell终端,喜欢命令行!^_^正在学习linux程序设计,决定写一些博客,作为学习笔记。学习指导书《linux程序设计》持续更新中 第一章、入门 第二章、shell程序设计
home目录修改 核心:vi ~/.config/user-dirs.dirs 编辑这个文件,文件格式很简单,一看就明白了使用fedora linux,用户home家目录下缺省情况下可能会有以下几个目录,Desktop Downloads Music Pictures Videos Documents Maps Public Templates使用图形界面时,
linux 修改键盘键值 在终端输入xev | grep keycode然后点击键盘,就可以得到对应按键的键值比如state 0x0, keycode 108 (keysym 0xff1b, Escape), same_screen YES, XKeysymToKeycode returns keycode: 9 state 0x8, keycode 108 (keysym 0xff1b
fedora 下google 浏览器安装 fedora 18 无法安装外源软件包的情况下的google chrome安装办法2013年01月16日 19:05:55fedora 18正式版安装以后,没法安装外源软件包,提示信息是“unsigned”。还好,google chrome专门为fedora提供了repo。这样我们就可以先建立一个repo,再用命令安装即可。步骤如下:1.在 /etc/yum.repos.d/目
fedora 18 无线网卡驱动安装 Fedora 18下怎么安装BROADCOM BCM4312无线网卡驱动安装所用的工具su - yum install b43-fwcutter wget 下载windows驱动 cd /root/source wget http://downloads.openwrt.org/sources/broadcom-wl-4.150.10.5.tar.bz2 下
linux 共享内存分析 出处 http://www.blogjava.net/sunzhong/articles/297435.html共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区
fedora matlab下载安装 下载wget -c http://math.whut.edu.cn/shumo/special/msoft/mac/matlab_unix_2009b.iso挂载mount matlab_unix_2009b.iso /mnt/matlab/ -o loop进入目录后 ./installkey 55013-56979-18948-50009-49060即可使用离线
fedora 16 安装 mplayer 首先需要下载两个源http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-14.noarch.rpmhttp://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-14.noarch.rpm其他版本的没试过,最新版本的源fe
修改命令提示符 编辑~目录下的 .bashrc 文件添加 PS1=‘\[e\[31m\][@\W]\$'即可其中,\[e\[31m\]将命令提示符设置为红色 -- 31具体格式是 PS1=‘\[e\[前;背m\][\参数]\$'可以修改数值实现不同的颜色 前 背景色 30 40 黑色 31
termios 系列函数分析 -tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow, cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed, cfsetspeed等,用以获取/设置终端设备的属性/控制/速度。1. 函数声明函数声明#include #inc
Fedora 16无线网卡驱动安装 先上官网:www.broadcom.com/support/802.11/linux_sta.php 下载对应版本的驱动,因为我安装的系统是64位的,我下载了:hybrid-portsrc_x86_64-v5_100_82_38.tar.gz还要下载补丁,直接把下面的文件保存,名字为 this_file,注意:hybrid-portsrc_x86_64-v5_100_82_38.tar.gz和
fprintf 除了人工的分析之外,最简单最直接的调试方法要算printf了。不过,我们这里推荐使用的并不是初学C语言时使用的函数int printf(const char *format, ...),而是稍微复杂一点的fprintf()函数,因为它更方便我们之后重定向错误输出信息到指定的设备。fprintf()函数的原型如下: int fprintf(FILE *stream, const
linux shell学习中 正则表达式 $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '/n' 或 '/r'。要匹配 $ 字符本身,请使用 /$。 ( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 /( 和 /)。
关于windows下使用tftp服务器烧写程序到TQ2440开发板的nand flash(解决蓝屏的方法!) 由于使用usb下载的时候总是出现蓝屏现象,这种几乎无法避免,在昨天经历几次蓝屏后,我决定寻找其他烧写程序的方法,抛弃USB下载!tftp是首先想到的,也是实验成功的,写下博客,记下昨天的收获。顺便感谢昨天耐心指导我的大牛!一开始,你就要先将电脑的防火墙关了。。。。1、用jlink烧写u-boot到nor flash中,注意,TQ出厂自带的u-boot 经测试无法使用tftp下载功
内存字节对齐问题! 写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧. 一、什么是对齐,以及为什么要对齐:1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间
关于ucos-ii中 OSUnMapTbl[] 的理解 先看OSUnMapTbl[]的原型!OSUnMapTbl[256] = {/* 0 1 2 3 4 5 6 7 8 9 A B C D E F 我自己加的序号,好对应点 */ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, /* 0x00 to 0x0F
ucos-ii中内存块的建立 OS_MEM *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err);中有如下语句: OS_MEM *pmem; INT8U *pblk; void **plink; INT32U i; plink = (v
关于yaff2驱动 在linux操作系统的顺利移植之后,linux的内核虽然在板子上跑了起来,但是此时linux还不支持板子的的各个硬件,比如说lcd,摄像头,声卡,usb等模块,我们必须要在板子上装入驱动程序后,才能上这些硬件在linux操作系统下工作。 这些驱动在内核中都有驱动的源码,我们要做的就是将这些驱动源码编译到内核中,当然在编译之前是需要对驱动源码做相关的修改的,因为我们的硬件和内核中的驱
函数调用 这段代码反汇编后,代码是什么呢?#include stdio.h>long test(int a,int b){ a = a + 3; b = b + 5; return a + b;}int main(int argc, char* argv[]){ printf("%d",test(10,90));
关于补码的计算 补码[基础] 1、在计算机系统中,数值一律用 补码 来表示(存储)。 也就是说:CUP在处理数值数据的时候,是用补码在计算。(而不是原码!) 主要原因: A 使用补码,可以将符号位和其它位统一处理; B 同时减法也可按加法来处理; C 两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃; 2、补码与原码的
TQ2440之定时器中断0 S3C2440有5个16位的定时器,其中定时器0、1、2、3有脉冲宽度调制(PWM)功能,定时器4是一个内部定时器,没有外部输出引脚。在这里不详细的写定时器的工作原理,只对定时器0进行操作,其他的定时器操作类似。不废话了,上程序分析:1、整体程序框架 程序依然由两部分组成,startcode为启动代码(其实并没有用到所有的启动代码,这里只是将它们一起添加了。),sourc
tq2440流水灯实验 1、查看核心板的电路图,发现4个led分别接在GPB5~GPB8四个引脚,那么只要能让这四个引脚轮流输出低电平即可实现流水灯。2、新建一个工程ledtest.mcp 工程需要一些板子的基础程序,新手看不懂的可以先不用去管,只需要将这些程序添加到工程即可。3、关于点亮led的程序Main.c#include"led.h"int Main(){ Led
AXD session 问题 是用AXD调试的时候,有时出错,提示“the session file 不能打开确定后,在弹出的load session 窗口中点击“取消”。若进入AXD后,主调试窗口没有任何代码,且FILE->Load Image菜单项无效时,此时需要重新打开Option->Configure Target,单击Ok按钮,然后通过选择File->Load Image加载调试文件。