DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 373|回复: 0
打印 上一主题 下一主题

一个uCOS ARM系统的启动过程分析及系统构架

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 19:25:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
    /****************************************************
*一个uCOS ARM系统的启动过程分析及系统构架。 *
*Main 函数的代码如下: *
*****************************************************/
int Main(int argc, char **argv)
{
ARMTargetInit() // 系统硬件初始化
OSInit() //初始化操作系统
uHALr_ResetMMU() //复位MMU
LCD_Init() //初始化LCD 模块
LCD_printf("LCD initialization is OK\n") //显示液晶屏信息
LCD_printf("240 x 128 Text Mode\n")
LoadFont() //装载系统字体
LCD_printf("Create task on uCOS-II...\n") //显示液晶屏信息
//创建系统的任务
OSTaskCreate(Main_Task, (void *)0,
(OS_STK *)& Main_Stack[STACKSIZE*8-1], Main_Task_Prio)
OSTaskCreate(Led_Flash_Task, (void *)0,
(OS_STK *)& Led_Flash_Stack[STACKSIZE-1], Led_Flash_Prio )
OSTaskCreate(Lcd_Fresh_Task, (void *)0,
(OS_STK *)& Lcd_Fresh_Stack[STACKSIZE-1], Lcd_Fresh_prio )
OSTaskCreate(Key_Scan_Task, (void *)0,
(OS_STK *)& Key_Scan_Stack[STACKSIZE-1], Key_Scan_Task_Prio )
LCD_printf("Starting uCOS-II...\n")
LCD_printf("Entering graph mode...\n")
LCD_ChangeMode(DspGraMode) //设置液晶屏显示为图形模式
initOSGUI() //初始化图形用户界面
InitRtc() //初始化系统时钟
LCDFresh_MBox=OSMboxCreate(NULL) //创建LCD 刷新邮箱
Lcd_Disp_Sem=OSSemCreate(1) //创建LCD 缓冲区控制权旗语,初值为1 满足互斥条件
Nand_Rw_Sem=OSSemCreate(1) //创建Nand-Flash 读写控制权旗语,初值为1 满足互斥条件
ARMTargetStart() //启动操作系统的硬件定时器等中断
OSStart() // 启动操作系统
//程序不会运行至此
return 0
}//main end

/****************************************************
*系统启动的时候创建了4 个系统任务,其中Main_Task 为系统的主任务,用户的应 *
*用程序就是从Main_Task 任务开始的。其代码如下: *
*****************************************************/
void Main_Task(void *Id) //Main_Test_Task
{
POSMSG pMsg=0
ClearScreen() //清除屏幕
for( )
OSTimeDly(1000)
//消息循环
/* for( ){
pMsg=WaitMessage(0)
tch(pMsg-> Message){
case OSM_KEY:
&#111nKey(pMsg-> WParam,pMsg-> LParam)
break
}
DeleteMessage(pMsg)
}*/
}
/**************************************************
通常多操作系统中的任务是一个无限循环,同样,Main_Task 也要陷入一个无限循环。
因为uCOS-II 是占先式多任务操作系统,如果没有比Main_Task 任务更高优先级的任务
进入就绪状态,Main_Task 任务是不会放弃CPU 的控制权的。通过调用OSTimeDly(INT16U
ticks)函数,可以使操作系统进行一次任务调度,并且执行下一个优先级最高的就绪状态的
任务。参数Ticks 表示任务延时的节拍数,一旦规定的时间期满,该任务马上又会重新进入
就绪状态。
****************************************************/
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-8-18 12:25 , 耗时 0.078710 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表