- 博客(36)
- 收藏
- 关注
原创 fans-rt 0.11内核架构设计缺陷分析
fans-rt 0.11版本在近期的测试中发现一些与系统架构上的设计缺陷,主要表现在实时性和空间占用两个方面,在0.12版本中将着重解决这些问题。1.实时性问题fans-rt 0.11版本内核架构只支持中断态和用户态,所有内核服务均在中断态执行,在处理耗时较长并需要原子化操作的过程时,会严重影响系统实时性。目前在系统性能测试中发现有以下问题:系统内存管理服务从MMS中申请和释放全局
2015-08-28 07:28:13 562
原创 【Open】fans-rt 0.11 重要需求和遗留问题跟踪
1.Message Queue 未实现 2.Pipe 暂未实现 3.KEIL 连接脚本(.sct)和GCC连接脚本(.ld)生成工具。 4.应用层异常(内存访问异常、除法错误、无效指令等)后强制结束任务。 5.内核异常后自动复位系统 6.内核和应用定时器 7.软件看门狗 8.移植到 STM8S207 MCU 9.多CPU(LPC4357)环境下的对象管理需要加入引用计数和SPINLO
2015-08-17 01:18:55 506
原创 【怎样在fans-rt上进行开发】1.windows 系统下 gcc 交叉编译环境搭建(cortex-m3)
【相关软件】1.msys shell2.arm-none-eabi-gcc for windows3.Jlink驱动【安装】一、msys shell 的安装1.下载打开 http://www.mingw.org/,点击右上角 Download Installer按钮进入 sourceforge 网站并自动弹出下载对话框。2.安装第一步,选择MinGW安装路径
2015-08-16 15:46:22 1244
原创 【Open】多处理器并行环境下,对象释放时可能导致阻塞队列链表损坏
【问题原因】多处理器并行执行,任务A被同步对象阻塞并且已经超时,CPU0正在释放同步对象,CPU1进入任务调度中断为任务A处理阻塞超时,将导致多个处理器同时执行链表删除动作。【问题影响】同步对象阻塞链表损坏或CPU0陷入死循环。【解决方案】在任务调度器中检测阻塞对象状态,如果状态为DEATH,则不执行链表删除动作。
2015-08-06 01:34:09 321
原创 【进展】2015.08.04 增加 SEMAPHORE 释放功能,增加MUTEX权限判断,非Onwer任务不能解锁
1.增加MUTEX权限判断,非Onwer任务不能解锁STATIC E_STATUS IPC_UnlockMutex(LPKOBJECT_HEADER lpHeader, LPVOID lpParam){ LPTASK_CONTEXT lpThisContext, lpNextContext; IPC_INFOR(TRUE, "Unlock mutex '%s' by '%s
2015-08-04 02:07:02 545
原创 【Open】2015.08.03-连接脚本配置错误导致“不精确的数据访问违例”
【问题现象】MUTEX测试用例中发生“不精确的数据访问违例”testmutex.c 文件内定义在 .UserRWdata 段的变量 g_lpWakeupTaskName 连接后地址为 0x0800bd88。【问题原因】0x0800bd88 为片上FLASH地址,查看stm32-soft.map文件发现 g_lpWakeupTaskName 连接后被放入data gr
2015-08-03 02:05:39 805
原创 fans-rt 进程间通讯(IPC)-同步对象测试用例库
一.进程间通讯测试用例库(EVENT) 1.事件对象创建捕获和释放测试 2.事件对象自动命名测试 3.事件对象超额创建测试 4.事件对象释放后再捕获测试(异常句柄) 5.事件对象单任务阻塞和激活测试 6.事件对象多任务阻塞后全部激活测试 7.时间对象多任务阻塞后单独激活测试 8.事件对象阻塞超时测试 9.事件对象无限阻塞测试 10.事件对
2015-07-30 02:58:12 378
原创 FANS-RT 任务同步对象设计方案
一、特性流程及涉及模块框图二、特性总体需求1.创建对象 创建事件对象 创建互斥体对象 创建信号量对象 创建信号量集对象2.捕获对象(通过对象名称)3.向对象发送信号 向事件对象发送信号 向互斥体对象发送信号(解锁) 向信号量对象发送信号(点灯) 向信号量集对象发送信号4.复位对象 复位事件对象5.等待对象
2015-07-28 00:18:32 398
原创 fans-rt 0.11 版本交付计划
版本: 0.11 交付时间: 2015.09.30交付需求:1. 任务管理优化 -- 任务创建流程优化(已完成)2. 任务管理优化 -- 任务堆栈管理优化(已完成)3. 任务管理优化 -- 任务局部变量(已完成)4. 支持事件对象(已完成)5. 支持互斥体对象(已完成)6. THUMB2 ARMASM汇编自动转换GNU汇编(已完成)7. Cortex-M3 AR
2015-07-26 22:34:21 383
原创 【Open】内存MAP需要通过配置文件生成
配置文件需要描述的内容包括:1.有多少个内存REGION2.各Region的起始地址和长度3.每个Region中包含哪些代码和数据段通过以上信息使用shell脚本生成.sct脚本和.ld脚本供keil和gcc连接时使用,并生成配置定义头文件供启动时初始化MPU使用。
2015-07-26 03:50:11 348
原创 2015.07.15-编译stm32-soft在初始化BOOT任务时挂死(KEIL)
【问题现象】初始化BOOT任务过程中发生FAULT故障。【问题原因】对象容器的长度与容器中POOL的数量有关,但在初始化对象容器时,使用默认的容器长度进行初始化导致对象容器长度计算错误覆盖对象链表,当对象链表上检查重名对象时,链表首指针为NULL导致MemFault故障。修改前:EXPORT E_STATUS CORE_CreatePoolContainer(LPCORE_CO
2015-07-26 03:35:56 460
原创 如何使用jlink+gdb在stm32上调试fans-rt
【相关软件】windows xpMinGWarm-none-eabi-gccarm-none-eabi-gdbJLink_V490 驱动 【操作步骤】1.运行JLink.exe2.运行JLinkGDBServer.exe 选择 USB/STM32F103C8(根据你的MCU型号选择)/JTAG/1000KHZ3.运行 MinGW shel
2015-07-23 02:00:16 1416
原创 【Close】使用GCC编译运行无法完成测试用例
【问题】使用GCC编译后不能正常完成所有测试用例,在TASK TEST阶段切换任务时宕机。[0000000000000000][0045][INFOR][ShowSystemInformation] Starting Fans-RT 0.11.1298 for board stm32-mini ...[0000000000000000][0047][INFOR][ShowSystemIn
2015-07-19 23:57:45 891
原创 Fans-rt 任务局部变量特性设计方案(需求分解)
FANS-RT 任务局部变量特性设计方案一、特性流程简图二、特性总体需求1.创建局部变量对象2.获得局部变量键3.释放局部变量键4.根据局部变量键设置变量值5.根据局部变量键查询变量值6.释放局部变量对象三、需求分解1.API层 为指定任务创建并激活LSOT对象(LSOT API) 删除指定任务的LSOT对象(LSOT API)
2015-07-17 01:36:11 372
原创 2015.07.15-系统初始化首个任务时发生fault故障
【问题现象】初始化BOOT任务过程中发生FAULT故障。【定位过程】任务创建结束进入CORE_SetError设置错误码判断 Current Task 指针不为空:STATIC E_STATUS SetTaskError(E_STATUS emCode){ LPTASK_CONTEXT lpCurrentContext = GetCurrentTaskContext();
2015-07-16 00:28:19 912
原创 【close】任务上下文对象长度超过128字节
原因: 包含在TASK_CONTEX 对象中的 ARCH_CONTEX 长度32字节,需要从任务上下文中移除,使用指针处理。需要为ARCH_CONTEXT单独分配空间。
2015-07-15 01:40:49 340
原创 【close】任务局部变量相关功能
【需求】1.创建局部变量对象2.获得局部变量键3.释放局部变量键4.根据局部变量键设置变量值5.根据局部变量键查询变量值
2015-07-12 02:02:34 323
原创 【open】fans-rt 任务销毁的对象释放流程
任务销毁的对象释放流程未完成。任务创建流程包括1.任务上下文对象分配2.任务用户栈对象分配3.任务内核栈对象分配4.任务局部变量对象分配5.任务局部堆分配以上动作的逆向操作如果全部一次在内核服务中完成可能严重影响系统实时性,如果按步骤调用单个服务分次完成则无法解决任务自销毁问题,如果放到IDLE中处理则可能导致任务再分配失败。
2015-07-12 01:48:22 408
原创 fans-rt 任务调度-堆栈切换篇(4)tiny模型详细分析
优化后的Tiny模型代码:;; Copyright(C) 2013-2015, Fans-rt development team.;; All rights reserved.;; This is open source software.; Learning and research can be unrestricted to modification
2015-07-11 23:32:23 523
原创 fans-rt 任务调度-堆栈切换篇(3)关于cortex-m3堆栈的入栈顺序说明
cortex-m3 STM32 MCU支持单条PUSH/POP指令对多个寄存器执行入栈出栈操作,入栈顺序按照寄存器编号的反序进行入栈,不以用户的编码顺序进行入栈(因为操作码以mask值运算),例如:PUSH {R0-R3}PUSH {R1, R0, R2, R3}PUSH {R3, R1, R2, R0}PUSH {R3, R1-R0}四种写法的执行结果是完全一致的,指令执行后,堆栈
2015-07-11 03:33:40 854
原创 fans-rt 介绍(4)-源码文件夹介绍
三、源码文件夹介绍├─boot├─build (编译配置文件夹)│ └─stm32├─include│ ├─armcc│ ├─gcc│ └─stdc├─libs│ ├─libapi (fans-rt API接口层)│ ├─libcal (fans-rt 内核适配层)
2015-07-11 01:42:55 695
原创 fans-rt 介绍(3)-可选组件(待实现)
二、可选组件1.设备和驱动管理(DDM) 提供TINY模式和HUGE模式的设备管理架构 TINY架构 以节省内存为目的的简易设备管理架构,提供对设备节点的管理,不提供设备树的管理结构,提供电源管理支持,不提供热拔插支持,适用于64KB以下内存较小的单片机系统。 HUGE架构 支持总线(PCI/USB等)架构的设备和驱动管理,提供树形设备管理结构,提供电
2015-07-11 01:31:17 535 1
原创 fans-rt介绍(2)-系统功能介绍
一、系统功能1、任务管理(完成度90%)提供抢占式任务管理,支持256级优先级,支持1024个任务同时运行,相同优先级采用轮转调度,不同优先级采用抢占调度,调度时间复杂度O1。任务管理提供至多3级位图(256bit)最少1级位图(8bit)描述就绪状态,调度时查表获得最高优先级的就绪任务。支持多种堆栈模型,包括全局内核堆栈、局部内核堆栈,在tiny模式下所有任务使用单堆栈运行,以节约内存空
2015-07-11 01:29:43 514
原创 【close】fans-rt 对象管理支持同类不同长度的对象(新需求)
对象管理需要支持同类且不同长度的对象的分配和释放(新需求,来源于任务局部变量)。
2015-07-10 23:48:54 282
原创 【open】fans-rt系统全局内存管理和全局堆管理优化点
MMS服务的BUDDY算法部分抽取为公共库 kbuddy.c MMS和HMS通过调用kbuddy.c中的公共函数实现域/堆的创建/分配/释放功能。
2015-07-10 23:46:35 294
原创 fans-rt 内存管理设计方案(5)局部堆管理模块设计-需求分析
5.1需求分析1.创建堆根据传入的内存指针、长度以、堆内块大小、最大行的块数量创建一个堆并返回堆对象指针。2.删除堆根据传入的堆对象指针删除堆。3.从堆中分配行根据传入的堆对象指针和需要分配的内存长度从堆中分配若干个连续的块组成一行。如果分配的行的块个数不是2的幂,则需要将分剩余部分分割成若干个行关联到空闲伙伴表中。4.释放内存到堆中根据传入的堆对象指针和需要释放的
2015-07-10 22:39:40 448
原创 fans-rt 任务调度-堆栈切换篇(2)堆栈模型
前面我们提到,任务的切换就是堆栈的切换(当然首先是任务上下文的切换),也通过代码简单的描述了堆栈切换的切换过程。但是,要成功从一个任务切换到另一个任务还必须了解CPU当前运行模式下,中断处理时的特性。例如,进入堆栈时会保存哪些寄存器,CPU是否支持硬件双堆栈(甚至更多层次的堆栈),如果支持多层堆栈,那么在进入中断前,外层堆栈保存哪些寄存器,内层堆栈保存哪些寄存器,是否会将外层堆栈指针保存在内层堆栈
2015-07-08 22:13:03 863
原创 fans-rt 任务调度-堆栈切换篇(1)任务切换的基本原理
一个多任务的操作系统可以同时运行多个任务,在只有一个CPU的情况下,怎么同时运行多个任务呢?其实就是操作系统控制CPU在多个任务之间来回切换,这种切换对于任务来说,可以是主动发起的(休眠、阻塞),也可以是不可感知的(优先级抢占、时间片流失)。由于切换的频率极高,速度极快,给用户的感觉就好像是同时在运行多个任务一样。那么,CPU是怎么在任务之间切换的呢?我们知道CPU运行程序的所有局部变量、需要重复
2015-07-08 01:39:59 1046
原创 fans-rt 内存管理设计方案(2)总体设计
一、总体设计1.1 需求概述按照需求分析的规格要求,需要提供内存的申请、回收、查看内存空间分布情况、支持多个非连续内存区间的管理、提供对MPU的支持,相同硬件平台下任意复杂环境的内存申请、回收时间在允许的范围内。Fans-rt的内存管理分为系统全局内存管理、内核对象内存池管理、应用全局堆管理和任务局部堆管理。1.2系统全局内存管理概述在计算机系统中,可能同时存在多个非连续的内存
2015-07-05 22:18:50 390
原创 fans-rt 介绍(1)-什么是fans-rt
fans-rt 是一个开源实时操作系统项目(目前只实现了STM32的支持)。 已实现或部分实现的功能包括:任务管理、对象管理、系统级内存管理、IRQ管理、LPC服务管理、进程间通讯管理(EVENT/MUTEX,其他暂未完成)。 系统架构设计支持硬件级双堆栈(提供软件双堆栈),支持硬件任务切换中断,提供内核特权级保护,提供MPU支持。系统全局内存管理fans-rt 提供内核态和用户态
2015-07-05 03:29:23 519
原创 2015.07.03-keil中解决sct连接脚本告警和错误的一些方法
【问题现象1】错误 ..\..\source\platform\board\stm32\lite\armcc\stm32-lite.sct(17): error: L6236E: No section matches selector - no section to be FIRST/LAST.【问题原因1】没有段与选择符匹配,指定为FIRST或LAST的段不存在,例如编译文件为
2015-07-03 01:23:03 4024 1
原创 2015.07.02-INFOR级别调试信息在任务管理器启动后不能输出
【问题现象】定位 Pool ID 问题过程中增加INFOR级别调试信息无输出。【定位过程】系统启动时INFOR级别调试信息输出正常,系统首个任务开始运行后INFOR级别调试信息不能输出。单步跟踪发现调试开关的MASK值发生改变,继续跟踪调试发现BOOT任务堆栈初始化后调试开关MASK值被覆盖为0x004b5453(与昨天所遇问题一致)。【问题原因】为BOOT任务分配内核栈时调用
2015-07-02 01:20:53 621
原创 2015.07.02-IPC对象释放失败
【问题现象】任务测试完成后释放MUTEX和EVENT失败。【定位过程】释放对象时发现所释放对象的Pool ID不正确而无法释放,Pool ID属于对象HANDLE成员中的b11:20#define OBJECT_SID_BITS 11#define OBJECT_PID_BITS 10#define OBJECT_TID_
2015-07-02 00:55:16 333
原创 2015.07.01-初始化BOOT堆栈卡死
【问题现象】系统启动到初始化BOOT任务CORE STACK过程中打印堆栈地址时发生BUSFAULT。【定位过程】fa_vxnprintf函数打印指针时访问字符串数组charset取16进制数字时指针为0x004b5453("STK"),非stm32有效RAM或ROM地址。在 CORE_StackInit 函数中设置BOOT STACK Object Magic后ucharset全
2015-07-01 01:45:53 480
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人