ThreadX笔记
创始人
2024-03-21 20:35:12
0

1、任务优先级

任务优先级,数值越小优先级越高

2、ThreadX专用任务创建函数

void  tx_application_define(void *first_unused_memory)
  • 该函数需要用户自己定义,ThreadX启动会自动调用该函数,用户可以在该函数中创建自己的任务。
  • first_unused_memory,未使用的地址空间,方便用户创建自己的动态内存管理。ThreadX提供了给用户创建内存池、内存块等进行动态内存分配的功能。

3、ThreadX系统没有定义空闲线程

  • 如需要空闲线程需要用户自己定义
    ThreadX内核没有空闲任务,那么没有任务执行的时候它都在干什么:
    ports/cortex_m4/gnu/src/tx_thread_schedule.S文件中有定义:
@    /* The following is the idle wait processing... in this case, no threads are ready for execution and the
@       system will simply be idle until an interrupt occurs that makes a thread ready. Note that interrupts
@       are disabled to allow use of WFI for waiting for a thread to arrive.  */
@
__tx_ts_wait:CPSID   i                                       @ Disable interruptsLDR     r1, [r2]                                @ Pickup the next thread to execute pointerSTR     r1, [r0]                                @ Store it in the current pointerCBNZ    r1, __tx_ts_ready                       @ If non-NULL, a new thread is ready!

没有任务时ThreadX都在这里执行死循环。

4、ThreadX内核移植中__RAM_segment_used_end__的作用

  • __RAM_segment_used_end__的含义就是当前已经使用RAM区的末尾地址。
  • 其值会通过void tx_application_define(void *first_unused_memory)函数的first_unused_memory参数传递给用户使用。

5、使用GCC移植需要在链接脚本中定义__RAM_segment_used_end__

  /* User_heap_stack section, used to check that there is enough RAM left */._user_heap_stack :{. = ALIGN(8);PROVIDE ( end = . );PROVIDE ( _end = . );. = . + _Min_Heap_Size;. = . + _Min_Stack_Size;. = ALIGN(8);__RAM_segment_used_end__ = .;} >RAM

6、修改系统时钟和OS Tick

在Threadx移植文件下ports/cortex_m4/gnu/src/tx_initialize_low_level.s中定义:

SYSTEM_CLOCK      =   180000000
SYSTICK_CYCLES    =   ((SYSTEM_CLOCK / 1000) -1)
  • SYSTEM_CLOCK, 系统时钟180MHZ
  • SYSTICK_CYCLES 后面的1000表示OS Tick时钟为1000HZ,也就是OS Tick是1ms

7、临界段保护—中断锁

#define TX_INTERRUPT_SAVE_AREA  unsigned int interrupt_save;#define TX_DISABLE                              interrupt_save =  __disable_interrupts();
#define TX_RESTORE                              __restore_interrupts(interrupt_save);

使用方法:

TX_INTERRUPT_SAVE_AREA  TX_DISABLE                              
xxx 临界段
TX_RESTORE                              

8、临界段保护——任务锁

一般RTOS任务锁实现有两种方法:

  • 调度器加锁,给调度器加锁的话,就无法实现任务切换,高优先级任务也就无法抢占低优先级任务的执行,同时高优先级任务也是无法向低优先级任务切换的uCos、RT-Thread等就是用这种方式实现。
  • 关闭给OS提供Tick的定时器,没有心跳系统就不能进行调度工作。

但ThreadX有更好的实现方式:抢占阈值抢占阈值是ThreadX独有的高级功能。

  • 抢占阈值允许任务指定禁止抢占的优先级上限。优先级高于上限的任务仍可以执行抢占,但不允许优先级低于上限的任务执行抢占
  • 可以将抢占阈值设置为0来禁止所有任务抢占

比如一个任务的优先级是 5,我们希望执行某代码期间禁止优先级 0-4 的任务抢占:

TX_THREAD my_thread; 
UINT my_old_threshold; 
UINT status; status = tx_thread_preemption_change(&my_thread, 0, &my_old_threshold); 用户可以在此处执行关键代码。 status = tx_thread_preemption_change(&my_thread, 5, &my_old_threshold); 

9、ThreadX 动态加载

ThreadX支持动态加载App执行,类似安卓App
ThreadX动态APP玩法调用主程序的API也很方便,这样APP就可以仅写应用代码即可,驱动之类的都在主程序实现:
https://www.armbbs.cn/forum.php?mod=viewthread&tid=112170&highlight=threadx

10、绝对延时和相对延时

相对延时:

tx_thread_sleep(100); 

通过相对延时延时实现绝对延时:

static void TaskFunc(ULONG thread_input) 
{ UINT delay, nextTime; const UINT frequency = 200; /* 获取 frequency 个时钟节拍后的时间 */ nextTime= tx_time_get() + frequency; while(1) { LedToggle(); delay = nextTime - tx_time_get(); nextTime += frequency ; if(delay <= frequency) { tx_thread_sleep(delay); } } 
} 

相关内容

热门资讯

食品干燥剂 食品干燥剂想放到食品里(例如茶叶,果珍,饼干之类)用来吸潮的,淘宝上看到有硅胶和竹炭两种,不知道哪种...
生活中的道德故事作文6oo字 生活中的道德故事作文6oo字生活中的道德故事作文6oo字我们每个人无时无刻都在演绎着大大小小的道德故...
冒险岛出了什么新职业! 冒险岛出了什么新职业!呵呵,建议不要玩,海盗是典型的招帅攻击低的。如果只想玩玩可以试试,前面还是比较...
第五人格医生清雅白皮肤怎么得 ... 第五人格医生清雅白皮肤怎么得 医生清雅白时皮肤名称 医生清雅白 获取方法 推理之径...
花千骨12集剧情 花千骨12集剧情自己上网搜 我们讲的不好
《灌篮高手》神奈川组个明星队可... 《灌篮高手》神奈川组个明星队可否与山王一战?个人觉得加个南烈有机会,一个肘击泽北挂了,再一个肘击深津...
安迪的个人简介是怎样的呢? 安迪的个人简介是怎样的呢? 安迪,女,是小说以及同名电视剧《欢乐颂》中的角色,在电视剧中由刘涛饰演,...
中国古代“三大武圣”一个是关羽... 中国古代“三大武圣”一个是关羽,另两个人是谁姜子牙、岳飞
全民公敌好看吗 全民公敌好看吗电影属于娱乐业,和博彩,桑拿,搓麻,胸推同一级别。想体验?一定得选威尔史密斯的电影 
别人说你是孙子我是爷怎么怼 别人说你是孙子我是爷怎么怼这种言语攻击是不礼貌和不尊重人的,应该避免用来回应任何评论或言语。您可以考...
四大文明古国中,为什么只有古巴... 四大文明古国中,为什么只有古巴比伦王国彻底消失了?地理位置所影响,古巴比伦王国所在的地方经常发洪水,...
女人身份尊贵的称呼 女人身份尊贵的称呼是身份尊贵的称呼,一般是夫人或者是 女士夫人或者先生结婚了的女人称女士应该比较尊贵...
电梯漏水后存在的安全隐患 电梯漏水后存在的安全隐患 电梯漏水后存在的安全隐患:1、漏电危险。电梯底坑铺设有110V安全回路电路...
林允冯绍峰为什么分手 林允冯绍峰为什么分手林允和冯绍峰不太合适啊,冯绍峰和赵丽颖很幸福啊
密室逃脱23无限体力兑换码是 密室逃脱23无限体力兑换码是VIP888。根据查询密室逃脱23官网显示,密室逃脱野茄23无限体力兑尺...
戒指男孩带龙事什么意思 戒指男孩带龙事什么意思 如果是这样,只有肖鸡人佩戴这样的戒指可获最吉。因为地支辰酉六合所致。当然...
英雄联盟之谁与争锋伊琴的原型是... 英雄联盟之谁与争锋伊琴的原型是谁讲的是若风和miss我估计是小苍MM,但是不确定,最近我也在看这本书...
推荐几部儿童看的英语电影 推荐几部儿童看的英语电影适合儿童看的英语电影小鹿斑比(我首推):讲父子情深的   人猿泰山(其次) ...
问道的寒假活动在哪领? 问道的寒假活动在哪领?揽仙镇领日常任务的那个问道活动大使寒假活动是怎么样现在最好的是“祭拜祖先”任务...
宝宝双色长袖毛衣织发 宝宝双色长袖毛衣织发一样的呀,织到你想织另外一个色的时候就换线,到一点距离又用回前面那种色的线,就行...