• rt-thread learning notes


    rt-thread learning notes

    2018-01-15

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

    1 rt_thread_t rt_thread_create(const char *name,
    2                              void (*entry)(void *parameter),
    3                              void       *parameter,
    4                              rt_uint32_t stack_size,
    5                              rt_uint8_t  priority,
    6                              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  互斥量同一线程多次获取,多次释放,几个意思

     1 while(1)
     2 {
     3     result = rt_mutex_take(mutex, RT_WAITING_FOREVER);   
     4     result = rt_mutex_take(mutex, RT_WAITING_FOREVER);   
     5 
     6     if(result != RT_EOK)
     7     {
     8         tc_stat(TC_STAT_END | TC_STAT_FAILED);
     9     }
    10 
    11     tick = rt_tick_get();
    12     while(rt_tickget() - tick < 50);
    13 
    14     rt_mutex_release(mutex);
    15     rt_mutex_release(mutex);
    16 }

    如果互斥量已经被当前线程线程控制,则该互斥量的持有计数加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管理算法

  • 相关阅读:
    PHP设计模式—享元模式
    mysql锁和加锁分析
    WPF 通过DrawingBrush实现复杂的背景
    领域驱动设计(3) DDD设计流程
    应用入口app.php
    记录日志ExceptionHandle.php
    常用登陆验证前端BaseController.php
    常用封装之二common.php
    数据库配置ucenter.php
    语言包lang.php
  • 原文地址:https://www.cnblogs.com/skullboyer/p/8285102.html
Copyright © 2020-2023  润新知