rt-thread learning notes

2018-01-15

  > 001  具有相同优先级的线程,每个线程的时间片大小都可以在初始化或创建该线程时指定

 rt_thread_t rt_thread_create(const char *name,
void (*entry)(void *parameter),
void *parameter,
rt_uint32_t stack_size,
rt_uint8_t priority,
rt_uint32_t tick)

2018-01-16

  > 002  rt_thread_create( ) & rt_thread_init( ) 两者区别

      rt_thread_create( ) 动态创建线程,调用时才创建

      rt_thread_init( ) 静态线程,编译时即创建OK

  > 003  rt_thread_sleep( ) & rt_thread_delay( ) 两者区别

      ?...

  > 004  软件定时器实现的机理

      ?...

  > 005  rt_timer_create( ) & rt_timer_init( ) 两者区别

      ?...

  > 006  rt_timer_delete( ) & rt_timer_detach( ) 两者区别

      rt_timer_delete( )  删除定时器,系统会把定时器从rt_timer_list链表中删除,然后释放定时器控制块所占用的内存,对应函数rt_timer_create( )

      rt_timer_detach( )  脱离定时器,系统会把定时器对象从系统容器的定时器链表中删除,但是定时器所占用的内存不会被释放,对应函数rt_timer_init( )

  > 007  临界区:多个线程同时操作/访问同一块区域

  > 008  任务同步的核心思想:在访问临界区的时候只允许一个(或一类)任务运行

  > 009  操作系统中牵扯到关闭中断的操作,应做到关闭中断时间尽可能短,因为一旦关闭中断,系统将无法响应外部中断或事件,这很影响系统的实时性

      使用得当,将会是一种快速、高效的同步方式

      使用不当,将可能导致系统毫无实时性可言

  > 010  为保证一行代码的互斥运行,最快速的方法是使用中断锁而非信号量或互斥量

  > 011  调度器锁:给调度器上锁,系统依然能够响应外部中断,故在使用调度器锁进行任务同步时,需考虑任务访问的临界资源是否会被中断所修改

2018-01-19

  > 012  互斥量同一线程多次获取,多次释放,几个意思

 while()
{
result = rt_mutex_take(mutex, RT_WAITING_FOREVER);
result = rt_mutex_take(mutex, RT_WAITING_FOREVER); if(result != RT_EOK)
{
tc_stat(TC_STAT_END | TC_STAT_FAILED);
} tick = rt_tick_get();
while(rt_tickget() - tick < ); rt_mutex_release(mutex);
rt_mutex_release(mutex);
}

如果互斥量已经被当前线程线程控制,则该互斥量的持有计数加1,当前线程也不会挂起等待 ,即多次请求获取互斥量,会将该互斥量的持有计数加1

只有已经拥有互斥量控制权的线程才能释放它,每释放一次该互斥量,它的持有计数就减1,当该互斥量的持有计数为零时(即持有线程已经释放所有的持有操作),它变为可用,等待在该信号量上的线程将被唤醒

  > 013  事件信息标记

      如果信息标记同时设置了清除标记位,则当线程唤醒后将主动把事件标志清为零,否则事件标志将依然存在(即置1)

  > 014  事件与信号量的区别

      i. 事件的发送操作在事件未清除前,是不可累计的,而信号量的释放动作是累计的

      ii. 信号量只能识别单一的释放动作,而不能同时等待多种类型的释放

2018-01-20

  > 015  邮箱

      邮箱的单位是邮件,邮件大小固定为4Byte,这4Byte可以是数据(短数据情况),也可以是数据存储区的地址(大数据传送情况)

      邮箱可接收来自线程和中断服务的邮件,邮件内容是发送内容的一份拷贝

  > 016  消息队列

      能够将消息缓存至自己的内存区,并可接收来自线程和中断服务的消息,且消息长度任意

2018-05-29

  >017  内存管理

    1> 静态分区内存管理

      > 核心为分配若干大小一致的内存块组成的内存池,根据需要分配若干个这样的内存池

      > 这些内存池都是由分配它们的内存池控制块管理

      > 内存池结构为链表的形式

    2> 动态内存管理

      > 最好不要在中断服务程序中分配或释放动态内存块,这可能导致当前上下文被挂起等待

      a> 小内存管理算法(<2M)

      b> 大内存SLAB管理算法

rt-thread learning notes的更多相关文章

  1. Mybatis Learning Notes 1

    Mybatis Learning Notes 主要的参考是博客园竹山一叶的Blog,这里记录的是自己补充的内容 实体类属性名和数据库不一致的处理 如果是实体类的结果和真正的数据库的column的名称不 ...

  2. RT Thread 通过ENV来配置SFUD,操作SPI Flash

    本实验基于正点原子stm32f4探索者板子 请移步我的RT Thread论坛帖子. https://www.rt-thread.org/qa/forum.php?mod=viewthread& ...

  3. Rust learning notes

    Rust learning notes Rust Version 1.42.0 $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs ...

  4. STM32 + RT Thread OS 学习笔记[二]

    串口通讯例程 通过上面的练习,对STM32项目开发有了一个直观印象,接下来尝试对串口RS232进行操作. 1.   目标需求: 开机打开串口1,侦听上位机(使用电脑串口测试软件)发送的信息,然后原样输 ...

  5. STM32 + RT Thread OS 串口通讯

    1.   创建项目 a)   禁用Finsh和console b)   默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因 ...

  6. STM32 + RT Thread OS 学习笔记[四]

    1.  补注 a)      硬件,打通通讯通道 若学习者购买了学习板,通常可以在学习板提供的示例代码中找到LCD的相关驱动代码,基本上,这里的驱动的所有代码都可以从里面找到. 从上面的示意图可见,M ...

  7. D3 learning notes

    D3 https://d3js.org/ 数据驱动文档显示, 利用 SVG HTML CSS技术. D3.js is a JavaScript library for manipulating doc ...

  8. .Net memory management Learning Notes

    Managed Heaps In general it can be categorized into 1) SOH and 2) LOH.  size lower than 85K will be ...

  9. Coursera, Machine Learning, notes

      Basic theory (i) Supervised learning (parametric/non-parametric algorithms, support vector machine ...

随机推荐

  1. 机器学习sklearn19.0聚类算法——Kmeans算法

    一.关于聚类及相似度.距离的知识点 二.k-means算法思想与流程 三.sklearn中对于kmeans算法的参数 四.代码示例以及应用的知识点简介 (1)make_blobs:聚类数据生成器 sk ...

  2. GBDT和随机森林的区别

    GBDT和随机森林的相同点: 1.都是由多棵树组成 2.最终的结果都是由多棵树一起决定 GBDT和随机森林的不同点: 1.组成随机森林的树可以是分类树,也可以是回归树:而GBDT只由回归树组成 2.组 ...

  3. 微信小程序:java后台获取openId

    一.功能描述 openId是某个微信账户对应某个小程序或者公众号的唯一标识,但openId必须经过后台解密才能获取(之前实现过前台解密,可是由于微信小程序的种种限制,前台解密无法在小程序发布后使用) ...

  4. hibernate 解决 java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.xxx 这类的问题

    <!-- 解决 java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.intern ...

  5. 任务(task)

    任务概述 线程(Thread)是创建并发的底层工具,因此有一定的局限性(不易得到返回值(必须通过创建共享域):异常的捕获和处理也麻烦:同时线程执行完毕后无法再次开启该线程),这些局限性会降低性能同时影 ...

  6. Beta版本发布报告

    项目名称 学霸系统写手机客户端 项目版本 Beta版本 负责人 北京航空航天大学计算机学院 hots团队 联系方式 http://www.cnblogs.com/hotsbuaa/ 要求发布日期 20 ...

  7. Proxy 示例

    package cn.proxy03; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; imp ...

  8. jQuery(六)

    $下常用方法 $().xxx:只能给jq对象用 $.xxx不仅可以给jq用也可以给原生js用,叫做工具方法 $.type() <script> $(function(){ var a= n ...

  9. Neo4j学习案例【转】

    转自 打怪的蚂蚁 CSDN: https://blog.csdn.net/xgjianstart/article/details/77285334 neo4j有社区版本和企业版.社区版本是免费的,只支 ...

  10. PAT 1057 数零壹

    https://pintia.cn/problem-sets/994805260223102976/problems/994805270914383872 给定一串长度不超过 10​5​​ 的字符串, ...