- 博客(54)
- 资源 (80)
- 收藏
- 关注
原创 S5PV210的BL1应用
准备分析 经过了对NandFlash的操作现在可以熟练的读NandFlash了,这时候单独将启动代码整理成BL1就显得很必要了,不然整个程序会显得很乱,以后的裸机就可以只考虑自己,不用考虑启动的事了。 资源工具 同《 S5PV210的LED应用(一)》 NandFlash: K9GAG08U0F
2013-05-31 21:26:49 3069
原创 S5PV210的NandFlash应用(四)
准备分析 经过了《S5PV210的NandFlash应用(三)》对从NandFlash中拷贝数据是确定可行了。这次主要是把“特殊的二进制文件AB”换成一个LED闪烁的程序。由于前边没有了那16bit的校验和,这时程序的链接地址,拷贝目的地址以及跳转地址可以统一起来了。这里用CONFIG_SYS_TEXT_BASE来代替,值为0xD0024000。
2013-05-31 20:40:08 2116
原创 S5PV210的NandFlash应用(三)
准备分析 经过了《S5PV210的NandFlash应用(二)》对于二进制文件前16k的存取方式都了一定的了解。这次要证明的是第NandFlash第4页以后存取方式。《S5PV210的NandFlash应用(二)》里边的210.bin(大小为16k)是以存到4k为单位存到了前4页(0, 1, 2 ,3)的每页的前4k处。为此我自己写了一个8k的二进制文件(名字叫AB)
2013-05-31 16:31:23 2761
原创 S5PV210的NandFlash应用(二)
准备分析 《S5PV210的NandFlash应用(一)》有很多bug,为了文章完整性就不在原文上进行修改了。(一)是在调试nand_cp.c的时候,程序运行过之后,灯立即亮了起来,让我误以为我的NandFlash读操作正常了,最后在往下进行大文件拷贝的时候出现异常,我不得不重新回到这个Nand_cp.c这里来。这次结合Uart打印出NandFlash读出的数据,和2
2013-05-31 14:20:52 2661
原创 S5PV210的Uart应用
准备分析 S5PV210的NandFlash应用(一)出现很多bug,所以要先把Uart搞出来了。Uart一般是和clock相关联的,但是IROM中的代码已经提升了PCLK到66.5MHZ,这里就不进行CLOCK的设置了。 资源工具 同《 S5PV210的LED应用(一)》着手
2013-05-31 11:52:58 3707
原创 S5PV210的NandFlash应用(一)
准备分析 标题挂了一个(一),代表这个是涉及到NandFlash并不深入,只实现读操作。还是16k的代码,这次从NandFlash中读取,读到iRAM中地址为0xD0024000的地方。并调用main运行。如下图所示:(CPU会自动把B区代码拷贝到A区,我用A区代码从将B区代码拷贝到C区,并调用main运行) 资源工具
2013-05-30 13:39:58 3986 1
原创 S5PV210的IRAM应用
准备分析 IRAM的大小96k,其实前两个程序都在这里运行的,程序都小于16K。要实现的是从把IRAM从的前16k从IRAM的起始地址0xD0020000拷贝到0xD0024000 处,调用main。堆栈指针设置到了0xD003_7D80处。程序的链接地址是0xD0024010.用图表示如下。本程序只涉及到IRAM,重点为在于重定向。 资源工
2013-05-30 13:08:53 3515
原创 S5PV210的LED应用(二)
准备分析 这次用C语言实现LED的控制,要设置堆栈指针,这里的start.S好比是有操作系统的helloworld程序中的crt0.o--是一个启动代码。 堆栈指针设置到了0xD003_7D80处。资源工具 同《 S5PV210的LED应用(一)》着手写程序@***************
2013-05-30 13:08:33 2510 2
原创 S5PV210的LED应用(一)
准备分析 看似就一个LED,但是S5PV210不同于S3C2440,不是在于LED,而是在于从NandFlash启动的过程中不一样。对于S3C2440,只要程序没有问题,想办法下载程序到NandFlash的0地址处一般都是可以正常运行的,下载的方法无非采用开发板厂家下载BOOTLOADER的方法来下载。S5PV210启动时从NandFlash的0地址拷贝时候会拷贝前16k,但是会
2013-05-30 13:08:11 5852 5
转载 C语言运算符优先级 详细列表
文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。恩,问这个问题的人太多了,懒得继续回答,直接贴上来自己看。。。优先级运算符名称或含义使用形式结合方向说明1[]数组下
2013-05-28 14:50:57 1443
转载 数组名a 作为 左值和 右值的区别
比如:x=y左值:在这个上下文环境中,编译器认为x的含义是x所代表的地址。这个地址只有编译器知道,在编译的时候确定,编译器在一个特定的区域保存这个地址,我们完全不必考虑这个地址保存在哪里。右值:在这个上下文环境中,编译器认为y的含义是y所代表的地址里面的内容。这个内容是什么,只有到运行时才知道。C语言引入一个术语——“可修改的左值”。意思就是,出现在赋值符左边的符号
2013-05-25 09:41:14 4307 2
原创 Eclipse cdt 设置条件断点
GDB添加条件断点01 #include 02 03 int main()04 {05 int cnt, len;06 for (cnt = 0; cnt 07 {08 printf("cnt = %d\n", cnt);09 len = cnt + 10;10 }11 }roo
2013-05-24 20:27:44 5348
原创 单步编译helloworld程序
再看这个图的时候,有就一个种一定要能从A-》B-》C-》D单步编译出来。这么一个程序:#include int main(){ printf("Hello world!\n"); return 0;}1.预处理cpp hello.c - o hello.i2.编译gcc -E hello.i -o hello.
2013-05-24 12:27:10 1295
原创 C语言中用柔性数组实现斐波那契数列
一个柔性数组使用实例:#include #include typedef struct _soft_array{ int len; int array[];}SoftArray;int main(){ int i = 0; SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeo
2013-05-23 18:52:15 3061
原创 const遇到指针后就彻底瓦解了
1.const修饰变量正常不能改变:#include int main(){ const int a = 1; a = 2; //报错 printf("%d\n", a); return 0;}用指针后可以改变:#include int main(){ const in
2013-05-23 11:44:13 1085
原创 void指针和memset实现
1.void指针2.实现memsetvoid* my_memset(void* p, char v, int size){ void* ret = p; char* dest = (char*)p;//一定养成习惯强制转换 int i = 0; for(i=0; i<size; i++) { dest[i] = v; } return r
2013-05-23 09:46:35 1789
原创 C语言一些面试题-1
1.请阅读下面的程序,理解程序的意图并找出程序中的错误改正。main(){ char*src="hello,world"; char* dest=NULL; int len=strlen(src); dest=(char*)malloc(len); char* d = dest;
2013-05-22 22:25:41 1345
原创 C语言中的BOOL变量
#include /* * 定义一个布尔变量 * 在C99以后才有正规的布尔变量 * 很多编译器默认不是C99的,所以 * 为了保证程序的可移植性,要自己 * 定义BOOL变量 */typedef enum _bool{ FALSE = 0, TRUE = 1}BOOL;int main(){ BOOL b = TRUE; if(b) //不要这样if(b ==
2013-05-22 15:47:06 3825
原创 static修饰的局部变量
static修饰的局部变量说明:实验:所以我觉得,static修饰的局部变量不是调用这个函数时候才进行的初始化,在程序一运行就进行了初始化。
2013-05-22 15:23:55 1686
转载 Uncompressing Linux..... done, booting the kernel.
内核启动卡在Uncompressing Linux..... done, booting the kernel.这好像是个老生常谈的问题了。成因在网上也罗列了很多种,可这次我碰到的,却没百度出解决方法,纠结了我很久才解决。我先把造成Uncompressing Linux..... done, booting the kernel.的常见的几种可能再罗列一下1、机器码不匹配解
2013-05-21 20:57:38 3635 2
原创 C语言中的函数类型和函数指针
#include #include void func1(){ printf("Func1 is runing...\n");} void func2(){ printf("Func2 is runing...\n");} void func3(){ printf("Func3 is runing...\n");} void func4()
2013-05-21 09:44:48 1664
原创 C语言中传递与访问二维数组
#include /* * void access(int a[][3], int row) * 不用传递col,它可以通过以下方法算出来 */void access(int (*a)[3], int row){ int col = sizeof(*a) / sizeof(int); int i = 0; int j = 0; printf("sizeof(a) = %d
2013-05-21 09:04:24 1762
原创 下标到指针之间和转换
以下的程序做了什么。#include int main(){ int a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}; int i = 0; int j = 0; for(i = 0; i<3; i++) { for(j=0; j<3; j++) { printf("%d\n", *(*(a+i)+j)); }
2013-05-21 00:22:35 1119
原创 C语言中指向指针的指针
C语言中指向指针的指针#include int main(){ int a = 1; int* p = NULL; int** pp = NULL; pp = &p; *pp = &a;// ==> p = &a; printf("%d", **pp); return 0;}使用实例:重置动态空间大小(类似于在函数中修改入参)#include
2013-05-20 23:29:00 1329
原创 C语言中的指针数组
#include #include int lookup_keyword(const char*key, const char* table[], const int size){ int ret = -1; int i = 0; for(i=0; i<size; i++) { if (strcmp(key, table[i]) == 0) { ret = i;
2013-05-20 23:05:07 1109
原创 C语言中的数组指针
#include int main(){ int i; int* pI = &i; //普通类型 typedef int(AINT5)[5]; AINT5* p1; int array[5]; p1 = &array; //数组指针1 int (*p2)[5] = &array; //数组指针2(不建议这样写) int (*p3)[4] = &array; // X
2013-05-20 22:50:46 948
翻译 用scanf读一个unsigned char?
up vote0down votefavoriteI'm trying to use this code to read values between 0 to 255 (unsigned char).#includeint main(void){ unsigned char value; /* To read the numb
2013-05-20 19:34:15 4480
原创 main函数的参数
main函数的参数int main(int argc, char* argv[]) 上边的样子,见过也知道,argc是参数的个数,char* argv[]是一个指针数组。今天见了一个新鲜的:int main(int argc, char* argv[], char* env[])char* env[]是系统环境变量,这也能大概明白了,在lin
2013-05-20 15:55:02 1113
原创 C语言隐式类型转换
#include int main(){ int i = -2; unsigned int j = 1; if ((i + j) >= 0) { printf("i+j>=0\n"); } else { printf("i+j<0\n"); } printf("i+j=%d\n", (i + j)); // X printf("i+j=%x\n", (i + j)
2013-05-19 21:13:31 917
原创 C语言中易错的优先级
#include #define STRUCT(type) typedef struct _tag_##type type;\struct _tag_##typeSTRUCT(Demo){ int* pInt; float f;};int func(int v, int m){ return (v & m != 0); //((v & m) != 0);}in
2013-05-19 15:31:53 1098
转载 点操作符和箭头操作符
首先介绍一下C++中的结构。对于一个结构来说:struct MyStruct{ int member_a; };如果有个变量MyStruct s,那么使用其中的成员元素时可以用s.member_a = 1;如果采用指针方法访问,比如MyStruct * ps,那么同样的访问就必须使用如下形式:(*ps).member_
2013-05-19 15:15:51 1382
原创 char* p3 = "1";和char* p1 = 1;区别
char* p3 = "1";和char* p1 = 1;区别 以前都不会导致看到这个两个十分不理解。 说是第一个是p3指向的内容是1,第二个是p1指向内存地址1。我问为什么,表达式的前半截都是一样的,怎么一个就是内容,一个就是地址了。得到的答案是:就是这样。 再次遇到的时候,后者已经深刻理解了,前者在编译的时候编译器提醒了我:
2013-05-19 09:25:28 1405
原创 Eclipse cdt 配置显示Segment fault信息
how to let eclipse cdt show runtime error (e.g. segmentation fault)I develop and run C++ program in Eclipse CDT on Linux.The problem is that Eclipse CDT does't show any runtime
2013-05-19 08:56:48 1946
转载 编写安全代码——不要用memcmp比较structure
编写安全代码——不要用memcmp比较structureSubmitted by gfree.wind@gmail.com on Wed, 2012-06-20 12:39编程实践本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于
2013-05-18 15:57:07 1182
原创 ARM架构下GCC中progma编译指示字
ARM架构下GCC中progma编译指示字主要说#pragma pack()1.为什么要内存对齐2.裸机代码验证ARM9(S3C2440)的默认对齐字节数(还不能证实)3.验证奇数地址访问的可行性(经实现可以看出,没有对奇数地址有特别要求)4.struct大小
2013-05-18 15:30:19 1633
原创 C语言编译指示字#error #warning #line
#include int main(){#line 1 "kangear"#ifndef COM#error not COM def#endif printf("Hello world\n"); return 0;}是在预处理的时候,打断的。
2013-05-18 13:04:19 1397
原创 收集C语言中经典有参宏定义
收集C语言中经典有参宏定义1. malloc #define MALLOC(type, n) (type*)malloc(n*sizeof(type)) e.g: int *p = MALLOC(int, 5);2. 两个变量值交换swap #define SWAP(a, b) (a^=b^=a^=b)
2013-05-17 09:11:39 1600
原创 再说BSS段的清理
再说BSS段的清理 以前遇到一个裸机程序不能改变全局变量值的问题,最后迷迷糊糊解决了:手动添加了一个链接脚本,清理了BSS段。问题得以解决,就认定是BSS段清理的问题,全局变量在BSS段中。 但是现在看这个结论下的有点不全面。根据名著上说BSS段是放未初始化或者初始化为0的全局变量(经手动证实无误),我不想着有问题了。那么把这个功劳全归于BSS段的
2013-05-16 18:57:53 1874
原创 实例说明C语言中初始化和未初始化的全局变量所在不同的段
实例说明C语言中初始化和未初始化的全局变量所在不同的段一个程序:Makefile:objs := bss.oall: bssbss: $(objs) gcc -o bss_elf bss.c objdump -D bss_elf > bss.disclean: rm -f bss_elf bss.dis *.o 主程序:/* * bss.c
2013-05-16 17:55:56 3119
HelloWorld.PCL3GUI打印机测试文件
2014-08-05
busybox_bin.tar.gz
2014-06-28
图片格式大全
2014-06-20
vissible-ibus.tar.gz
2014-06-19
Source Insight 3.X utf8支持插件
2014-05-29
Android Linux Printer simple Ver1.1
2014-02-18
Android Linux Printer simple v1.0
2014-01-14
SecureCRT Ubuntu(scrt-7.2.0-359.ubuntu12.i386.deb)
2013-10-12
tiny210v2-u-boot-130626
2013-06-27
uboot for tiny210 v2 Ver130625
2013-06-25
x264 ffmpeg结合嵌入式使用
2013-06-05
(winmerge for linux)grimmdp-winmerge-1bd708f4cf72.zip
2013-06-01
scrt-7.1.0-244.ubuntu12.i386.deb
2013-05-30
S3C2440裸机读写SD卡(可调试可运行)
2013-04-26
裸机实现LCD显示(可调试也可以下载到NandFlash运行MINI2440)
2013-04-17
纯裸机i2c在s3c2440上实现
2013-04-16
BootLoader TFTP服务器的追加
2013-03-17
mStar 6A648 双 WiFi 所使用的8188eu.ko
2018-10-10
TensorFlow之TF Speech等等
2018-08-25
不是完整的MP3格式_Android播放会有问题
2018-04-01
EPSON_L310_Series_linux_driver
2018-03-17
strace-armv7-4.19
2017-09-10
imgrepacker
2016-04-20
Symantec Ghost 12.0.0.4112.rar 包含Linux版
2016-04-20
ubuntu-core-14.04-core-armhf.ext2
2015-10-25
HelloWorld.ext4
2015-10-24
Jlink调试S5PV210
2015-09-26
toolbox 静态编译-可以用于普通嵌入式Linux系统中
2015-02-13
strace 各种架构的静态编译版本
2014-11-12
tinyalsa-utils 静态链接
2014-10-15
HP LaserJet 1020 test
2014-10-07
freetype example
2014-09-24
AdbTest/Android USB例子
2014-08-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人