qi777ji

  • 2019-05-19
  • 加入了学习《新版RTOS教程:15天入门RT-Thread内核》,观看 初识RT-Thread

  • 2019-05-11
  • 加入了学习《理解卡尔曼滤波器(英语中字)》,观看 为什么使用卡尔曼滤波器

  • 2019-04-28
  • 加入了学习《电子电路基础知识讲座》,观看 5.2.3.2 Boost升压斩波电路的仿真

  • 加入了学习《电子电路基础知识讲座》,观看 5.2.3.1 Boost升压斩波电路的推导

  • 加入了学习《电子电路基础知识讲座》,观看 5.2.2 电荷泵电路

  • 加入了学习《电子电路基础知识讲座》,观看 5.2.1.3 Buck降压斩波电路的仿真

  • 加入了学习《电子电路基础知识讲座》,观看 5.2.1.2 Buck降压斩波电路的理论计算

  • 2019-04-25
  • 加入了学习《电子电路基础知识讲座》,观看 5.2.1.1 斩波电路概述

  • 加入了学习《电子电路基础知识讲座》,观看 5.1.7 MOSFET栅极驱动的振荡现象

  • 加入了学习《电子电路基础知识讲座》,观看 5.1.6 MOSFET的驱动

  • 加入了学习《电子电路基础知识讲座》,观看 5.1.5 MOSFET的损耗分析

  • 发表了主题帖: 【RT-Thread读书笔记】之三 定时器

    本帖最后由 qi777ji 于 2019-4-25 12:53 编辑    用阻塞延时的方法实现线程缺点很明显,每个循环周期都要扫描所有线程,费时效率低。RT-Thread提供了更合理的选择,每个线程都内置一个定时器,使用时先将线程挂起,之后内置定时器启动并将定时器插入到全局的系统定时器列表rt_timer_list,它维护着一条双向链表,每个节点表示正在延时的定时器,节点按照延时大小升序排列,由SysTick中断来控制扫描系统定时器列表判断时间是否到了。如果排在第一个定时器时间没到,那么它之后的一定也没到(节点按照延时大小升序排列的),如果时间到了就让对应的线程就绪,这种方法大大缩短了寻找延时到期线程的时间。 1.系统定时器在timer.c中,需要添加到工程的srtt/source组中 /* hard timer list */ static rt_list_t rt_timer_list[RT_TIMER_SKIP_LIST_LEVEL]; 2.系统定时器列表初始化由函数void rt_system_timer_init(void)完成,在timer.c中。 3.定时器统一由一个定时器结构体struct在rtdef.h里来定义。 /*** timer structure*/ struct rt_timer {     struct rt_object parent;                            /**< inherit from rt_object */     rt_list_t        row[RT_TIMER_SKIP_LIST_LEVEL]; 。。。。。 }; typedef struct rt_timer *rt_timer_t; 4.另外每个线程都会内置一个定时器,就是在线程控制块中添加一个定时器成员。 /*** Thread structure*/ struct rt_thread {。。。 struct rt_timer thread_timer;                       /**< built-in thread timer */ 。。。。 }; typedef struct rt_thread *rt_thread_t;5.定时器初始化由函数void rt_timer_init(rt_timer_t timer。。。)完成,在timer.c中。 6.与定时器相关的还有函数rt_timer_control()用于设置不同的初始值和状态,在timer.c中。 rt_err_t rt_timer_control(rt_timer_t timer, rt_uint8_t cmd, void *arg) {     /* timer check */     RT_ASSERT(timer != RT_NULL);     switch (cmd)     {     case RT_TIMER_CTRL_GET_TIME:         *(rt_tick_t *)arg = timer->init_tick;         break; 。。。。     }     return RT_EOK; } RTM_EXPORT(rt_timer_control); 暂时只学习到这了,RT-Thread定时器要看的内容还是比较多的。 此内容由EEWORLD论坛网友qi777ji原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 2019-04-24
  • 发表了主题帖: 【RT-Thread读书笔记】之二 实现多线程

    本帖最后由 qi777ji 于 2019-4-25 11:08 编辑 我们常规裸机系统就是在main函数里顺序无限循环,而多线程系统中为多个独立且无法返回的函数称为线程。裸机系统不用关心变量存放位置他们都会存放在栈空间里。多线程系统每个线程都是相互独立的必须事先预定义好,每个线程通常都是存在预定义好的全局数组称为线程栈,而在RT-Thread中凡涉及到数据类型时会用typedef重新取一个以rt_xxx前缀的类型名,所以预定义全局数组类型不要搞错!/* RT-Thread basic data type definitions */ typedef signed   char                   rt_int8_t;      /**<  8bit integer type */ typedef signed   short                  rt_int16_t;     /**< 16bit integer type */ typedef signed   long                   rt_int32_t;     /**< 32bit integer type */ typedef unsigned char                   rt_uint8_t;     /**<  8bit unsigned integer type */ typedef unsigned short                  rt_uint16_t;    /**< 16bit unsigned integer type */ typedef unsigned long                   rt_uint32_t;    /**< 32bit unsigned integer type */ typedef int                             rt_bool_t;      /**< boolean type */ 线程是独立函数,主体无限循环且不能返回。线程由系统调度,由额外的线程控制块定义,系统对线程的全部操作可以通过线程控制块完成。线程控制块使用结构体struct在rtdef.h里来定义,包涵线程指针、入口地址、栈起始地址、栈大小等成员变量。 /** * Thread structure */ struct rt_thread {     /* rt object */     char        name[RT_NAME_MAX];                      /**< the name of thread */     rt_uint8_t  type;                                   /**< type of object */     rt_uint8_t  flags;                                  /**< thread's flags */ 。。。。。。。 }; typedef struct rt_thread *rt_thread_t; 最后线程初始化函数rt_thresd_init(),他在thread.c中定义需要添加到工程的srtt/source组中。在rtthread.h中声明,所有跟线程相关的函数都在这定义。 static rt_err_t _rt_thread_init(struct rt_thread *thread,                                 const char       *name,                                 void (*entry)(void *parameter),                                 void             *parameter,                                 void             *stack_start,                                 rt_uint32_t       stack_size,                                 rt_uint8_t        priority,                                 rt_uint32_t       tick) {     /* init thread list */     rt_list_init(&(thread->tlist)); 。。。。。。 } 此内容由EEWORLD论坛网友qi777ji原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 2019-04-23
  • 加入了学习《电子电路基础知识讲座》,观看 5.1.4 MOSFET的开关时间

  • 加入了学习《电子电路基础知识讲座》,观看 5.1.3 MOSFET的主要参数

  • 加入了学习《电子电路基础知识讲座》,观看 5.1.2 MOSFET的导通电阻

  • 加入了学习《电子电路基础知识讲座》,观看 5.1.1 电力MOSFET开关概述及工作原理

  • 回复了主题帖: 获奖名单:PI 邀您跟littleshrimp一起拆解小米最新二合一充电宝

    感谢EE 和 PI,麻烦兑换E金币{:1_102:}

  • 2019-04-22
  • 评论了课程: EEWORLD大学堂----功率与温度

    学习了

  • 评论了课程: EEWORLD大学堂----TI 高精度实验室 - 输入输出限制

    学习了!

最近访客

< 1/4 >

统计信息

已有38人来访过

  • 芯币:843
  • 好友:--
  • 主题:13
  • 回复:210
  • 课时:1
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言