精华内容
下载资源
问答
  • 光盘 Julia Digital Image Steganography是Julia应用程序,它使用最低有效位隐写术来隐藏数字... 它不是Julia模块,不会导出任何函数或。 下面给出了有关如何使用J-DIS教程。 Julia包依赖关系 J-DIS使用以下软件
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    5.16 考虑到有关空指针所有这些困惑,要求它们内部表示都必须为0不是更简单吗? 5.17 说真,真有机器用非零空指针吗,或者不同类型用不同表示? 地址0上到底有什么? 5.18 运行整数值0转换为指针...
  • excel使用

    2012-11-25 17:06:01
    首先打开“工具”菜单,单击“”命令中“Visual Basic编辑器”,进入Visual Basic编辑环境,在“工程-VBAobject”栏中当前表上单击鼠标右键,选择“插入”-“模块”,在右边栏创建下面函数rrr,代码如下: ...
  • 5.16 考虑到有关空指针所有这些困惑,要求它们内部表示都必须为0不是更简单吗? 60 5.17 说真,真有机器用非零空指针吗,或者不同类型用不同表示? 61 地址0 上到底有什么? 61 5.18 运行整数值0...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    5.16 考虑到有关空指针所有这些困惑,要求它们内部表示都必须为0不是更简单吗? 60 5.17 说真,真有机器用非零空指针吗,或者不同类型用不同表示? 61 地址0 上到底有什么? 61 5.18 运行整数值0...
  • MFC程序框架剖析

    2015-03-05 09:53:19
    19、MFC程序的运行过程 (1)首先利用全局应用程序对象theApp启动应用程序 (2)调用全局应用程序对象的构造函数,从而就会调用其基类CWinApp的构造函数,以完成应用程序的一些初始化 (3)进入WinMain函数 (4)进入消息...
  • 由于基本无法编辑录制文件,所以录制时候为了避免录制失败,推荐纯粹使用键盘操作,以下是比较关键几个键盘组合: Ctrl+F = 调出查找对话框 Ctrl+H = 调出替换对话框 Alt+F4 = 关闭作用,比如,关闭查找...
  • 在操作方式运行环境、与其他软件接口以及开发计划等发生 变化时,可使用系统自带一个程序来修改现行系统,以适应新变 化。 系统界面: 2.4 E-R图如下: 2.5部分数据字典: ...
  • 你必须知道495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    1.13 以下的初始化有什么区别?char a[] = "string literal"; char *p = "string literal"; 当我向p[i] 赋值时候, 我程序崩溃了。. . . . 5 1.14 我总算弄清除函数指针声明方法了, 但怎样才能初始化呢? . . 5...
  • 最大内存占用可以在链接时确定,而不是运行时; 用户不需要关心内存分配失败处理方式; 允许在不使用动态内存分配地方使用RTOS。 定义 configSUPPORT_STATIC_ALLOCATION = 1 使用静态内存分配。既可以使用...

    内存管理

    • freertos支持动态分配内存和静态分配内存
    • Freertos的内存分配是在portable层中实现,与内核实现分开。目录:Source/Portable/MemMang
      在这里插入图片描述

    静态内存管理

    特点

    1. 对象可以分配在特定的内存地址处;
    2. 最大内存占用可以在链接时确定,而不是运行时;
    3. 用户不需要关心内存分配失败的处理方式;
    4. 允许在不使用动态内存分配的地方使用RTOS。

    定义宏 configSUPPORT_STATIC_ALLOCATION = 1 使用静态内存分配。既可以使用以下函数,里面使用的内存分配是静态内存分配方式。
    在这里插入图片描述

    动态内存管理

    大多数使用freertos的场合,还是使用的动态内存分配。freertos提供了五种动态内存分配方法。如第一张图所示。
    动态分配RTOS对象的特点:

    1. 最大可能减少系统使用的最大RAM;
    2. 当创建object时需要更少的函数参数;
    3. 内存再RTOS的API函数函数中自动分配;
    4. 应用程序不需要关心内存分配本身;
    5. RTOS内存分配API函数,会返回heap的使用信息,使得用户可以优化heap的使用;
    6. 内存分配的方法有多种方式,可以适应于不同的应用场合。

    内核对象内存分配,分配的内存来自:special freertos heap。即ucHeap[ configTOTAL_HEAP_SIZE ]也就是说,freertos运行起来后,里面动态分配的内存都是在ucheap中分配。栈也是从ucheap分配的

    五种动态内存分配方法

    • Heap1:适用于一旦创建好,就不需要删除的应用。(区别于静态分配)(自从freertos支持静态内存分配后,heap1分配方法很少被使用)
    • Heap2:分配内存采用best fit算法;内存可以释放,但是不会被合并。
    • Heap3:封装C标准的malloc函数和free函数,实现线程安全。使用条件:需要linker建立堆,编译器库实现malloc和free;不是确定性的;会增加RTOS内核的体积。
    • Heap4:分配内存采用first fit策略(即选择第一个满足分配要求的内存块),释放内存后,相邻内存会被合并。所有内存块被按照地址从低到高保存在链表中,相邻内存块如果地址连续,则可以合并。
    • Heap5:分配和释放策略类似于heap4。heap5同时允许使用多个非连续的内存区块作为系统的内存。
      使用vPortDefineHeapRegions()函数初始化;创建任何对象都会调用pvPortMalloc(0函数,在此之前必须调用vPortDefineHeapRegions()函数初始化初始化。vPortDefineHeapRegions()函数参数是一个HeapRegion结构体的数组,
    const HeapRegion_t xHeapRegions[] =
    {
        { ( uint8_t * ) 0x80000000UL, 0x10000 },
        { ( uint8_t * ) 0x90000000UL, 0xa0000 },
        { NULL, 0 } /* Terminates the array. */
    };//各地址片段必须按顺序放置在数组中
    

    Freertos操作系统是个大程序,那么这个程序运行过程中需要堆和栈。堆用于保存TCB或者队列、信号量等内核结构变量。栈用于保存每个任务的运行环境和过程变量or局部变量。于是在freertos编译的时候,定义了一个大的数组,ucHeap[ configTOTAL_HEAP_SIZE ]。

    在这里插入图片描述整个ucheap是一个大数组,heap本来是堆的意思,但是这里可以说是堆,也可以说不是,自己灵活变通理解。每个任务函数需要用到的栈从这个heap中分配;内核控制变量:TCB和队列、信号量等也从heap中分配,都是使用pvPortMalloc()函数。
    The xPortGetFreeHeapSize()可以返回剩余的heap空间大小;但是不能提供碎片信息。

    参考资料

    《Mastering the FreeRTOS™ Real Time Kernel》
    《cortex M3 权威指南》
    《freertos 开发手册》
    freertos

    公众号:嵌入式软件和硬件
    在这里插入图片描述

    展开全文
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    17.1 .Net 框架结构提供 I/O 方式 .215 17.2 文件存储管理 .217 17.3 读 写 文 件 .222 17.4 异步文件操作 .227 17.5 小 结 .234 第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码...
  • 比 SUBST 更加强大的是,虚拟驱动器专家拥有一个友好而易于使用的图形用户界面,并且,它能够在系统重新启动时自动恢复所有虚拟驱动器。使用它,您可以创建一个虚拟磁盘,用来组织需要刻录到光盘上的数据,并基于此...
  • 比 SUBST 更加强大的是,虚拟驱动器专家拥有一个友好而易于使用的图形用户界面,并且,它能够在系统重新启动时自动恢复所有虚拟驱动器。使用它,您可以创建一个虚拟磁盘,用来组织需要刻录到光盘上的数据,并基于此...
  • C#微软培训资料

    2014-01-22 14:10:17
    17.1 .Net 框架结构提供 I/O 方式 .215 17.2 文件存储管理 .217 17.3 读 写 文 件 .222 17.4 异步文件操作 .227 17.5 小 结 .234 第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码...
  • 破火山口 图书馆概况 Vulkan和防锈实验。 该代码分为一个核心caldera箱和一些不同应用程序。... 可以使用以下方式运行应用程序: make && cargo run --bin 命令行支持(最近添加了通过 ,因此应用程
  • 除了原版自带的宏,本汉化版本还收录以下几个对汉化非常有用的宏。用户可以通过点击相应图标按钮直接运行这些。 l 快捷键、终止符和加速器检查 用于 Passolo 翻译字串中快捷键、终止符和加速器检查、添加...
  • 这本指南在讲解文本编辑基础知识同时,也涵盖了高级工具,例如用交互式的宏和脚本来扩展编辑器功能——所有这些都用易于理解的方式来传授,这种风格已经让《学习Vi和vim编辑器(影印版)》成为经典。如果你使用...
  • 代码语法错误分析工具pclint8.0

    热门讨论 2010-06-29 07:00:09
    该类选项是用于禁止生成某类错误信息的选项,最常用的是-e和+e,-e是禁止生成某类错 误信息,+e是恢复生成某类错误信息。运行lint目录下的msg.exe可以得到msg.txt文件, 这个长达5000行的文件包含了所有的错误...
  • 以下的修改或更新有的是应网友提议,有的是我自己认为应该做的更好的事情,现列表如下:  增加对安装MASMV328.2的介绍,很多朋友来信都是问如何安装MASM32,虽然对有些老手说完全没有这个必要,因为MASM32的安装...
  • 要找到程序中的bug,以下步骤是不可缺少的:分析代码,连接你要调试的运行中的进程,然后在运行时修改代码与变量。本章列出的只是你在编译和调试程序时需要了解的几个问题。 第四章 使用VS.NET 2005 VS.NET 2005在...
  • o 2.13 以下的初始化有什么区别?char a[] = "string literal"; char *p = "string literal"; 当我向 p[i] 赋值时候, 我程序崩溃了。 o 2.14 我总算弄清除函数指针声明方法了, 但怎样才能初始化呢? * 3....
  •  有人可能会提出质疑:不应该使用单主机或非网络IPC(本卷主题),所有程序都应该在网络上多台主机上同时运行。但在日常实践中,单主机IPC往往比网络通信快得多,而且有时 还简单些。共享内存、同步等方法通常...
  • 在包含多个处理器(CPU)系统中,多个进程也许可以(在不同CPU上)同时运行,或许给定进程内多个线程也能同时运行。因此,把任务分到多个进程或线程中有望减少完成指定任务时间。  本书详细描述了以下4种...
  • C 语言编程常见问题解答 【作者】[美]Paul S.R. Chisholm 译:张芳妮 吕 波 【出版社】清华大学出版社 C语言编程常见问题解答(目录) ... 17.5 怎样防止用户用Ctr+Break键中止程序的运行? 17.6 怎样才能只...

空空如也

空空如也

1 2 3 4
收藏数 62
精华内容 24
关键字:

以下不是宏的运行方式的是