关于2440的MDK平台下移植ucOS2,遇到的问题,及解决办法

发布者:码字狂人最新更新时间:2020-06-07 来源: eefocus关键字:MDK平台  移植ucOS2 手机看文章 扫描二维码
随时随地手机看文章

这几天,移植想把ucos2移植到自己的2440开发板上,可是苦于没资料啊,于是网上到处找资料,今晚终于调试通过了,把自己的问题及解决办法跟大家分享分享:


首先,建议大家到网上下载一个简单的ADS的例程,网上的在ADS上移植ucOS的例程很多,我也是随便下的一个,然后像移植单片机程序那样直接移植UCOS2就行了,编译的时候可能会报以下错误:


.out_putled.axf: Error: L6238E: 2440init.o(Init) contains invalid call from '~PRES8 (The user did not require code to preserve 8-byte aligment of 8-byte data objects)' function to 'REQ8 (Code was permitted to depend on the 8-byte aligment of 8-byte data items)' function CopyProgramFromNand.


决解办法:在2440init中找到

 AREA   

 Init,CODE,READONLY  

 ENTRY
__ENTRY

在这段断码前面加一句PRESERVE8就可以了

 

.out_putled.axf: Error: L6238E: os_cpu_a.o(UCOS_ARM) contains invalid call from '~PRES8 (The user did not require code to preserve 8-byte aligment of 8-byte data objects)' function to 'REQ8 (Code was permitted to depend on the 8-byte aligment of 8-byte data items)' function OSTaskSwHook.

解决办法:找到Os_cpu_a.s中找到AREA UCOS_ARM, CODE, READONLY,在前面加上个 PRESERVE8,就OK了

 

warning:  #550-D: variable "d" was set but never used
描述:变量'd'定义但从未使用,或者是,虽然这个变量你使用了,但编译器认为变量d所在的语句没有意义,编译器把它优化了.


解决:仔细衡量所定义的变量d是否有用,若是认定变量d所在语句有意义,那么尝试用volatile关键字修饰变量d,若是真的没有用,那么删除掉以释放可能的内存.


warning:  #1-D: last line of file ends without a newline
描述:文件最后一行不是新的一行.编译器要求程序文件的最后一行必须是空行,想了半天没想通为什么要这样.


解决:可以不理会.若是觉得出现警告不爽,那么在出现警告的文件的最后一行敲个回车,空出一行.

 

warning: A1876W: Use of '|' as a synonym for the :OR: operator is deprecated.

部分源代码:

MSR CPSR_c, #(NoInt|IRQ32Mode) ;进入IRQ模式。

 

warning: A1608W: MOV pc, instruction used, but BX is preferred
解决:把MOV pc, 替换为 BX    即从子程序返回

子程序返回的三种方法

现在总结如下

1.MOV PC,LR

2.BL LR

3.在子程序入口处使用以下指令将R14存入堆栈

STMFD    SP!,{,LR}

对应的,使用以下指令可以完成子程序的返回

LDMFD  SP!,      {,LR}

关键字:MDK平台  移植ucOS2 引用地址:关于2440的MDK平台下移植ucOS2,遇到的问题,及解决办法

上一篇:Keil+S3C2440裸机代码编译环境搭建
下一篇:Keil MDK (LPC2387)编译出现的警告和错误解决

推荐阅读最新更新时间:2024-11-17 06:39

mini2440uboot移植-uboot基本命令之kermit
要开发移植uboot,首先要对uboot有一定的了解,起码要会使用,所以这里首先熟悉一下uboot的使用以及如何将uboot烧入mini2440。 当让,在去探究uboot之前,必须保证你的开发板上有了uboot,如果没有,请先烧入一个已经编译好的uboot,这里为了方便,我直接下载了Tekkaman Ninja大侠已经编译好的.bin文件,有需要的可以自己下载http://blogimg.chinaunix.net/blog/upfile2/100404122259.bz2 把你下载的uboot.bin烧到mini2440的nand或者nor nand的起始地址即可,烧入的方法,连接串口,连接USB下载线,选择nor f
[单片机]
uboot在s3c2440上的移植(4)
一、移植环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2009.08.tar.bz2 二、移植步骤 在这一篇中,我们首先让开发板对CS8900或者DM9000X网卡的支持,然后再分析实现u-boot怎样来引导Linux内核启动。因为测试u-boot引导内核我们要用到网络下载功能。 7)u-boot对CS8900或者DM9000X网卡的支持。 u-boot-2009.08版本已经对CS8900和DM9000X网卡有比较完善的代码支持(代码在drivers/ne
[单片机]
uboot在s3c<font color='red'>2440</font>上的<font color='red'>移植</font>(4)
S3C2440时钟电源管理
S3C2440的时钟可以选用晶振(XTAL),也可以使用外部时钟(EXTCLK),由系统复位时,在复位信号上升沿对引脚OM3、OM2所测的状态来确定。由于我所用的开发板这两个引脚接地,故外部晶振作为主锁相环(MPLL)和usb锁相环(UPLL)的时钟源。 含有两个锁相环MPLL、UPLL产生系统所需要的不同频率的时钟 MPLL: 为CPU产生FCLK时钟 为AHB产生HCLK时钟 为APB产生PCLK时钟 UPLL: 为usb(Host and Device)产生UCLK(48M) FCLK,HCLK和 PCLK FCLK是提供给ARM920T 的时钟。 HCLK 是提供给用于 ARM920T,存储器控制器,中断控
[单片机]
S3C<font color='red'>2440</font>时钟电源管理
最简单的S3c2440UART功能测试
/******************************************* * 文件名称:UART.c * 实现功能:最基本的UART发送与接收 * 作者:无jianqi * 版本:1.0 **********************************************/ #include 2440addr.h //包含2440相关寄存器的设置 #include def.h //四个LED对应GPB5.6.7.8。 #define LED1 5 #define LED2 6 #define LED3 7 #define LED4 8 #
[单片机]
S3C2440硬件IIC详解
S3C2440A RISC微处理器可以支持一个多主控IIC 总线串行接口。一条专用串行数据线(SDA)和一条专用串行时钟线(SCL)传递连接到IIC总线的总线主控和外设之间的信息。SDA和SCL线都为双向的 图上可见,IIC时钟从PCLK产生,并同时受到IICSTAT控制,IIC数据实际上是由一个移位寄存器送出,当IIC处于从机状态的时候,有一个地址比较器来检测IIC总线,使用IIC总线主要有以下寄存器需要设置 1. 设置相应的端口复用为IIC端口,启用IIC时钟,连接IIC的中断,自然还需要设置IIC相应的中断,这些在上一节已经描述过,现在不赘述 2. 设置控制寄存器 设置应答使能IIC时钟,IIC发送时钟,IIC中断等
[单片机]
S3C<font color='red'>2440</font>硬件IIC详解
mini2440 dm9000 网卡驱动详解 (三)
*dm9000_get_drvinfo() 该函数去的设备的基本信息(设备名,版本,总线名)传给ethtool_drvinfo结构体变量。代码清单如下: static void dm9000_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) { board_info_t *dm = to_dm9000_board(dev); /*to_dm9000_board实际上就是调用了netdev_priv(dev)*/ strcpy(info- driver, CARDNAME);
[单片机]
mini2440开发板 u-boot 移植
本实验所用的u-boot源码包,是国嵌提供的u-boot-2008.10 1.解压源码包 命令:tar jxvf u-boot-2008.10.tar.bz2 2.在顶层的Makefile中找到 smdk2410_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0 参照此方法,添加: mini2440_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0 3.修改/cpu/arm920t/star
[单片机]
基于嵌入式CPU S3C2440的VGA显示系统设计
目前很多SOC厂商的微处理器芯片都集成了LCD控制器,如三星公司的S3C2410.S3C2440,Intel的Xscale系列等。大多数嵌入式系统也采用流行的LCD显示技术。但是在需要大屏幕显示、对分辨率要求不高的场合,如车间、厂房,采用大屏幕LCD则成本过高。另一方面,VGA显示技术因为技术发展成熟,成本低廉,仍在被大量使用,直到今天它仍是所有显示终端最为成熟的标准接口。如果让嵌入式处理器直接支持VGA显示器,则能很大地利用现有资源,节约系统成本。 1 基于S3C2440的VGA显示技术分析 通过分析VGA显示技术的时序逻辑与S3C2440内部集成LCD控制器驱动TFT LCD的时序逻辑,找出它们的共同点,分析在S3C244
[单片机]
基于嵌入式CPU S3C<font color='red'>2440</font>的VGA显示系统设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved