ThreadX的Win32移植版本优化
由于近期项目需要,对Win32版本的ThreadX进行研究,发现官方提供的范例和移植存在如下三个方面问题
A.周期调度线程的时间间隔精度差
B.Demo线程1涉及到线程阻塞,如果线程0优先级低于线程1,系统卡死
C.线程调试缺少名称
对此进行了处理,分享一下处理过程,抛砖引玉
===========================================================
1. 测试工具 使用Win32的API获得高精度时间戳 QueryPerformanceFrequency QueryPerformanceCounter
范例: 获取高精度系统时间戳(单位:毫秒) LONGLONG hrt_get_ms(void) { LARGE_INTEGER freq; QueryPerformanceFrequency(&freq); LARGE_INTEGER temp; QueryPerformanceCounter(&temp); return 1000 * temp.QuadPart / freq.QuadPart; }
2. 使用多媒体定时器(修改文件tx_initialize_low_level.c) 该部分内容主要参考ucOS-III的Win32移植版本,代码详见“os_cpu_c.c”
改动为两处(详细代码见附件) A.新增多媒体定时器初始化函数(init_multimedia_timer) B.调整系统时钟周期调度函数(_tx_win32_timer_interrupt)
测试效果如下:
3. 新增线程名称功能 _tx_thread_stack_build函数增加如下代码
优化后线程界面:
4. Demo例程防止线程“饿死” 如上图,增加休眠函数
关键的两个文件代码详见附件
tx_initialize_low_level.c
(15.47 KB, 下载次数: 13)
排版有点乱,见谅。
|