当前位置: 首页 > news >正文

STM32各个文件介绍、uCOSII文件介绍

(1)core_cm3.c , core_cm.h:获取设置CM3内核,配置一些内核寄存器,用到CM3核的都需要;

(2)stm32f10x.h 和 system_stm32f10x.c system_stm32f10x.hstartup_stm32f10x_hd.s : stm32的支撑文件,这几个文件是和具体的芯片有关的;

  ①stm32f10x.h:标准外设库的入口,使用标准外设库的代码中必须包含该头文件;

  ②system_stm32f10x.c , system_stm32f10x.h:芯片初始化函数文件,提供库函数来初始化stm32芯片,配置PLL、系统时钟、Flash接口;

  ③startup_stm32f10x_hd.s : hd表明是大容量型芯片。      (4部分6文件)

(3)misc.c , misc.h:NVIC、SysTick是驱动代码;

(4)stm32f10x_it.c:中断服务程序文件;

(5)stm32f10x_conf.h:外设配置文件;

/*----------------------------------------ST源码-----------------------------------------------*/

uUCS

(1)不区分特权级和用户级,程序始终工作在特权级(控制寄存器CONTROL)MSPPSP两个堆栈指针的切换是全自动的,就在出入异常服务例程时由硬件处理。复位时MSP初值0x00000000,0x00000004 PC  初值复位向量

(2)PendSV中断做上下文切换,也就是任务切换,是ucosii移植过程中最重要的中断

  主要有两点: 
  1.PendSV中断是手工往NVIC 的PendSV悬起寄存器中写1 产生的(由OS 写) 。 
  2.PendSV中断优先级必须设为最低。

(3)中断

  中断/异常的响应序列 
  当CM3开始响应一个中断时 
  1.xPSR, PC, LR, R12以及R3‐R0入栈 
  2.取向量      
  3.选择堆栈指针MSP/PSP,更新堆栈指针SP,更新连接寄存器LR,更新程序计数器PC 
  对移植ucosii 来说,需要注意1,3 

(4) ucosii 代码组成

os_task.c 任务管理代码。 
os_flag.c  标志位管理
os_mbox.c   消息邮箱
os_mutex.c  消息队列
os_q.c 
os_sem.c 各个同步量管理代码。
os_mem.c 内存管理代码。 
os_time.c 时间管理代码,主要做各种延时。 
os_tmr.c   定时器管理代码

定时器管理代码,这部分代码时从 V2.81 版才开始有的,邵老师的书讲的是 V2.55 版的代码,是没有
这部分内容的。如果前面的代码都理解的话,这部分代码也是不难理解的。一个定时器大体由 3 部分组成:
定时时间,回调函数和属性。当定时时间到了的话,就进行一次回调函数的处理,定时器属性说明定时器
是周期性的定时还是只做一次定时。如果用户使能了 OS_TMR_EN,ucosii 会在内部创建一个定时器任务,
负责处理各个定时器。这个任务一般应该由硬件定时器的中断函数中调用 OSTmrSignal()去激活。所以从本
质上说 os_tmr.c 中的定时器是由一个硬件定时器分化出来的。 

默认情况下是由 SysTick 中断里通过 OSTimeTickHook()去激活定时器任务的。 
 
移植相关文件
os_cpu.h:      进行数据类型定义,处理器相关代码和几个函数原型。
os_cpu_c.c:     定义一些用户 hook函数。 
os_cpu_a.asm: 移植需要用汇编代码完成的函数,主要就是任务切换函数。 
os_dbg.c:      内核调试相关数据和函数,可以不改。

(5)任务切换

这里OS_CPU_PendSVHandler 要替换为 为 PendSV_Handler;如下 下图:

OSTaskStkInit()的工作就是在任
务自己的栈中保存 cpu 的所有寄存器

 

PendSV 中断服务程序  ------ 任务切换

SysTick 中断服务程序 --------系统时钟

那么 任务切换 与 系统时钟的关系呢?

我想他们应该没什么关系,任务的挂起有一定的事件触发,系统时钟是系统的节拍,在不停的走。不是太理解,高手路过要多多指教啊

 

 

 


 

 

转载于:https://www.cnblogs.com/Ph-one/p/4009427.html

相关文章:

  • Cortex-M3基础
  • Program Size
  • KEIL中常见问题
  • LM2596、LM2576
  • STM32硬件IIC
  • CP2102
  • SMBus
  • 0x30、0x37
  • MOV/MOVX/MOVC、RAM/ROM
  • 固态硬盘的好处以及固态硬盘和普通硬盘的区搜索别
  • ⭐⭐堆和栈的区别
  • STM32电源管理
  • 'telnet'不是内部或外部命令,怎么办?
  • 陶瓷天线
  • FSMC(STM32)
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【Linux系统编程】快速查找errno错误码信息
  • Angular Elements 及其运作原理
  • Angular 响应式表单 基础例子
  • Git同步原始仓库到Fork仓库中
  • JS学习笔记——闭包
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • MQ框架的比较
  • MySQL主从复制读写分离及奇怪的问题
  • Nacos系列:Nacos的Java SDK使用
  • PhantomJS 安装
  • python_bomb----数据类型总结
  • Python_OOP
  • unity如何实现一个固定宽度的orthagraphic相机
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 创建一种深思熟虑的文化
  • 欢迎参加第二届中国游戏开发者大会
  • 驱动程序原理
  • 我的面试准备过程--容器(更新中)
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 阿里云服务器如何修改远程端口?
  • 交换综合实验一
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • "无招胜有招"nbsp;史上最全的互…
  • #define 用法
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (23)Linux的软硬连接
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (超详细)语音信号处理之特征提取
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (力扣)1314.矩阵区域和
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (一一四)第九章编程练习
  • (转载)OpenStack Hacker养成指南
  • .apk 成为历史!
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则