使用stm32F407或者F103进行UCOS操作系统的移植 嵌入式开发报告

来了又来了,卓工第一天,超管请假了,我一个在办公室。

所以再来一篇嵌入式课设报告。

附上老师的要求

使用stm32F407或者F103进行UCOS操作系统的移植 嵌入式开发报告_第1张图片

 首先来说一下DELAY函数和定时器的区别,

  for  利用循环处理的方式实现的延时,并不精确。(来自某问问的同学的回答,我觉得不错)
1、当中断发生时,CPU被打断先执行中断服务。导致执行时间变长。
2、使用高级语言时,编译的结果受优化等级等多方面因素干扰,难以计算。
3、在有MMU和Cache的MCU中,指令的执行速度还会受到缓存的影响。
利用定时器延时:
1、因为定时器累加与CPU无关,即使中断,仍然会保持计数。不受上述问题影响
2、缺点需要占用定时器资源。
3、功耗也会高一些

记住了,越高级的功能势必要抢占资源,造成功耗的提高。所以选用什么函数一定要考虑性价比。

而我就比较懒,就用DELAY吧,

先分析代码

使用stm32F407或者F103进行UCOS操作系统的移植 嵌入式开发报告_第2张图片

忽略value值,是不是很简单,亮灭亮灭,很简单吧

继续看按键控制,

使用stm32F407或者F103进行UCOS操作系统的移植 嵌入式开发报告_第3张图片

首先看key1case,这里主要实现的功能是控制流水灯的启停,并且是有状态保持的,

来科普一下这两个函数以及另外两个函数 

OSTaskSuspend函数和OSTaskResume函数

某些任务因为某些原因需要暂停运行,但是之后还是要运行,因此我们不能删掉任务,使用OSTaskSuspend函数可以挂起这个任务,以后再恢复运行,可以多次调用OSTaskSuspend函数来挂起一个任务,也需要用同样多的OSTaskResume函数来恢复被挂起的任务。

OSTaskCreate函数

创建任务就是将任务控制块、任务堆栈、任务代码联系在一起,使用OSTaskCreate函数创建任务之后,刚创建的任务就会进入就绪状态。

OSTaskDel函数

调用OSTaskDel函数删除一个任务后,这个任务的堆栈的,OS_TCB所占用的内存并没有释放掉,这时候可以将内存用于其他任务。

所谓的状态保存就是让他暂停呗。而不是重新创建或者删除吧。

因为我这里需要控制两种状态,所以我需要一个flag来控制他的状态,多个状态通过取余就可以实现了吧。

然后里面的ED0-task—PRIO是什么意思呢,是我在main函数最开始的时候定义的任务的优先级,包括堆栈大小啊什么的,请看

数字越大,任务优先级越低

使用stm32F407或者F103进行UCOS操作系统的移植 嵌入式开发报告_第4张图片

再来看一下key2  case,

使用stm32F407或者F103进行UCOS操作系统的移植 嵌入式开发报告_第5张图片

同样的,控制三个档位就需要一个VALUE值来控制三种变化状态呗,这就是为什么在流水灯的时候乘以value的值,现在temp值联控全局的效果,还有就是在全局需要用到的值,一定定义在最外围,而不仅仅是定义在函数里边,比如FLAG可以定义在ledtask里边,value 必须要定义在全局上。

 

好了,差不多这里简交差了。

以下几个点,

1.我觉得没必要去理解移植文件的每个步骤,或者说每个文件是什么,你是去做开发的,或者说体验应用,而不是体层开发的,如果你学过操作系统,那么这种基于操作系统的和裸奔机没什么差别,但是要注意,一旦任务数量很多,会出现崩溃的状态,

或者是你移植的二代ucos操作系统和三代ucos操作系统的问题,不一样的地方很多。

2.我建议拿实物做,给室友做个protues仿真图,各种你想不到的问题,只能做个基础部分,而且这里delay函数完全不一样,很奇怪。

3.如果使用的是F103zet6的板子,和F4有点不一样的地方是,有些管脚不能绝对的使用成IO口,这里要好好看一下手册(滑稽,某宝商家给我室友寄了一块板载引脚号和引脚电路图不一样的,真的是用引脚测半天的电路)

4.因为板载一般只有两个LED灯,所以需要外接三极管,这里外接管脚一定要主要三极管的管脚使能要正确,不然你可能要花半个小时查出这个问题,是的,我就是这个样子的。

5.板载时钟和GPIO管脚的时钟可能不一样,用的可能不是同一个时钟,但是我没有仔细求证过。

好了想看的我会上传完整的资源的。

你可能感兴趣的:(使用stm32F407或者F103进行UCOS操作系统的移植 嵌入式开发报告)