一:threadx 开场白
由于工作的原因,涉及到了threadx操作系统,其实我个人觉得,threadx和ucosII十分的相识,只是threadx用于商业性质,而不像ucosII那样提供了源代码。
在消息队列,消息邮箱,事件标志组,信号量与ucosII有相之处。我个人ucosII源代码自己研究过,对ucos的使用知道些。但是在设计多thread的能力还是欠缺,多个thread之间高效,简单的数据通信方面还有待提高。
Threadx是啥东西,是OS,是OS了事情就好办了,OS主要是用来做使用的?主要是用来在单CPU上面模拟多CPU,从而达到对多个task实时调度。同时提供多任务之间资源的同步与互斥使用及任务之间数据的传递。
其实例代码如下:main.c
Task创建函数:
UINT tx_thread_create(
TX_THREAD *thread_ptr,
CHAR *name_ptr, VOID (*entry_function)(ULONG),
ULONG entry_input,
VOID *stack_start,
ULONG stack_size,
UINT priority,
UINT preempt_threshold,
ULONG time_slice,
UINT auto_start)
其中VOID (*entry_function)(ULONG)为任务处理函数。其task的创建各个OS之间基本类。没有什么好说的,对于用户来说主要是:编写VOID (*entry_function)(ULONG)任务处理函数。其中threadx任务调度方式为:基于时间片。在创建任务时可以将多个任务的优先级priority设置为相同不会影响threadx对task的调度。
但是由于基于时间片的调度方式,因此每一个task必须在必要的时候释放对cpu的独占使用。threadx操作系统其方式有:tx_thread_sleep()和tx_thread_relinquish()
个人工作中使用到的API函数包括如下:互斥信号量,计数信号量,消息队列,定时器.事件组。其中Event Flags Group Services最为复杂,主要用于多任务之间的同步使用。
二:arm中断及中断与任务之间的数据同步
在arm的裸机代码中我们,经常会看到如下类的代码:
B armExceptionHandlerUndefinedAsm ; Undefined handler
B armExceptionHandlerSwiAsm ; Software interrupt handler
B armExceptionHandlerPrefetchAsm ; Prefetch exception handler
B armExceptionHandlerAbortAsm ; Abort exception handler
B armExceptionHandlerReservedAsm ; Reserved exception handler
B _irq_handler ; IRQ interrupt handler
B _fiq_handler ; FIQ interrupt handler
上面描述了arm中的7中类型的异常处理汇编代码,一般主要关注的是IRQ和FIQ这俩种中断。
下面看看irq的处理函数。
IMPORT _tx_thread_context_save
IMPORT _tx_thread_context_restore
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-40032-1.html
坚决击沉
恬不知耻