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中需要在栈中保存的寄存器和数据为
$task;
LR (R14)
R12
R11
R10
R9
R8
R7
R6
R5
R4
R3
R2
R1
R0 : (argument)
CPSR (最后栈指针指到这里,这是栈的顶部,也就是最小的地址)
所以堆栈初始化代码为下,可以看出任务堆栈不能小于16*4 byte,否则栈会溢出。
OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt)
{
INT32U *stk;
opt = opt; /* 'opt' is not used, prevent warning */
stk = (INT32U *)ptos; /* Load stack pointer */
*(stk) = (OS_STK)task; /* Entry Point */
*(--stk) = (INT32U)0; /* LR (R14) */
*(--stk) = (INT32U)0; /* R12 */
*(--stk) = (INT32U)0; /* R11 */
*(--stk) = (INT32U)0; /* R10 */
*(--stk) = (INT32U)0; /* R9 */
*(--stk) = (INT32U)0; /* R8 */
*(--stk) = (INT32U)0; /* R7 */
*(--stk) = (INT32U)0; /* R6 */
*(--stk) = (INT32U)0; /* R5 */
*(--stk) = (INT32U)0; /* R4 */
*(--stk) = (INT32U)0; /* R3 */
*(--stk) = (INT32U)0; /* R2 */
*(--stk) = (INT32U)0; /* R1 */
*(--stk) = (INT32U)pdata; /* R0 : argument */
*(--stk) = (INT32U)0x00000013L; /* CPSR */
return ((OS_STK *)stk);

[
1] [
2]

关键字:uCOS_II 移植
引用地址:
uCOS_II 移植到友善之臂mini2440
推荐阅读最新更新时间: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
[单片机]
移植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
[单片机]
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-
[半导体设计/制造]
迅为i.MX6ULL开发板移植Gdb+Gdbserver调试
因为有很多小伙伴是从单片机转过来的,用惯了单片机使用JLINk来调试程序,换到Linux非常不习惯。确实是如此,如果能在Linux上能设置断点,单步调试,查看变量,那就再好不过了。那么接下来将教大家怎么在arm板上调试应用代码的方法。 首先,了解下基本的思路: 采用这种方式进行远程调试,目标系统必须包括gdbserver程序,宿主机也必须安装gdb程序。一般Linux发行版中都有一个可以运行的gdb,但我们不能直接使用该发行版中的gdb来做远程调试,而要获取gdb的源代码包,针对arm平台做一个简单的配置,重新编译得到相应的gdb,如armv4. 搭建环境 UBuntu版本:Ubuntu 12.04 交叉编译器:arm-200
[单片机]
迅为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 脚本,
[单片机]