嵌入式移植过程

2025-04-27

嵌入式的移植

移植与4 个文件相关,汇编文件OS_CPU_A.ASM;处理器相关C文件OS_CPU.H;OS_CPU_C.C 和配置文件OS_CFG.H。 (1)拷贝系统源程序 (2)改写OS_CPU.H

数据类型的设定。BOOLEAN要定义成unsigned char 类型。 EA=0关中断;EA=1开中断。

MCS-51堆栈从下往上增长(1=向下,0=向上),OS_STK_GROWTH定义为0 #define OS_TASK_SW() OSCtxSw() (3)改写OS_CPU_C.C

TCB结构体中OSTCBStkPtr总是指向用户堆栈最低地址,该地址空间内存放用户堆栈长度,其上空间存放系统堆栈映像。

OSTaskStkInit函数总是返回用户栈最低地址。

操作系统tick时钟使用51单片机的T0定时器,它的初始化代码用C写在了本文件中。 (4)重写OS_CPU_A.ASM

sbit LS138B=P3^1; 定义宏

sbit LS138C=P3^4; 宏名 MACRO 实体 ENDM

子程序 xdata unsigned char temp[8]; //存储显示值的OSStartHighRdy 全局变量 OSCtxSw unsigned char s,m,h; OSIntCtxSw unsigned char code OSTickISR DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x9SerialISR 2,0x82,0xf8,0x80,0x90};// 显示段码值0~9

OS_STK xdata END ;声明汇编源文件结束

Task1Stack[CPU_MAX_STK_SIZE];

void Task1(void xdata * ppdata) reentrant //初始化定时器0

void InitTimer0(void) reentrant { { unsigned char i; TMOD=TMOD&0xF0; static unsigned char tt;

unsigned int l,n; TMOD=TMOD|0x01; //模式1(16位定时器),

unsigned int k=0; 仅受TR0控制

ppdata=ppdata; TH0=0x70; //定义Tick=50次/秒(即0.02秒/

s=0; 次)

m=0; TL0=0x00; //OS_CPU_A.ASM 和

OS_TICKS_PER_SEC h=0;

bee=0; ET0=1; //允许T0中断

TR0=1; while(1) } { 文件名:ex1.c //位数分离

temp[7]=DuanMa[s]; //程序实现功能:用数码管按时钟计数

#include \ temp[6]=DuanMa[s/10];

sbit LS138A=P3^0; //38译码器的三个

temp[5]=0xBF; 输入端

temp[4]=DuanMa[m]; temp[3]=DuanMa[m/10]; temp[2]=0xBF; temp[1]=DuanMa[h]; temp[0]=DuanMa[h/10]; tt++;//计数寄存 if(tt==50)//计数到一秒 { tt=0; s++;//秒加一 if(s==60) { s=0; m++;//分加一 if(m==60) { m=0; h++;//时加一 if(h==24) h=0; } } tt=0; }

//显示模块,循环八次扫描数码管 for( i=0; i<8; i++) { P1 = 0Xff; //消影 switch(i) { case 0:LS138A=0; LS138B=0; LS138C=0; break; case 1:LS138A=1; LS138B=0; LS138C=0; break; case 2:LS138A=0; LS138B=1; LS138C=0; break; case 3:LS138A=1; LS138B=1; LS138C=0; break; case 4:LS138A=0; LS138B=0;

LS138C=1; break;

case 5:LS138A=1; LS138B=0; LS138C=1; break; case 6:LS138A=0; LS138B=1; LS138C=1; break; case 7:LS138A=1; LS138B=1; LS138C=1; break; } P1 =temp[i]; OSTimeDlyHMSM(0, 0, 0,20); } } }

void InterruptInitial()//初始化时钟节拍 { /* set timer. 50ms, THTL = 3caf when cpu at 12MHz */ TMOD |= 0x01; TH0 = 0x70; TL0 = 0x00; /* TR0 is set in OSStart() */ ET0 = 1; }

void main()//主函数 { InterruptInitial(); TMOD|=0x10; ET1=1; OSInit();

OSTaskCreate(Task1, (void xdata *)0, &Task1Stack[0],2); OSStart(); }


嵌入式移植过程.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:DSP期末复习资料汇(含题)

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219