uCOS_II 移植到友善之臂mini2440

发布者:EternalBliss最新更新时间:2024-06-25 来源: elecfans关键字:uCOS_II  移植 手机看文章 扫描二维码
随时随地手机看文章

1. 准备源代码

在官网或者其他地方找到源代码,我所用版本为以前下载的版本号V2.51。源码有16个文件,其中体系结构无关的             

OS_CORE.C       OS_MBOX.C      OS_FLAG..C

OS_SEM.C        OS_Q.C           OS_MUTEX.C
OS_TASK.C       OS_TIME.C        OS_MEM.C
uCOS_II.C (没用到)       OS_CONFIG.H      uCOS_II.H
INCLUDE.H
与体系结构相关的文件有三个
OS_CPU.H       OS_CPU_A.S    OS_CPU_C.C
二.选取开发环境ADS 1.2。(编译器的选择要考虑是否可以生成可重入性代码)
三.修改和体系结构有关的文件。主要有OS_CPU.H OS_CPU_A.S OS_CPU_C.C
1.修改OS_CPU.H OS_CPU.H
主要是定义了一些和具体CPU相关的常量,预编译器相关的数据类型。其中需要修改的有:
OS_CRITICAL_METHOD=3 
这是关中断的方式,在这里选择OS_ENTER_CRITICAL(),而OS_ENTER_CRITICAL()  等价于(cpu_sr = OSCPUSaveSR()),这个函数在OS_CPU_A.S中,需要自己写。
#define  OS_STK_GROWTH        1
这是栈生长方向,ADS1.2开发环境arm920t的堆栈生长方向为递减的也就是说从高地址向低地址方向生长,而且是满栈型的,就是栈指针指向有效的数据。
2.修改OS_CPU_C.C
OS_CPU_C.C主要定义了OSTaskStkInit()这个函数和其他一些hook扩展函数。Hook扩展函数不用修改,保持空。OSTaskStkInit()是堆栈初始化函数,用在建立任务的函数OSTaskCreate()中,初始化任务的栈,在arm920t中需要在栈中保存的寄存器和数据为

  1. $task;          

  2. LR (R14)              

  3. R12                                                       

  4. R11                                                     

  5. R10                                                        

  6. R9                                                

  7. R8                                                         

  8. R7                                                     

  9. R6                                                         

  10. R5                                                       

  11. R4                                                         

  12. R3                                                         

  13. R2                                                         

  14. R1                                                         

  15. R0 :         (argument)  

  16. CPSR      (最后栈指针指到这里,这是栈的顶部,也就是最小的地址)  

所以堆栈初始化代码为下,可以看出任务堆栈不能小于16*4 byte,否则栈会溢出。

  1. OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt)  

  2. {  

  3.     INT32U *stk;  

  4.   

  5.     opt    = opt;                   /* 'opt' is not used, prevent warning */  

  6.     stk    = (INT32U *)ptos;        /* Load stack pointer */  

  7.     *(stk)   = (OS_STK)task;        /* Entry Point            */  

  8.     *(--stk) = (INT32U)0;           /* LR (R14)           */  

  9.     *(--stk) = (INT32U)0;           /* R12                */  

  10.     *(--stk) = (INT32U)0;           /* R11                */  

  11.     *(--stk) = (INT32U)0;           /* R10                */  

  12.     *(--stk) = (INT32U)0;           /* R9                 */  

  13.     *(--stk) = (INT32U)0;           /* R8                 */  

  14.     *(--stk) = (INT32U)0;           /* R7                 */  

  15.     *(--stk) = (INT32U)0;           /* R6                 */  

  16.     *(--stk) = (INT32U)0;           /* R5                 */  

  17.     *(--stk) = (INT32U)0;           /* R4                 */  

  18.     *(--stk) = (INT32U)0;           /* R3                 */  

  19.     *(--stk) = (INT32U)0;           /* R2                 */  

  20.     *(--stk) = (INT32U)0;           /* R1                 */  

  21.     *(--stk) = (INT32U)pdata;           /* R0 : argument      */  

  22.     *(--stk) = (INT32U)0x00000013L;     /* CPSR               */  

  23.     return ((OS_STK *)stk);  

[1] [2]
关键字:uCOS_II  移植 引用地址:uCOS_II 移植到友善之臂mini2440

上一篇:使用QEMU 建立mini2440的模拟仿真环境
下一篇:mini2440编译2.6.39.4内核

推荐阅读最新更新时间:2026-03-20 14:38

友善最新版mini2440学习笔记——开发板架构和搭建开发环
这段时间一直想学习嵌入式程序设计。于是搞了一块mini2440的开发板,按照韦东山的《嵌入式Linux应用开发完全手册》,开始了我的嵌入式学习之路。 虽然网上关于mini2440的资料有一大堆,但是真正能够用得上的却不多。特别是友善最新版的mini2440上更换了新的NOR和NAND,针对这些硬件的开发资料却非常少。 我用的是友善之臂最新版mini2440,首先介绍开发板配置: 处理器:S3C2440A SDRAM: EM63A165TS NOR: SST39VF1601 (2M) NAND: K9K8G08U0E (1G) 网卡: DM9000EP 开发环境: 华硕 R455L 64位Ub
[单片机]
STM32MP157 Linux系统移植开发篇12:Linux内核MIPI LCD驱动移植
本文章为《STM32MP157 Linux系统移植开发篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板)。stm32mp157是ARM双核,2个A7核,1个M4核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRTOS、RT-Thread等实时操作系统,STM32MP157开发板所以既可以学嵌入式linux,也可以学stm32单片机。针对FS-MP1A开发板,除了Linux系统移植篇外,还包括其他多系列教程,包括Cortex-A7开发篇、Cortex-M4开发篇、扩展板驱动移植篇、Linux应用开发篇、FreeRTOS系统移植篇、Linux驱动开发篇、硬件设计篇、人工智能机器
[单片机]
iTOP-4412开发板-Android4.4-Bluetooth移植文档
1.1 概述 近期需要把 Bluetooth 移植到 iTOP-4412 开发平台,查阅了相关资料,经过一段时间 的研究、调试,终于成功的将蓝牙功能移植到了开发板上面,这里笔者记录移植过程及注意 事项,方便以后工作需要。 iTOP-4412 开发板的 Bletooth 模块与板卡之间的连接采用 UART 接口,Bletooth 硬件模块使用的是MTK的MT6620芯片,MTK提供了Android4.0及Android4.4driver, Porting Guid,有了这些就为我们的移植工作做了总体性的指导。 但是仅仅有 MTK 提供的文档还是远远不够的,毕竟硬件接口定义不同,kernel 版本也不同,Android层与MT
[单片机]
iTOP-4412开发板-Android4.4-Bluetooth<font color='red'>移植</font>文档
移植5.4内核到迅为I.MX6ULL开发板
本篇推文会加到后续的文档里面,另外等QT视频录制完成以后,就开始更新终结者驱动和系统移植的视频,后续的驱动移植教程和视频也全部会在本次移植的5.4内核上进行讲解和录制。大家也可以趁着端午节亲手移植感受下。 获取Linux内核源码 NXP官方提供了I.MX6ULL的Linux内核源码,我们可以使用git来获取Linux 5.4.3的内核源码(为了大家学习方便我们给大家提供了下载好的核源码,后续会保存在光盘资料的“i.MX6UL终结者光盘资料5_uboot linux源码”目录下“i.MX6ULL_Kernel_5.4.3.tar.bz2”)。 下面我们通过git下载5.4.3内核源码。输入以下命令获取源码: git clon
[单片机]
<font color='red'>移植</font>5.4内核到迅为I.MX6ULL开发板
STM32F407工程移植--STM32F401,F400
最近做的项目,遇到问题以及解决方法 1、jlink总是下载失败,PC可以识别,但是keil不识别 解决办法:将工程中的和jlink相关的文件删掉,keil魔术棒中set键,弹出框,重新选择芯片型号,还有的时候是没有上电(囧) 2、stm32f407改为stm32f401步骤 (1)改启动文件,将工程中的启动文件.s文件修改,点击魔术棒--C/C++--Define中对应修改名称(将STM32F40-41xxx改为STM32F401xxx,和启动文件名一致) (2)更改器件型号,点击魔术棒-device中修改器件型号 (3)修改stm32f4xx.h中搜索#ifdef STM32F40xx后面 #define STM32F40-41
[单片机]
英伟达:CUDA即将移植到RISC-V架构上
“现在CUDA只在x86和Arm上得以部署,但还没有在RISC-V上面部署,我们正在向外界传达一个信息——我们要将CUDA也移植到RISC-V的架构上。”2025年7月17日,在“第五届RISC-V中国峰会”主论坛上,英伟达副总裁Frans Sijstermans宣布了这项消息。 据Frans Sijstermans强调,目前,正在与合作伙伴和合作伙伴硬件直接合作,进行CUDA端口的工作。一旦生态系统成熟,标准的CUDA版本将支持例如:符合RISC-V指令集的服务器平台规范和Linux操作系统。 事实上,英伟达是RISC-V的早期推进者之一,要追溯到8年之前。早在2017年,上海交通大学和英伟达便联合举办了RISC-
[半导体设计/制造]
英伟达:CUDA即将<font color='red'>移植</font>到RISC-V架构上
迅为i.MX6ULL开发板移植Gdb+Gdbserver调试
因为有很多小伙伴是从单片机转过来的,用惯了单片机使用JLINk来调试程序,换到Linux非常不习惯。确实是如此,如果能在Linux上能设置断点,单步调试,查看变量,那就再好不过了。那么接下来将教大家怎么在arm板上调试应用代码的方法。 首先,了解下基本的思路: 采用这种方式进行远程调试,目标系统必须包括gdbserver程序,宿主机也必须安装gdb程序。一般Linux发行版中都有一个可以运行的gdb,但我们不能直接使用该发行版中的gdb来做远程调试,而要获取gdb的源代码包,针对arm平台做一个简单的配置,重新编译得到相应的gdb,如armv4. 搭建环境 UBuntu版本:Ubuntu 12.04 交叉编译器:arm-200
[单片机]
迅为i.MX6ULL开发板<font color='red'>移植</font>Gdb+Gdbserver调试
迅为iTOP4418开发板Qt系统移植4G-EC20
通过配置 linux 内核驱动,在文件系统移植 ppp 拨号工具移植 EC20 到 Qt 系统和最小 linux 系统,移植中需要的软件包和文档在网盘资料“iTOP4418 开发板资料汇总(不含光盘内容)9_iTOP-4418 开发板最小 linux_Qt_ Ubuntu 扩展文档23_章节_移植 EC20”下载。 EC20 模块封装成标准的 PCIe 接口,和开发板主要通过 usb 通讯。此次提供的文件有 pppd 源码、编译好的 chat 和 pppd 工具、wcdma,wcdma_back,wcdma-chatconnect、wcdma-chat-disconnect 以及要在文档最后使用的 pppd_conf.sh 脚本,
[单片机]
迅为iTOP4418开发板Qt系统<font color='red'>移植</font>4G-EC20
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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