stm32非操作系统开发和带uCos的开发的区别,及一些解析
从文件角度来看core_cm4.h和stm32f4xx.h分别从内核寄存器和外设寄存器来定义其地址和结构体,是用c语言访问硬件必须的文件,所以这两个文件不论是否带操作系统,都是必须包含进工程的。
reset_handler这个中断处理函数首先会设置一下FPU,然后跳转到systeminit进行初始化,然后跳转至main函数。
main函数在自己定义的main.c当中,完成BSP初始化,操作系统初始化,创建任务以及开始运行操作系统。BSP初始化中包含的有systeminit,systick_init,GPIO配置,systick_init启动心跳时钟。进入操作系统初始化后,就基本跟硬件操作无关了,基本上是使用系统提供的API进行处理即可。
ucos需要移植的代码主要是port文件夹下,os_cpu.h中定义数据类型,处理器相关代码及函数声明:
typedef unsigned int OS_STK;栈的大小是用4字节来做基本单位
typedef unsigned int OS_CPU_SR;表示状态寄存器,都是32位的
定义了宏OS_ENTER_CRITICAL和OS_EXIT_CRITICAL
后面就声明一些汇编里定义的寄存器操作函数。
/************************************************************************/
在工程中会有一个很大的问题就是很多重复的函数定义和调用,ucos提供的中断处理和it.c提供的中断处理函数,到底执行哪一个还是依据中断向量表的定义来看。
systick中断处理函数在ucos提供的代码里有定义,但我们可以将其注释掉,再在it.c文件中定义
/************************************************************************/
os_cpu_a和os_cpu_c的头文件是os_cpu.h,只是这两个源文件分别是c和汇编写的,只是头文件中hook函数都没有声明。
os_cpu_c.c主要定义了一些hook函数,要使用的话需要在OS_CFG.h中启用钩子函数的功能
除hook之外还有系统心跳的函数以及栈初始化函数。
os_cpu_a.asm该文件包含的是汇编代码下载下来的代码是针对你的处理器移植好的,不需要做修改。
OSStart函数中最后调用的是OSStartHighRdy是启动处于ready状态的优先级最高的任务
keil编译的结果,RO是只读向量(const型),RW是读写变量,ZI是没初始化的读写变量。
/************************************************************************/
之前的stm32开发目录分为四个(启动代码,用户代码,固件库,CMSIS)
再加入uCos之后文件的管理变得复杂不少,所以有一套文件管理目录很重要:boot(启动代码),USR(main函数,中断处理函数),BSP(系统硬件初始化,自行封装的硬件驱动程序),APP(应用程序函数(死循环型)),uCos-II(port和source),CMSIS,FWlib
USER文件夹下新建includes.h头文件,教程说该头文件是保存全部头文件的头文件,方便理清函数思路。暂时还没有这种感觉
os_cfg.h操作系统配置头文件存放在APP文件夹中。
/************APP配置**************/
app_cfg.h用来设置应用程序的优先级及栈大小,在main函数中创建任务的时候就将栈的大小和优先级传递到任务创建函数中去。
实现多任务的方法有两种在main函数中多次调用taskcreate或者在一个任务中再调用taskcreate这样就能创建多任务了。
stm32非操作系统开发和带uCos的开发的区别,及一些解析的更多相关文章
- 【嵌入式】FS2410非操作系统外围资源测试
在刚接触FS2410时,其实这个测试也没有多大意义,但是对于以后来说,当一个产品做成功时,产品测试还是一个必须经过的一个阶段,所以这个流程还是有必要走一下! 在非操作系统下,主要进行RTC测试,按键测 ...
- 如何利用 Visual Studio 自带工具提高开发效率
Visual Stuido 是一款强大的Windows 平台集成开发工具,你是否好好地利用了它呢? 显示行号 有些时候(比如错误定位)的时候,显示行号将有利于我们进行快速定位. 如何显示 1. 工具 ...
- STM32 M3内核的位带操作原理及步骤
STM32 M3内核的位带操作原理及步骤 一.位带操作有什么用?什么是位带操作 位带操作的作用:可以实现对某一GPIO口寄存器(或SRAM内存中)的某一bit位直接写0或1,达到控制GPIO口输出(或 ...
- SQL非域环境下带自动故障转移数据库镜像的实现方法(包括镜像服务器)
使用数据库镜像来提高数据库的高可用性,在镜像服务器创建镜像数据库的快照以卸载报表查询对生产数据库的负载.TechNet有讲座对此技术进行介绍,但看到大家在讲座的讨论区中遇到了很多问题,下面我把在非域环 ...
- php微信开发之带参数二维码的使用
最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把 ...
- Linux操作系统--help、man和info工具的区别介绍
http://wenda.tianya.cn/wenda/thread?tid=1d4b0f172f958833Linux操作系统--help.man和info工具的区别介绍 Linux操作系统为我们 ...
- 微信小程序开发(二)----- 云开发
1.概念 微信小程序的云开发是腾讯云与微信团队深度合作推出的一个全新的小程序的解决方案,它提供了云函数.云数据库与云存储这三大基础能力支持,随着云开发的出现,小程序的开发者可以将服务端的部署和运营的环 ...
- [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建
一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...
- [Intel Edison开发板] 03、Edison开发IDE入门及跑官方提供的DEMO
一.启动Eclipse爱迪生开发板IDE eclipse开发环境在iss-iot-win_03-14-16中,但是一定每次都是点bat脚本启动,否则就会少东西(windows->preferen ...
随机推荐
- 真正的Java学习从入门到精通
http://www.it.com.cn/f/edu/059/6/169189.htm 一. 工具篇JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行 ...
- 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联
第九节: 利用RemoteScheduler实现Sheduler的远程控制 一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...
- ws 无法热替换的问题
这个坑自己踩过并且第二次就记录一下,因为一直习惯用ws, 使用热部署的时候发现无法自动同步热更新,找了很多方法,具体解决方式如下: webstorm默认保存在临时文件夹,根据下面路径将默认勾选项去除即 ...
- sersync简介与测试报告
在分布式应用中会遇到一个问题,就是多个服务器间的文件如何能始终保持一致.一种经典的办法是将需要保持一致的文件存储在NFS上,这种方法虽然简单方便但却将本来多点的应用在文件存储上又变成了单点,这违背了分 ...
- erlang的md5加密
二话不说,直接上代码 -module(md5). -compile(export_all). md5(S) -> Md5_bin = erlang:md5(S), Md5_list = bina ...
- dynamic与var
dynamic与var示例 var是一种语法省略写法,编译器会根据上下文推断出正确的类型. , , , , , , , }; foreach (var item in scores) { Consol ...
- 优化tomcat启动速度
1.去掉不需要的jar包,这样tomcat在启动时就可以少加载jar包里面的class文件. 2.跳过一些与TLD files.注解.网络碎片无关的jar包,通过在conf/catalina.prop ...
- javascript中apply和call的区别
请补充 136页 pdf 高级javascript设计
- Linux安装过程记录信息
全新的linux安装完成后,会在root目录下有一下三个文件,记录了Linux的安装细节 anaconda-ks.cfg 以Kickstart配置文件的格式记录安装过程中设置的选项信息 install ...
- git push问题 objects/pack/tmp_pack_XXXXXX': Permission denied
1.上传时的权限问题 在执行git push origin master之后,上传过程中报出如下错误: objects/pack/tmp_pack_XXXXXX': Permission denied ...