一 新建工程
这里我的板子是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中,建立相应任务,如下
一 新建工程
这里我的板子是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中,建立相应任务,如下
举报