[原创] f769移植ucosii

star_66666   2016-12-16 00:10 楼主
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个任务,简单的任务调度,希望给刚入门的兄弟们有个引导。 下图是下载固件后的效果图 1481818008063.jpg 下面是视频是实际效果 点击此处,查看STM32F769I开发板官方资源。 本帖最后由 star_66666 于 2016-12-16 00:14 编辑

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复