STM32
直播中

李静

7年用户 990经验值
私信 关注
[问答]

怎样在STM32F107去移植UcosII呢

怎样在STM32F107去移植UcosII呢?有哪些操作流程?

回帖(1)

苏醒

2021-10-27 10:22:24
  一 新建工程
  
  
  这里我的板子是F107互联型的,启动文件按照下图选择cl.s。
  
  二 工程配置
  Output的设置,要勾选creatHEX File
  
  C/C++选项设置如图
  
  或者
  
  
  配置完毕后连接出现如下错误
  
  问题分析:
  按照报错定位到os_cpu_c.c,如下
  
  这里报错App_TaskDelHook没有定义,可看成OS_APP_HOOKS_EN宏大于0u执行该钩子函数,于是在os_cfg.h中,将该宏设为0,不让改函数执行,如下
  
  编译连接成功。
  其实这里钩子函数我们一般不使用,将其注释掉也可以,或者另外找个c文件,将其定义为空函数也应该是可以的。
  报错如下时
  
  同样的道理解决,如下
  
  三 初始化滴答
  
  四 滴答中断配置
  
  五 系统裁剪
  5.1 配置os_cfg.h
  (1)最低优先级
  
  (2)系统每秒滴答数
  
  与系统延时OSTimeDly关系比较重要,OS_TICKS_PER_SEC等于100,调用OSTimeDly(100),相当于延时100个滴答,即延时1秒
  (3)任务堆栈
  如果RAM资源有限,任务堆栈的大小最好根据任务评估一下,资源有限时不要太大,也不能小于程序正常运行。
  
  5.2 配置os_cpu.h
  (1)OS数据类型
  这是为系统定义相关的数据类型,这里不修改
  
  (2)临界区
  默认使用临界区第三种模式,这主要与os_cpu_SR_Save()函数有关,这里不修改
  
  (3)函数声明
  5.3 配置os_cpu_a.asm
  (1) 全局声明
  extern声明的是外部(其他源文件)定义的变量和函数,Export声明的是本文件定义的函数,供其他源文件使用。
  
  这里修改如上,主要是为了兼容ST标准外设库启动代码(startup_stm32f10x_cl.s)。如下图,这里是启动代码中的中断向量表
  
  (2)PendSV_Handle
  PendSV_Handler中断函数定义这块,将OS_CPU_PendSVHandler改为PendSV_Handler,跟上面一样是为了兼容ST标准外设库的启动代码。
  
  5.4 配置os_cpu_c.c
  (1) 系统滴答
  在app_cfg.c中配置系统滴答,下图定同于注释掉
  
  这些都是SysTick系统滴答的宏定义和函数体,我们使用M3标准(ST库)的SysTick系统滴答函数接口,因此屏蔽掉里面Systick的相关定义。
  
  5.5 配置app_cfg.h与app_cfg.c
  (1)任务优先级和堆栈
  app_cfg.c位于App下面,主要用于系统应用的配置。
  在app_cfg.h中,建立任务需要对任务优先级和堆栈进行一个定义
  
  (2)系统滴答
  在app_cfg.c中
  
  
  
  在Core_cm3.h中是SysTick_config定义,其中ticks 代表的是初值。例如系统时钟是72Mhz 那么要产生1ms的时基,那么我们可以这样去写。
  SysTick_Config(SystemCoreClock/1000); 当然也可以写成:SysTick_Config(72000);
  
  六 建立任务
  这里是应用提供一个函数接口(AppTask1,AppTask2),一旦启动了系统,相应函数就会逐步执行。
  
  在app_task.c中,建立相应任务,如下
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分