static void default_task_entry(void *parameter);static void lvgl_task_entry(void *parameter);/* ...
原因:idle 线程栈溢出导致,idle默认的栈太小。 解决方法 打开RT-Thread ENV 工具,输入 menuconfig,加大idle线程的栈大小,默认的栈只有256太小,可以改为1024或更大,如:2048,验证后正常了。 总结 因为PM组件执行的线程环境是idle线程,模式切换、功耗管理等需要一定的栈空间,默认idle栈空间256过小。 PM组件使用起来...
finsh_set_device( FINSH_DEVICE_NAME );#endif/* initialize timer */rt_system_timer_init();/* initialize timer thread */rt_system_timer_thread_init();/* initialize idle thread */rt_thread_idle_init();/* start scheduler */rt_system_scheduler_start();/* never reach here */return; } ...
但是呢,因为 list_thread 或 ps 两条命令是在 tshell 线程执行的,所以 tshell 线程肯定是 running ;idle 线程不可能被挂起,肯定显示的是 ready;其它线程可能会出现 ready,但是多数时候是 suspend。但是这并不表示其它线程一直是 suspend 不被调度了。 Q11. 定时器可以执行长时间操作? 如上所说,rt-thread 中有...
rt-thread 开启SMP能正常运行 coremark、内存读写等跑分测试达到相同等级硬件平台的水平 移植步骤 一、参考合适的BSP 选择参考bsp目录下qemu-vexpress-a9的代码,因为cortex-A9体和cortex-A7差异不大,而且这个bsp默认开启了SMP,对移植有一定的价值。 这个bsp 是在qemu下运行的,外设相关的依赖比较少,可以避免一些坑。
void rt_thread_idle_sethook(void (*hook)(void));复制代码 当空闲线程运行时会自动执行设置的钩子...
voidthread_entry(void* paramenter) { while(1) { /* 等待事件的发生 */ /* 对事件进行服务、进行处理 */ } } 从程序中可以看出,一般通过while(1) 实现的是无限循环模式,如果一个线程中的程序陷入了死循环操作,那么比它优先级低的线程都将不能够得到执行。
rt-thread 内核定义了软件定时器,和硬件定时器不同,硬件定时器需要占用一个定时器外设,还有各种比较、捕获等功能。软件定时器仅仅是简单的设定一个时间,时间 timeout 的时候执行我们设定的回调函数。 rt-thread 定义的软件定时器还细分两种,“硬定时器” “软定时器”,前一种是在 SysTick 中断中执行回调函数的,...
error 列的线程错误没有多少参考价值,0 是正常,-2 表示超时,执行一个rt_thread_mdelay就变 -2 了。但并不表示有错误。目前还没有看到赋值有其它错误值的代码。 status 列代表当前线程状态。但是呢,因为 list_thread 或 ps 两条命令是在 tshell 线程执行的,所以 tshell 线程肯定是 running ;idle 线程不可能...
error 列的线程错误没有多少参考价值,0 是正常,-2 表示超时,执行一个rt_thread_mdelay就变 -2 了。但并不表示有错误。目前还没有看到赋值有其它错误值的代码。 status 列代表当前线程状态。但是呢,因为 list_thread 或 ps 两条命令是在 tshell 线程执行的,所以 tshell 线程肯定是 running ;idle 线程不可能...