首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
嵌入式技术
» uC/OS-II在ADSP—BF531上的移植2
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
uC/OS-II在ADSP—BF531上的移植2
发短消息
加为好友
samwalton
当前离线
UID
872238
帖子
6518
精华
0
积分
3259
阅读权限
90
在线时间
309 小时
注册时间
2012-3-1
最后登录
2014-7-5
论坛元老
UID
872238
1
#
打印
字体大小:
t
T
samwalton
发表于 2014-4-28 07:19
|
只看该作者
uC/OS-II在ADSP—BF531上的移植2
处理器
,
编译器
不同的处理器有不同的字长,μC/OS-II不使用C的short、int、long等与编译器相关的数据类型,而是重新定义了一系列类型以确保系统的可移植性,在系统移植时必须在OS_CPU.H头文件中对这些数据类型重新定义,具体内容如下:
typedef unsigned char BOOLEAN
typedef unsigned char INT8U
typedef signed char INT8S
typedef unsigned short INTl6U
typedef signed short INTl6S
typedef unsigned int INT32U
typedef signed int INT32S
μC/OS-II中的指针根据处理器堆栈数据入口宽度定义为OS_STK类型:
typedef unsigned int OS_STK
4.1.2临界代码
RTOS在进入系统临界区之前都必须先关中断,退出后再开中断,μC/OS-II定义了2个宏指令来关闭/打开中断:
#define OS_ENTER_CRITICAL0
asm(“cli%O:”:”=d”(InterrupLach))
#define OS_EXIT_CRITICAL()
asm(“sti%0:”::”=d”(InterrupLaeh))
其中InterrupLaeh为一全局变量,用于开关中断时
IMASK寄存器内容的恢复和保存。
4.1.3堆栈增长方向设定
在OS CPU.H头文件中还必须根据处理器堆栈的增长方向对OS_STK_GROWTH进行宏定义,由于Adsp-BF531是按照由高地址到低地址的结构组织处理器堆栈,因此宏定义如下:
#define OS_STK_GROWTH 1
4.1.4 OS_TASK_SW0宏定义
OS_TASK_SW0在μC/OS-II从低优先级任务切换到高优先级任务时被调用,定义如下:
#define OS_TASK_sw() asm(“raise 13;”)
4.2编写OS_CPU_C.C文件
μC/OS-lI的移植要求用户在OS_CPU_C.C文件中编写6个简单的C函数,其中主要是完成OS-TaskStkInit (),其余5个函数可以不作处理。OS-TaskStkInit()负责任务堆栈的初始化,使得任务堆栈看起来就像刚发生过中断并将所有的寄存器保存到堆栈中的情形一样。不同的编译器在函数调用时有不同的入栈方法,因此在具体实现时必须根据处理器的编译环境进行调整。Visualdsp++3.0在函数调用时的堆栈结构如图2所示。
OSTaskStkInit()调用时需要传递任务代码起始地址(task)、用户参数指针(pdata)、任务堆栈顶端的地址(堆栈栈顶指针ptos)、返回参数为新任务堆栈栈顶指针,函数原型如下:
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议