iar 连接linux开发板,LED裸机程序(IAR)

LED裸机程序(IAR)

一、实验环境

开发环境:IAR5.30

开发板:UT-S3C6410

开发工具:JLINK V8

二、实验目的

在无操作系统的开发板上,运行程序,掌握裸机程序的开发过程,熟悉IAR和JLINK的使用。

三、实验步骤

1、准备工作

找一份S3C6410X芯片手册和开发板原理图,还要找根跳线把调试端口JTAG傍边的第二个和第三个引脚连起来。

没有操作系统的ARM和51单片机没有多大的差别,所以一开始大家就不要有畏惧感。

先准备点理论知识,外围设备会映射到内存地址空间,地址是固定不变的,因不同的芯片而不同,可以从S3C6410X.PDF的资料上找映射的详细信息。找到外围设备对应的内存地址后,就可以对外围设备进行操作了,如果用C语言,用指针就可以对其进行读写操作,之后的事一切都变得很简单。

2、创建工程,修改参数

打开IAR,新建一个工程。然后打开配置选项project> option:

我的开发板的内核是ARM1176JF-S(在S3C6410X的芯片资料上能找到),所以选上。

然后:

配置好,点击OK。

3、添加启动代码

添加一个启动代码文件(cstartup.s)到工程中,这个代码的作用是初始化中断和7种异常情况并建立异常向量表,完成后会跳到main函数的入口地址执行。

启动代码文件放在C:\Program Files\IAR Systems\Embedded

Workbench 5.4 Kickstart\arm\src\lib\arm目录下,先把它复制到自己的工程目录下。

步骤1:

步骤2:

点击打开,添加完成。

4、添加.ICF文件

.ICF文件的作用是告诉linker怎么把数据和代码分布到物理内存中,和MDK中的scatter

file是相同作用。

本实验用的.ICF文件放在C:\Program Files\IAR Systems\Embedded

Workbench 5.4 Kickstart\arm\config目录下,复制到工程目录下,并改名为6410.icf

从图中可以得知rom是从0X0C00000地址开始的,这个区间(0x0c000000~0x0fffffff)正是我们经常烧写bootloader的地址,我们正真能操作的空间大小只有4K,所以生成的可执行文件不能大于4K,详细信息芯片资料上有介绍。所以对.icf文件进行如下修改:

define symbol __ICFEDIT_intvec_start__ = 0x0c000000;

/*-Memory Regions-*/

define symbol __ICFEDIT_region_ROM_start__= 0x0c000000;

define symbol __ICFEDIT_region_ROM_end__= 0x0c000FFF;

define symbol __ICFEDIT_region_RAM_start__= 0x0c000000;

define symbol __ICFEDIT_region_RAM_end__= 0x0c000FFF;

然后设置一下:

4、查找LED1的映射地址

打开开发板核心板的原理图:

不难找到LED1对应的引脚是GPM0,然后找打开S3C6410的芯片资料,找到GPM映射的详细信息。

可以看到GPMCON GPMDAT两个寄存器映射到的内存地址空间,GPMPUD就别不要管了。

这是LED1映射到的具体的地址,可以同过对GPMCON设置把GPM0设置为OUTPUT模式。

这是LED的数据地址,没个LED占了一个bit,对这个地址上相应的位写数据就能控制LED的亮和灭(1/0)。

5、编写代码

#include

int main(void)

{

int i;

int *pcon = NULL;

int *pdat = NULL;

pcon = (int *)0x7f008820;

*pcon = 0x1; //bit0 : 0001 means GPM0 output

pdat = (int *)0x7f008824;

while(1)

{

*pdat = 0x0; //0 - LED OFF

//delay

for(i = 0;i<500000;i++);

*pdat = 0x01; //1 -- LED ON

for(i = 0;i<500000;i++);

}

}

编好后添加到工程中。

上面的程序风格显然是不可取,只是为了直观,具体请参考附件:zip.gif LED.zip

接好JLINK,点击DEBUG AND DOWNLOAD按钮就能在板子上看到现象并能进行调试。

水平有限,如果有错误的地方,请指正,thanks

cjok.liao@gmail.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简易呼吸灯c语言程序,呼吸灯 - 单片机教程 - C语言网

1.双定时器呼吸灯实现呼吸灯的实现原理就是让小灯的IO端口在一段时间里PWM由大到小变化的占空比输出&#xff0c;接着又由小到大的占空比输出&#xff0c;小灯显示效果就是时亮时暗地交替闪烁。首先我们用定时器0定时0.1ms&#xff0c;全局变量pwm在其中断函数里执行简单的从0到…

Python学习---面向对象的学习[深入]

类的深入学习 a. Python中一切事物都是对象 b. class Foo: pass obj Foo() # obj是对象&#xff0c;Foo类 # Foo类也是一个对象&#xff0c;type的对象 c. 类都是type类的对象 type(..) “对象”都是以类的对象 类() d. 类实际上是type类型的对象&#xff0c;所有的…

TCP/IP模型

应用层&#xff08;会话层&#xff0c;表示层&#xff0c;应用层&#xff09; HTTP FTP DNS 传输层&#xff08;传输层&#xff09; TCP UDP 网际层&#xff08;网络层&#xff09; IP 网络接口层(物理层…

c语言银行卡管理系统程序设计报告,《c语言程序设计》课程设计报告-职工信息管理系统.doc...

《c语言程序设计》课程设计报告-职工信息管理系统.doc还剩24页未读&#xff0c;继续阅读下载文档到电脑&#xff0c;马上远离加班熬夜&#xff01;亲&#xff0c;很抱歉&#xff0c;此页已超出免费预览范围啦&#xff01;如果喜欢就下载吧&#xff0c;价低环保&#xff01;内容…

今年,自动驾驶卡车将在无人驾驶的情况下上路

文章来源&#xff1a;IEEE电气电子工程师Photo: TuSimpleFirst in Freight: In 2021, San Diego–based startup TuSimple plans to deploy autonomous trucks that drive themselves from pickup to delivery without anybody on board.Tesla、Uber、Cruise和Waymo等公司承诺&…

Leetcode--102. 二叉树的层次遍历

给定一个二叉树&#xff0c;返回其按层次遍历的节点值。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果&#xff1a; [ [3], [9,20], [15…

C语言求一个数组中第k大的数,leetcode | Median of Two Sorted Arrays 寻找2个有序数组中第k大的值...

There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays.The overall run time complexity should be O(log(m n)).分析本题更经典通用的描述方式时&#xff1a;给定2个有序数组&#xff0c;找出2个数组中所有元素中第…

线上服务CPU100%问题快速定位实战

功能问题&#xff0c;通过日志&#xff0c;单步调试相对比较好定位。 性能问题&#xff0c;例如线上服务器CPU100%&#xff0c;如何找到相关服务&#xff0c;如何定位问题代码&#xff0c;更考验技术人的功底。 58到家架构部&#xff0c;运维部&#xff0c;58速运技术部联合进行…

最新研究:超级人工智能,从理论上就无法控制

文章来源&#xff1a;机器之心作者&#xff1a;Charles Q. Choi 编辑&#xff1a;泽南、杜伟近日&#xff0c;一项新的研究发现&#xff0c;从理论上来看&#xff0c;人类不可能控制超级人工智能。更为糟糕的是&#xff0c;这项研究也明确了人类无法在这种 AI 生成之时发现它…

Leetcode--5274. 停在原地的方案数

有一个长度为 arrLen 的数组&#xff0c;开始有一个指针在索引 0 处。 每一步操作中&#xff0c;你可以将指针向左或向右移动 1 步&#xff0c;或者停在原地&#xff08;指针不能被移动到数组范围外&#xff09;。 给你两个整数 steps 和 arrLen &#xff0c;请你计算并返回&…

c语言多个子函数声明,C函数在多个源文件中的声明和定义

这是src1.c的内容&#xff1a;#include extern int w;//int go(char); // no need to declare here. WHY????main(){char af;go(a);printf("%d\n", w);}这是src2.c的内容&#xff1a;#include int w 99;int go(char t){printf("%c\n%d\n",t,sizeof(t)…

Leetcode--200. 岛屿数量

给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;计算岛屿的数量。一个岛被水包围&#xff0c;并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 输入: 11110 11010…

看懂2020年智能浪潮,我们从百度和谷歌的AI足迹出发

来源&#xff1a; 脑极体2020年已经过去&#xff0c;无论我们过得顺遂平安&#xff0c;还是过得无比艰难&#xff0c;我们应该都会记住这一年。回顾2020年&#xff0c;在这个不同寻常的疫情之年&#xff0c;科技成为人类抗击疫情的关键&#xff0c;而人工智能技术投入抗疫战争之…

公交换乘系统c语言,公交换乘的简单实现(源码)

最初是做2004年某期《程序员》杂志上的一道题&#xff0c;叫“洞穴探险”&#xff0c;结果写着写着就做到公交换乘的思路上去了。看来做GIS做久了&#xff0c;都成习惯了。后来工作忙&#xff0c;就扔下了。最近翻看以前自娱自乐时写的东东&#xff0c;看到了这段代码&#xff…

记使用talend从oracle抽取数据时,数字变为0的问题

数据源为oracle&#xff0c;字段类型为number。 发现通过mainline连接到一个logrow控件&#xff0c;输入的该字段的值为0 经过多次测试还是没发现有什么规律。 通过查看代码发现有这一句内容。 if (row2.ID ! null) { //strBuffer_tLogRow_1.append(row2.ID.setScale(-127,java…

Leetcode--494. 目标和

给定一个非负整数数组&#xff0c;a1, a2, ..., an, 和一个目标数&#xff0c;S。现在你有两个符号 和 -。对于数组中的任意一个整数&#xff0c;你都可以从 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例 1: 输入: nums…

C语言int r(int m),INT(M)表示什么意思?

根据官方文档描述&#xff0c;int(M)中的M表示数据显示的宽度&#xff0c;与实际存储的长度无关。1、也就是int(3)和int(11)能够存储的数据是一样的&#xff0c;都是从-2147483648到2147483647(或者0-4294967295)。2、int(M)只有联合zerofill参数才能有意义&#xff0c;否则int…

2021年值得关注的人工智能与机器学习的五大趋势

文章来源&#xff1a;科技心时代人工进行智能和机器可以学习是市场上的热门专业技术&#xff0c;其重要性在2020年达到顶峰&#xff0c;这两种信息技术发展已经到了广泛应用在各行业领域&#xff0c;其范围从电子商务到量子计算管理系统&#xff0c;从医疗诊断分析系统到消费电…

关于java子类继承以及final问题总结

(1)子类和父类如果在同一个包内&#xff0c;则子类可以继承父类的除private以外的所有成员变量和方法&#xff0c;并且权限不变&#xff1b; (2)子类和父类如果不在同一个包内&#xff0c;则子类可以继承父类的public和protected权限的成员变量和方法&#xff0c;不能继承友好型…

物理层基本概念

物理层解决如何在连接各种计算机的传输媒体上传输数据比特流 物理层定义了一些传输媒体接口的标准 定义了哪些标准&#xff1f; 1.机械特性 定义物理连接的特性&#xff0c;例如接口形状&#xff0c;引线数目&#xff0c;引脚数量等 2.电气特性 规定传输二进制位时&#…