ARM嵌入式底层软件开发
求佛_ce123
专注于嵌入式软件开发
展开
-
深入浅出ARM原子操作
概述很多情况下我们只是需要一个简单的、高效的、线程安全的递增递减方案。简单,意味着程序员尽可能少的操作底层或者实现起来要比较容易; 高效意味着耗用资源要少,程序处理速度要快; 线程安全也非常重要,这个在多线程下能保证数据的正确性。这三个条件看起来比较简单,但是实现起来却难以令人满意。原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为"不可被中断的一个或一系列操作" 。此外,在多处理器上实现原子操作就变得更复杂。相关术语定义如下:原创 2020-09-13 15:45:06 · 5173 阅读 · 0 评论 -
栈信息统计
局部变量和函数调用关系都需要保持在栈,如果局部变量过大,或函数调用关系过深(递归或者嵌套调用)则很容易导致栈异常。程序需要使用的栈空间大小,可以在程序编译时就确认。下面列举RVCT和GCC两种编译器查看栈信息的方法,其他编译器也有类似的功能。RVCTarmlink最后链接程序时,使用-callgraph参数。-callgraph 该选项创建一个HTML格式的静态函数调用图。这个调用图给出了映像文件中所有函数的定义和引用信息。对于每一个函数它列出了: 1. 函数编译时候的处理器状态(ARM..原创 2020-08-16 23:02:43 · 1056 阅读 · 0 评论 -
GPIO(一)汇编程序
GPIO(一)汇编程序@******************************************************************************@ 功能:LED点灯程序,点亮LED1-4@******************************************************************************原创 2012-01-28 09:55:42 · 3455 阅读 · 0 评论 -
'xxx' declared `static' but never defined
'xxx' declared `static' but never defined【问题描述】 uart.c文件中有函数read_sample的实现:static void delay(void){ //statement}uart.h文件中有函数delay的声明:static void delay(void);程序编译的时候会报错:warning: 'delay' define原创 2012-11-21 23:02:35 · 7067 阅读 · 2 评论 -
浅析gcc、arm-linux-gcc和arm-elf-gcc的关系
浅析gcc、arm-linux-gcc和arm-elf-gcc的关系嵌入式开发交流群280352802,欢迎加入!一、GCC简介 The GNU Compiler Collection,通常简称 GCC,是一套由 GNU 开发的编译器集,为什么是编辑器集而不是编译器呢?那是因为它不仅支持 C 语言编译,还支持 C++, Ada,Objective C 等许多语言。另外 GCC 对硬件平台的支持,可原创 2012-11-26 09:09:16 · 19567 阅读 · 0 评论 -
GPIO(二)C程序
GPIO(二)C程序@******************************************************************************@ File:crt0.S@ 功能:通过它转入C程序@******************************************************************************原创 2012-01-28 10:25:36 · 2624 阅读 · 2 评论 -
关于Deprecated declaration MDK_Miniz_UnInit - give arg types的编译问题
关于Deprecated declaration MDK_Miniz_UnInit - give arg types的编译问题 用MDK开发ARM9程序时,出现了该问题.出问题的函数如下:void mz_uninit(){ malloc_cus = (malloc_cus_t)0; free_cus = (free_cus_t)0; realloc_cus = (realloc_cus_t原创 2013-10-10 10:17:27 · 3490 阅读 · 0 评论 -
自己实现的简易堆分配器
实现了一个简易的堆分配器.原创 2014-03-21 11:54:03 · 3573 阅读 · 1 评论 -
ARM连接器错误一则
Error: L6915E: Library reports error: scatter-load file declares no heap or stack regions and __user原创 2014-11-18 15:32:05 · 12114 阅读 · 0 评论 -
嵌入式底层开发的一些细节
嵌入式底层开发的一些细节#define GPB5_out (1#define GPBCON (*(volatile unsigned long *)0x56000010) 对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的。如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语言完成实际对设备的控制,因为C语言并没有提供真正的“原创 2012-01-28 12:06:42 · 3051 阅读 · 1 评论 -
warning: conflicting types for built-in function 'puts'
warning: conflicting types for built-in function 'puts'【编译器版本】 arm-linux-gcc 3.4.1【问题描述】 在做嵌入式底层开发时,自己写了一个puts函数,也就是通过串口发送字符串到超级终端。但在编译程序的时候出现了如下问题:warning: conflicting types for built-in function 'pu原创 2012-11-21 22:13:22 · 17375 阅读 · 1 评论 -
对S3C2440裸板程序设计(无操作系统)的抽象
对S3C2440裸板程序设计(无操作系统)的抽象 在嵌入式领域中,几乎所有的设备控制和各种协议控制都在同一个嵌入式CPU当中,非常有利于对CPU Core和设备进行抽象。如果能对CPU Core和设备的各种控制进行抽象,人们在移植OS或者开发驱动程序时就没有必要对CPU进行非常深入的了解,不必要了解某个寄存器的某个位是控制什么的,也没有必要了解怎样初始化某个控制寄存器等等。原创 2012-02-10 21:22:17 · 4896 阅读 · 0 评论 -
深入分析S3C2440启动代码中大小端问题
深入分析S3C2440启动代码中大小端问题一、ADS1.2中关于大小端的设置以及对编译后的代码的影响下面是一段代码在线段模式下编译,生成的二进制文件的内容大端模式下编译,生成二进制文件的内容根据上面的内容可以看出:它们的字节序是相反的,也就是说,ADS1.2中对大小端的设置会影响最终生成的二进制文件的字节序。二、S3C2440启动代码中与大小管相关的代码Option.inc中相关代码 GBLL原创 2012-02-17 22:03:12 · 6465 阅读 · 7 评论 -
S3C2440启动代码中应用程序执行环境的初始化
S3C2440启动代码中应用程序执行环境的初始化一、基础知识 我们编写的源文件(.c 或.s)经过ARM 编译器的编译生成ELF 格式的目标文件(后缀名为.o),目标文件经过ARM 连接器连接以后生成ELF 格式的映像文件(后缀名为.axf),此时的映像文件还包含一些调试信息,我们还需要通过fromelf 工具将其转换成适合在ROM 或RAM 中运行的二进制代码(后缀名为.bin原创 2012-02-19 11:38:24 · 5950 阅读 · 3 评论 -
undefined reference to '_modsi3'和`__udivdi3'问题的分析与解决办法
undefined reference to `__modsi3'和`__udivdi3'问题的分析与解决办法嵌入式开发交流群280352802,欢迎加入!【编译器版本】 arm-linux-gcc 3.4.1【问题描述】 在做嵌入式底层开发时(基于ARM编译无OS的程序),编写整数转字符串函数,用到了求余操作%和除数操作,部分代码如下:...while(num){ denom = num原创 2012-11-27 08:53:57 · 13216 阅读 · 0 评论 -
Windows XP下超级终端与嵌入式开发板交互的一些技巧
Windows XP下超级终端与嵌入式开发板交互的一些技巧嵌入式开发交流群280352802,欢迎加入!一、简介 超级终端是Windows操作系统自带的一个通用的串行交互软件,可以通过这个工具对路由器交换机等进行配置。使用调制解调器、一条零调制解调电缆或以太网连接,再调用此程序能够连接到其他计算机、Telnet 站点、公告板系统 (BBS)、联机服务和主机。我们可以用它来调试电路是否可行。 嵌入式原创 2012-12-03 12:48:33 · 7343 阅读 · 0 评论 -
“.rodata.str1.4”的连接(link)问题
关于“.rodata.str1.4”的连接(link)问题【问题描述】 最近在写一些嵌入式底层相关的程序,有如下程序段(编译器为arm-linux-gcc 3.4.1):while(1){ unsigned char* s="abcd"; uart0_puts(s);}但在编译的时候出现了如下问题:/usr/local/arm/3.4.1/bin/../lib/gcc/arm-linux/原创 2012-11-21 11:12:12 · 9232 阅读 · 0 评论 -
详解ARM9的CPSR寄存器
详解ARM9的CPSR寄存器 最近在学习嵌入式底层系统开发,在写启动代码时要设置各个模式的SP,需要调整CPU的工作模式,部分代码如下:.equ DISABLE_IRQ, 0x80.equ DISABLE_FIQ, 0x40.equ SYS_MOD, 0x1f.equ IRQ_MOD, 0x12.equ FIQ_MOD, 0x11.equ SVC_MOD, 0x13.equ ABT_原创 2012-11-21 20:37:03 · 6124 阅读 · 0 评论 -
VMware7.1.5虚拟机安装Ubuntu 11.10使用share folders共享目录
VMware7.1.5虚拟机安装Ubuntu 11.10使用share folders共享目录将虚拟机掉电关闭(不能暂停),设置share folders目录,重启虚拟机。此时/mnt/hgfs目录仍然是空的。应该sudo apt-get install open-vm-dkms,一路按enter键通过。然后sudo mount -t vmhgfs .host:/ /mnt/hgfs原创 2012-01-30 21:10:25 · 3403 阅读 · 1 评论