MDK

无MMU抢占式操作系统的抢占工作原理

给你一囗甜甜゛ 提交于 2020-11-20 03:46:42
关注+ 星标公众 号 ,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 操作系统对于初学者来说是一个很神秘的东西,里面很多原理摸不清楚,导致还没入门就放弃了。 本文就来从底层开始,详细讲述 抢占式 操作系统(大多数RTOS)的抢占原理。 包含: 线程基础原理 线程之间抢占 中断抢占线程 中断抢占中断 strongerHuang 1 运行多个线程 1.单核“单线程 ” 严格来说,单核处理器一次只能执行一条指令,也就是说只能“单线程 ” 。 (当然,多核处理器就不一样) 为了在单核处理器上运行多个线程,我们实际上需要定期在线程之间进行 快速切换 ,以便用户感觉多个线程在并行运行。 比如处理器执行两个线程,处理器实际在两个线程之间来回切换,如下图: 2.处理器在线程之间切换,它是如何做到的? 我们说的单核处理器是“单线程 ” 的,它 有一组寄存器,我们就叫这组寄存器属于一个“线程 ” 。 例如,计算两个数字的总和时: //假设我们有两个整数:a和b int c = a + b ; 实际发生的情况如下所示(当然,它取决于的MCU类型,但总体思路是相同): # MIPS反汇编: LW V0, - 32744 (GP) # "a" 的值从RAM加载到寄存器V0 LW V1, - 32740 (GP) # 值 "b" 从RAM加载到寄存器V1

RT_THREAD之nano学习

狂风中的少年 提交于 2020-11-16 03:04:31
nona版本为精简版本,只保留FISH(选配)最小内核,可以适配STM的STD.HAL/LL库,需要手动进行移植;现在可以在KEIL MDK/CUBEMX中进行集成,也可以 RT-Thread Nano 离线安装包下载 手动下载源码(安装在 )自己搭建。keil mdk在实时运行环境中打开,通过RT_CONFIG.H进行配置。 中断处理:原3个中断需要注释掉避免重复定义HardFault_Handler() 、 PendSV_Handler()、SysTick_Handler() 系统时钟配置:需要一个硬件定时器来实现OSTICK处理 内存堆栈初始化: RT_USING_HEAP使能后就可以进行 rt_malloc、rt_free 以及各种系统动态创建对象的 API。默认是通过数组实现,也可以也推荐通过分散加载文件将堆空闲的起始分别设定为RAM_ZI的结束及RAM的结束。 串口控制台实现的RT_Kprintf()只进行了\n判断,所有要实现回车换行需要添加\r处理,否则不会回到行首实现回车换行; FISH组件是在串口控制台(只实现了输出打印)基础上又实现串口的输入操作,从而可以自动初始化和调试,其实FISH接口还可以由USB、网口等其他实现。FISH是RT_THREAD的shell(包裹在操作系统外的门卫,上报输入和传达结果),有MSH(传统命令行模式,占用资源少,缺省选型

openocd+stlink

拥有回忆 提交于 2020-11-09 14:19:41
joe @joe-PC /cygdrive/g/dapjtag/openocd-20200729/OpenOCD-20200729-0.10.0/share/openocd/scripts $ openocd -f ./board/st_nucleo_f103rb.cfg Open On-Chip Debugger 0.10.0 (2020-07-29) [https://github.com/sysprogs/openocd] Licensed under GNU GPL v2 libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD srst_only separate srst_nogate srst_open_drain connect_deassert_srst Info : Listening on port 6666 for tcl connections Info :

STM32固件库详解

女生的网名这么多〃 提交于 2020-11-06 05:55:27
emouse原创文章,转载请注明出处 http://www.cnblogs.com/emouse/ 应部分网友要求,最新加入固件库以及开发环境使用入门视频教程,同时提供例程模板,个人录制,欢迎指正。下载地址: http://dl.dbank.com/c0w0ehqynd 2013.3补充在线视频教程 最近考试较多,教材编写暂停了一下,之前写了很多,只是每一章都感觉不是特别完整,最近把其中的部分内容贴出来一下,欢迎指正。本文内容基于我对固件库的理解,按照便于理解的顺序进行整理介绍,部分参考了固件库的说明,但是也基本上重新表述并按照我理解的顺序进行重新编写。我的目的很简单,很多人写教程只是告诉你怎么做,不会告诉你为什么这么做,我就尽量吧前因后果都说清楚,这是我的出发点,水平所限,难免有很大的局限性,具体不足欢迎指正。 1.1 基于标准外设库的软件开发 1.1.1 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成

【STM32F4】【银杏科技ARM+FPGA】iCore3移植RT-Thread--IWDG看门狗

℡╲_俬逩灬. 提交于 2020-10-27 03:26:40
  单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗就是为了避免这种情况的发生。看门 狗 的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号,便实现处理器的自动复位重启。 一、 通过CubeMX开启IWDG 1.1 我们打开../BSP/STM32/STM32F407_gingko_iCore3/board/CubeMX_Config来进行配置,直接点击 Syst em Core下的IWDG,在Mode中将Activated选中即可。配置完成后点击CREATE CODE。 1.2 CubeMX生成工程后,只保留红色方框内的文件,其他的两个文件夹可以删除掉。 1.3 复制刚生成的src文件夹main.c文件夹中的函数SystemClock_Config(void)到board.c。这里内核初始化时要 调用该函数进行时钟配置。 二、 修改Kconfig文件,在menu "On-chip Peripheral Drivers"下增加menuconfig菜单中的WDT选项 三、 在Env图形配置工具中开启iwatchdog 打开Env工具,使用menuconfig配置工程,路径为:Hardware Drivers Config -> On-chip Peripheral Drivers ,空格选中即可。 在Env中输入命令:scons --target

makefile再出发[2]

生来就可爱ヽ(ⅴ<●) 提交于 2020-10-23 19:38:17
这个文章 《嵌入式】基于makefile的STM32编译方法探索》 我搜到好几次了。是个比较好的思路。 就像文章里面说的,先建立一个mDK的小例子吧。 来源: oschina 链接: https://my.oschina.net/u/4378879/blog/4487827

新建基于STM32F4xx固件库的MDK5工程模板

末鹿安然 提交于 2020-10-23 08:37:55
这是在看了正点原子的视频自己一步一步地记载下的。 1 .新建一个文件夹,这里我选择了新建了一个Template,在这个文件夹下新建五个文件夹2. 2 .新建工程,打开keil,点击项目,新建项目 新建文件保存在USER下,文件名命名初步为Template, 之后按照按照下图的步骤进行选择Stm32的型号 之后弹出这个页面,将其cancel即可 3 .文件的复制 探索者光盘是有一个固件库的文件的,目录为“【正点原子】探索者STM32F407开发板资料 视频盘(A盘)\【正点原子】探索者STM32F407开发板资料 视频盘(A盘)\8,STM32参考资料\1,STM32F4xx固件库” 3.1 找到之后进入这个文件中找到下面的目录“\1,STM32F4xx固件库\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\STM32F4xx_StdPeriph_Driver”,将里面的inc和src两个文件夹进行复制,复制到步骤1所建的FWLIB文件当中,如图: 3.2 在这个文件夹下“\1,STM32F4xx固件库\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm”找到40_41xxx.s,复制到1步骤下的CORE文件夹下

ST-LINK V2 DIY笔记(一)

社会主义新天地 提交于 2020-10-23 03:07:16
最近一段时间调试STM32板子的时候,都是用JLINK+杜邦线,或者拿官方板子当STLINK用,可以用,但是体积比较大,有时候觉得比较麻烦。正好前一阵手头项目少,就想DIY一个STLINK。 图是网上找的,由于现在还没有验证完,暂时就不上图了。 打了10块板子,最后收到好像是11块,110个小板,顺便学了一下怎么V-CUT出板子。10cm*10cm以内,一般都是特价板,80块包邮。 电阻、电容的封装都是0603的,手焊的话,比0805封装的稍微难一点。刚开始焊了一块,试了试,可以下载程序,还没有做测试,正好第二天要把一款仪器给师兄调试,就让他顺便测试一下。 反馈给我的结果是很稳定,比他在X宝买的稳定很多,不会出现调试中断开连接的情况。 所以就多焊了几块: 这次焊芯片的速度倒是比之前快很多,不知道是不是烙铁好用的缘故,还是熟练了... 从师兄那把仪器拿回来之后,再调试变更的功能,发现STLINK不能调试,用ST-LINK utility可以下载程序。折腾了半天,修改了MDK的配置后,发现可以调试了... 今天再调试的时候,发现又不可以了... 用nucleo板子上集成的stlink-v2.1倒是一直可以下载... 我的电脑USB口有点问题,有时候会导致蓝屏,不知道是不是电脑的原因。不过也说不过去,因为官方开发板是可以用的。可能是v2.1和v2有区别。 准备上班之后

【STM32】EXTI---外部中断/事件控制器

我只是一个虾纸丫 提交于 2020-10-12 10:02:25
Author:AXYZdong 自动化专业 工科男 有一点思考,有一点想法,有一点理性! 定个小小目标,努力成为习惯!在最美的年华遇见更好的自己! CSDN@AXYZdong,CSDN首发,AXYZdong原创 唯一博客更新的地址为: 👉 AXYZdong的博客 👈 文章目录 2020电赛前夜的一篇文章,明天8点开题,加油! 一、EXTI 简介 二、EXTI 功能框图 三、中断/事件线 四、EXTI 初始化结构体 4.1. 中断/事件线 4.2. EXTI 模式 4.3. 触发类型 4.4. EXTI 控制 五、外部中断控制实验 编程要点 EXTI.h EXTI.c main.c 实验现象 六、总结 开发板: stm32f407VET6 开发环境:keil5 MDK 插播一条反爬虫信息,读者可以忽略: 2020电赛前夜的一篇文章,明天8点开题,加油! 一、EXTI 简介 外部中断/事件控制器(EXTI)管理了控制器的 23个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。 二、EXTI 功能框图 信号线上斜杠并标注 “23” 字样 :表示在控制器内部类似的信号线路有23个。 EXTI 是挂靠在 APB2 总线上的。 三、中断/事件线

ARM开发环境入门:keil与proteus的简单程序的熟悉

最后都变了- 提交于 2020-10-10 12:33:12
这里写目录标题 安装mdk5,stm32与proreus 参考网上代码,完成一个STM32简单程序的编译 完成一个51程序设计和仿真 安装mdk5,stm32与proreus 安装包链接:keil https://pan.baidu.com/s/1o934WcU proteus www.zhanshaoyi.com/14398.html 安装教程参照微信公众号软件智库中的教程 参考网上代码,完成一个STM32简单程序的编译 首先打开keil5,将Encoding设置成Chinese GB2312 Tab size 从2调成4,并点击上面的Colors&Fonts 选择C/C++ 可以调试颜色 我们这里选择默认的规格 下面我们可以做一个简单的STM32的程序编译: 以下创建一个新文件,选择芯片 我们这里选择STM32F103RB芯片 勾选以下选项 然后创建完成 将代码粘贴至文本中 (代码源来自于百度百科) # define PERIPH_BASE ((unsigned int)0x40000000) //AHB # define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) # define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) //GPIOA_BASE=0x40000000+0x10000+0x0800