2390|0

1903

帖子

0

TA的资源

版主

楼主
 

f769移植ucosii [复制链接]

本帖最后由 star_66666 于 2016-12-16 00:14 编辑

ucosii可以说是前些年对流行的rtos系统,笔者从10年前入行,就开始接触ucosii,
第一次接触时,很茫然,不知所措,到处买书看,找例程参考,还是不会,很无奈。
就这样1年多过去了,还是不会,反正工作中也不需要,就没再继续学。
直到接触了2年后,因项目需要,不得不又提上日程。再次开始学习。
其实也很简单,只要真正开始动手了,发现,还是不太男的,有点像人妖了,再继续,就变成美女了


那就简单说说ucos,当然这部分内容网上很多,不多说。
首先去ucos的官网下载ucosii
其次,就是添加ucos的代码进入系统
|core: os_core.c
|os: os_flag.c     os_mbox.c
|os_mem.c      os_mutex.c
|os_q.c       os_sem.c
|os_task.c     os_time.c
|o s_tmr.c
|head: ucos_ii.h


理论上这几个文件我们完全不用修改!但是,他依赖外部的一些头文件;
app_cfg.h //应用程序的一些功能,目测这里是不需要的;但是他已经写了,那我们就保留吧;所以我们就要先建立一个空的app_cfg.h文件
os_cfg.h //做一些os功能的开关,我们可以由此来对系统进行一些裁剪;保留我们需要的功能;
os_cpu.h //为了适应os,我们必须把os与cpu之间建立一个桥梁;就是通过os_port来进行建立的;


再次就是修改startup_stm32f769xx.s文件
PendSV_Handler             ; PendSV Handler
SysTick_Handler            ; SysTick Handler

把这2个函数的名字统一


第四就是配置os_cfg.h 里面的功能
第五就可以开始正式的新建任务了,
//LED0任务
void led0_task(void *pdata)
{                  
        while(1)
        {
                GPIOJ->BSRR=(1 << 5) << 16;
                delay_ms(80);
                GPIOJ->BSRR=1 << 5;
                delay_ms(920);
        };
}

//LED1任务
void led1_task(void *pdata)
{          
        while(1)
        {
                GPIOJ->BSRR=(1 << 13) << 16;
                delay_ms(300);
                GPIOJ->BSRR=1 << 13;
                delay_ms(300);
        };
}
在主函数增加如下的调度即可运行
//LED0任务
    OSTaskCreateExt((void(*)(void*) )led0_task,                 
                    (void*          )0,
                    (OS_STK*        )&LED0_TASK_STK[LED0_STK_SIZE-1],
                    (INT8U          )LED0_TASK_PRIO,            
                    (INT16U         )LED0_TASK_PRIO,            
                    (OS_STK*        )&LED0_TASK_STK[0],         
                    (INT32U         )LED0_STK_SIZE,            
                    (void*          )0,                        
                    (INT16U         )OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR|OS_TASK_OPT_SAVE_FP);
        //LED1任务
    OSTaskCreateExt((void(*)(void*) )led1_task,                 
                    (void*          )0,
                    (OS_STK*        )&LED1_TASK_STK[LED1_STK_SIZE-1],
                    (INT8U          )LED1_TASK_PRIO,            
                    (INT16U         )LED1_TASK_PRIO,            
                    (OS_STK*        )&LED1_TASK_STK[0],         
                    (INT32U         )LED1_STK_SIZE,            
                    (void*          )0,                        
                    (INT16U         )OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR|OS_TASK_OPT_SAVE_FP);
笔者也是做了个简单的例程,LED亮灭,2个led,2个任务,简单的任务调度,希望给刚入门的兄弟们有个引导。
下图是下载固件后的效果图


下面是视频是实际效果



点击此处,查看STM32F769I开发板官方资源。

VID_20161216_000804.mp4

5.53 MB, 下载次数: 6

此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表