mdk+2440

article/2025/11/9 3:41:09

目前仍然有许多人在使用ADS1.2编译ARM9的程序,这款编译器实属经典,但是已经多年停止更新、维护了。这篇文章主要讲解ARM公司受够Keil之后力推的一款编译器MDK。

MDK的使用上和ADS1.2有很多相似之处,从ADS1.2过渡到MDK也是非常容易的一种事情。


还是无图无真相。

<一>这是MDK打开的情形,当然我这已经是一个建立好的工程。如果一开始是空的,按图点击project-->new uvision project即可。



<二>

关于工程名的命名,修改,添加文件等与其余的编译器无异,相信大家都会的。这里重点讲解魔术棒的配置



<三>

可以看到介面上有个Target Option选项。这才是该编译器强大的所在。


设备选择,大家根据实际情况选择即可,我这里选择的是S3C2440A

 


时钟部分为模拟调试的时钟,默认即可。

操作系统部分,MDK提供了一个实时操作系统,便于大家开发RTOS上的程序,如果不需要,可以选无。

右上角可以选择ARM或者Thumb代码模式。

左下角为只读内存的区域配置:有内部的ROM on-chip,有外部的ROM off-chip这个根据自己实际情况选择。S3C2440A无片上可以利用的ROM,但是可能会外接ROM,比如

Nor或者NAND。为你的目标板上有的资源打上default勾选。

右下角为读写内存区域配置:有内部的RAM on-chip,有外部的RAM off-chip这个也是根据自己实际情况配置。S3C2440A有内部RAM,为0x40000000的4K大小,NAND时候会被映射到BANK0。

NOTE:::以上内存的区域配置是很灵活的,除了根据你自己的目标板实际配置外,还可以根据你的目的来配置,你可能需要将RAM也模拟成ROM,这样便于调试等等。



这里选项很简单,默认没有勾选Create HEX File,可以勾选上。也可以根据需要生成目标库。也可以为目标文件单独选择存放文件夹,使工程文件清晰。



List也可以选择存放的目录。可以选择输出的内容文件。比如内存映像文件,符号文件,调用关系,交叉引用,生成文件的内存信息,未使用的section信息等。

便于查看。



选项也很清晰。重点是bulid后的用户程序。一般是用来将自己生成的axf转换为bin文件,和ads1.2很像。但是它比ads1.2至少强在一地方。

大家可能注意到--bincombined--bincombined_padding=1类似的命令,该命令存在的原因跟scatter文件有关。

scatter文件描述了如何组成自己的输入段,形成加载域,执行域,最终按照要求得到自己想要的内存布局文件。

BUT如果存在两个及其以上的加载域的话,生成的二进制文件会有多个,虽然我们可以自主的烧写到我们的目标存储区,但是这无疑增加了我们的负担!

在ADS1.2中,是没有直接的办法将多个bin文件连接在一起的,只能利用H-JTAG类似的工具,将多个bin文件转为HEX文件,拼接起来,再转为bin,有些麻烦

但是MDK下,直接利用这个命令即可完成将多个bin连成1个bin文件,是很方便的。这样scatter文件的多个加载域就不是问题了。



没什么特别的,注意默认优化级别的选择对应是level2。警告的话,可以选显示全部警告信息。

自己工程的头文件路径也要直接添加好,不然找不到。



与上一个选项卡类似。



linker选项也是十分重要的。默认的不是这个图的样式,是勾选了“利用目标选项卡里的内存布局”安排RO RW段。

一般情况下,这样的确是可以的,但是如果自己有特殊的要求,是需要自己写scatter文件的。这个图就是我自己写的一个scatter文件,未利用默认选项,所以未勾选。

微控制命令下可以自己写上对应的命令,比如这里的指定入口等等。



左右对称的选项,重点是右边,虽然模拟也很强大,但是大家一般都是有目标板的,所以还是硬件调试的手段。

可以选用的有Jlink Ulink等等,我手头有个山寨的Jlink,所以选择Jlink了。

下面的勾选框表明将自己要调试的文件下载到startup里,以及是否直接运行到main()函数。这个要根据实际需要来。

很可能你并不想利用MDK提供的库功能,就如同你不想使用ADS1.2提供的库功能一样,不使用main函数,那么就不存在run to main()。

很可能你是用SDRAM模拟ROM,在SDRAM中调试代码,也可能不需要将代码下载到starup。

抑或你在SDRAM中调试,使用了调试脚本,调试脚本里已经做了这2项工作,也是不需要勾选的,可以自己逐步尝试。



应用选项卡,是针对Flash应用的。可以选择flash烧写工具。



点击设置可以进入Flash选择,如果不存在自己的flash型号,可以自己添加算法,MDK手册有模板教你一步一步添加自己的Flash算法,比如nor nand之类的都可以添加。

Ramfor Alg是用于烧写算法的空间,MDK手册是说一般用内部RAM。

 

重点的都讲完了,老规矩,以点亮LED结束这篇文章吧。

 

s3c2440.s

         areainitcode,code,readonly
         preserve8
         code32
         entry
         export__start
__start


         ldrsp,=1024*4
         importdisable_watch_dog
         importmemsetup
         importcopy_2th_sdram
         importMain


         bldisable_watch_dog
         blmemsetup
         blcopy_2th_sdram
         ldrsp,=0x34000000
         ldrpc,=Main


halt_loop
         bhalt_loop


         end

 

led.c文件:

#include"S3C2440.h"
#define gpbcon (*(volatile ulong *)0xa0000010)
#define gpbdat (*(volatile ulong *)0xa0000014)


static __inline void wait(ulong dly);






#define GPB5_out     (1<<(5*2))
#define GPB6_out     (1<<(6*2))
#define GPB7_out     (1<<(7*2))
#define GPB8_out     (1<<(8*2))




static __inline void wait(ulong dly)
{
         for(;dly > 0; dly--);
}


int Main(void)
{
         ulongi = 0;
         
         gpbcon= GPB5_out | GPB6_out | GPB7_out | GPB8_out;
         while(1)
         {
                   wait(3000000);
                   gpbdat= (~(i<<5));
                   if(++i== 16)
                            i=0;
         }        
}

 

内存布局scatter文件:

;*************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************


LR_ROM1 0x00000000 0x00200000  {    ; load region size_region
  NANDFLASH 0x00000000 0x00200000  {  ; load address = executionaddress
   *.o (initcode, +First)
   .ANY (+RO)
  }
}


LR_ROM2 2048 2048 {
  SDRAM 0xb0004000 {
   led.o (*)
  }
}



http://chatgpt.dhexx.cn/article/Tv848HZx.shtml

相关文章

2440 时钟设置

首先需要知道时钟的概念&#xff1a; 1、是用来同步系统信号; 就举例来说&#xff1a; 如果你cpu用i2c传输一个数据给从机设备&#xff0c;那么你传输数据时从设备怎么知道数据有没有到达&#xff0c;多久检测一次数据线&#xff1f;&#xff1f;这个就需要时钟同步&#xff0c…

FL2440开发板简介及其烧录

目录 FL2440开发板简介 FL2440开发板 FL2440硬件资源列表 开发板存储系统&#xff1a; FL2440开发板烧录 FL2440烧录流程&#xff1a; 烧录准备工作 烧录文件: 硬件准备&#xff1a; 烧录过程 J-link操作&#xff1a; u-boot下烧录&#xff1a; 开发板启动流程&…

大数据分析平台和工具,主要有哪些?

1.Disco Disco最初由诺基亚开发&#xff0c;这是一种分布式计算框架&#xff0c;与Hadoop一样&#xff0c;它也基于MapReduce。它包括一种分布式文件系统以及支持数十亿个键和值的数据库。 支持的操作系统&#xff1a;Linux和OSX。 2.HPCC 作为Hadoop之外的一种选择&#x…

大数据分析平台的搭建方式有哪些

随着大数据时代的到来&#xff0c;数据价值的概念逐渐深入人心&#xff0c;许多企业开始搭建自己的大数据分析平台&#xff0c;以便在数据洪流中把握行业未来的发展方向。做任何事情之前&#xff0c;首先要设定目标和思路&#xff0c;然后根据确定的目标、思路和实际情况制定可…

目前大数据技术平台有很多,主要可以分为哪几类?

大数据的处理过程可以分为大数据采集、存储、结构化处理、隐私保护、挖掘、结果展示(发布)等&#xff0c;各种领域的大数据应用一般都会涉及到这些基本过程&#xff0c;但不同应用可能会有所侧重。对于互联网大数据而言&#xff0c;由于其具有独特完整的大数据特点&#xff0c;…

有哪些好的数据来源或者大数据平台?

分享下我自己平时收集的..共100多个O_O 网站分析类&#xff1a; 百度指数 - 以百度海量网民行为数据为基础的数据分享平台 Google趋势 - 了解 Google中热度上升的搜索 360指数 - 基于360搜索的大数据分享平台 Alexa - 网站排名 Google Analytics - Google出品&#xff0c;可…

大数据平台的软件有哪些?

查询引擎 一、Phoenix 简介&#xff1a;这是一个Java中间层&#xff0c;可以让开发者在Apache HBase上执行SQL查询。Phoenix完全使用Java编写&#xff0c;代码位于GitHub上&#xff0c;并且提供了一个客户端可嵌入的JDBC驱动。 Phoenix查询引擎会将SQL查询转换为一个或多个H…

[BigData]16家大数据分析平台

&#xfeff;&#xfeff; 对今天的企业来说&#xff0c;数据分析已经成为生死攸关的选择。我们分析一些著名的供应商&#xff0c;从Hadoop创业者到传统的数据库市场参与者。 革命 – 这个词汇十分准确地描述了我们所处的这个数据分析的时代。企业一方面紧紧握住大量不同类型的…

大数据网站汇总(数据搜集、大数据竞赛、)

一. 国家级大数据平台 1.1 国家大数据平台&#xff1a; 数据_中国政府网 (www.gov.cn) 1.2 司法大数据平台&#xff1a;中国司法大数据服务网 (court.gov.cn) 1.3 中国经济社会大数据研究平台&#xff1a;中国经济社会大数据研究平台 (cnki.net) 1.4 中国知网CNKI-总库&a…

linux cat命令的作用,Linux命令cat使用详解

cat命令功能&#xff1a; cat命令主要用来实现查看文件、创建文件、及合并、追加文件内容等功能。 cat命令主要参数&#xff1a; -n 或 –number&#xff1a;对输出文档的行数进行编号&#xff0c;从1开始。 -b 或 –number-nonblank&#xff1a;和 -n 功能相似&#xff0c;不同…

Windows 中使用 Linux 命令

如果要在 Windows 中运行 Linux 命令&#xff0c;那么 Cygwin 是一个推荐的工具。Cygwin 创建于 1995 年&#xff0c;旨在提供一个原生运行于 Windows 中的 POSIX 兼容环境。Cygwin 是由 Red Hat 员工和许多其他志愿者维护的自由开源软件。 二十年来&#xff0c;Windows 用户使…

设置 linux 命令别名

前言&#xff1a; 在操作 linux 的时候可能会碰到一些非常长的命令&#xff0c;这个命令平时用的比较频繁&#xff0c;每次输入执行感觉非常麻烦有木有。如果把一段长的命令设置成一个短的别名&#xff0c;是不是很方便&#xff1f; 1. alias 命令引入 找台 linux 机器执行一…

Linux命令之-telnet

使用telnet测试端口连通性 telnet命令是TELNET协议的用户接口&#xff0c;它支持两种模式&#xff1a;命令模式和会话模式&#xff0c;虽然telnet支持许多命令&#xff0c;但大部分情况下&#xff0c;我们只是使用它查看目标主机是否打开了某端口&#xff08;默认是23&#xf…

Linux 命令执行流程

今天继续给大家介绍Linux基础知识&#xff0c;本文主要内容是Linux命令执行的流程&#xff0c;不仅介绍了当我们键入一个Linux命令时系统的执行流程&#xff0c;还介绍了Linux系统中内部命令与外部命令的区别、PATH环境变量的作用等等。 Linux的命令执行流程如下&#xff1a; 1…

Linux命令之sync

概述 sync 命令可以强制将内存中的文件缓冲写入磁盘&#xff0c;更新块信息。 在 linux/unix 系统中&#xff0c;在文件或数据处理过程中一般先放到内存缓冲区中&#xff0c;等到适当的时候再写入磁盘&#xff0c;以提高系统的运行效率。这样虽然可以提高磁盘写入数据的效率&a…

Linux命令:scp

目录 简介 一、语法 二、示例 2.1 将本地文件复制到远程主机目录 2.2 将本地目录复制到远程主机目录 2.3 将远程主机的文件复制到本机 2.4 复制远程主机目录到本机 简介 今天我们来介绍一个Linux命令&#xff1a;scp scp — secure copy (remote file copy program)&am…

使用node.js构建一个web服务器(适合自学)

使用node.js构建一个web服务器 先介绍node.js的安装&#xff0c;再介绍使用node.js构建一个简单的web服务器&#xff0c;最后通过一个简单的示例&#xff0c;演示网页与服务器之间的数据交互的实现。 WEB服务器 WEB服务器也称为WWW服务器。WWW(World Wide Web、翻译成中文&a…

node-php-server 游戏服务器框架

做游戏服务器8年多了&#xff0c;用过lua, 用过C, 用过nodejs ,最近用的是php,有些人会说php不是用在web开发吗&#xff0c;怎么能用在游戏服务器的业务逻辑开发&#xff0c;php 怎么跟客户端通信&#xff0c;肯定有很多人不解。 其实很多时候&#xff0c;技术原理都是都是相通…

如何快速用node在本地搭建一个服务器

众所周知&#xff0c;服务器是通过安装特殊的软件&#xff08;或者运行特殊的代码&#xff09;来提供网络服务的机器。那么我们的电脑可不可以弄成一个服务器&#xff0c;来供他人访问呢&#xff1f; 答案是可以的&#xff0c;这里我们需要安装一下node.js这个软件。传送门&am…

通过node启动服务器必须的会的几个命令

1 首先通过cd 目录 切换到当前目录下 2 通过node app.js 启动服务器(或者nodemon apo.js) 3 通过ctrl c来关闭服务器&#xff01;