Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
idle空闲线程
idlehook空闲钩子
NANO3.15 无法进入空闲线程钩子函数【已解决】
发布于 2022-03-03 17:25:21 浏览:1166
订阅该版
使用NANO 3.15 keil5 ARMV6编译 芯片STM32F767 使用CUBE生成硬件初始化。HAL库 使用线程和软件定时器正常。 目前想要加入空闲线程钩子函数来运行看门狗喂狗函数。 测试发现不进入钩子函数。 测试发现取消FINSH组件,就可以进入空闲线程钩子函数。 测试发现FINSH组件优先级设置和空闲线程一样也可以进入空闲线程钩子函数 请问怎么样可以一起使用 debug测试不进入rt_thread_idle_entry函数。 msh-》ps命令查看线程如下。 这不应该进不去空闲线程吧 ``` msh >ps thread pri status sp stack size max used left tick error ---------------- --- ------- ---------- ---------- ------ ---------- --- led 20 suspend 0x00000090 0x000000d0 69% 0x00000005 000 tshell 21 ready 0x00000060 0x00000400 56% 0x00000003 000 tidle 31 ready 0x00000048 0x00000100 28% 0x00000020 000 timer 4 suspend 0x00000070 0x000000a0 70% 0x00000009 000 main 10 close 0x00000054 0x00000200 54% 0x00000012 000 msh > ``` 主函数与钩子函数 ``` static void idle_hook(void) { /* 在空闲线程的回调函数里喂狗 */ //HAL_IWDG_Refresh(&hiwdg); rt_kprintf("idle thread feed the dog success!\n"); } /** * @brief The application entry point. * @retval int RT中的main线程也只是一个线程,你可以在该线程中开启自己的线程或者其他操作, 完成后即退出。也可以在该线程中最后做一个死循环来一直执行自己的某个任务。 都是可以的。 */ int main(void) { /*硬件初始化在rt_hw_board_init中完成*/ /*执行线程初始化*/ /* 设置空闲线程回调函数 */ rt_thread_idle_sethook(idle_hook); led_thread_init(); // soft_timer_init(); // mb1_thread_init(); // mb2_thread_init(); // User_Led_Init(); /*完成后退出主函数线程*/ } ``` 开启LED线程代码如下 ``` /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : * @brief : * @date : ****************************************************************************** * @attention * @author ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "rt_led.h" /* Private includes ----------------------------------------------------------*/ #include "board.h" #include "rtthread.h" #include "rt_led.h" /* Private define ------------------------------------------------------------*/ /* 线程配置 */ #define THREAD_PRIORITY 20//线程优先级 #define THREAD_TIMESLICE 0X05//线程时间片 #define THREAD_STACK_SIZE 0XD0//栈大小 /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* 定义线程控制块 */ static rt_thread_t led_thread = RT_NULL;//LED线程 /* Private function prototypes -----------------------------------------------*/ /** * @brief LED线程入口函数 * @param None * @retval None * @note */ static void led_thread_entry(void *parameter) { while (1) { HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); rt_thread_mdelay(500); HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); rt_thread_mdelay(500); } } int led_thread_init() { led_thread = /* 线程控制块指针 */ rt_thread_create( "led", /* 线程名字 */ led_thread_entry, /* 线程入口函数 */ RT_NULL, /* 线程入口函数参数 */ THREAD_STACK_SIZE, /* 线程栈大小 */ THREAD_PRIORITY, /* 线程的优先级 */ THREAD_TIMESLICE); /* 线程时间片 */ /* 启动线程,开启调度 */ if (led_thread != RT_NULL) { rt_thread_startup(led_thread); rt_kprintf("led created success.\n"); } else { rt_kprintf("led created failed.\n"); return -1; } return 0; } /* 导出到 msh 命令列表中 */ //MSH_CMD_EXPORT(led_thread_init,led thread init); ``` 硬件初始化如下 ``` void rt_hw_board_init(void) { /* * TODO 1: OS Tick Configuration * Enable the hardware timer and call the rt_os_tick_callback function * periodically with the frequency RT_TICK_PER_SECOND. */ /* MPU Configuration--------------------------------------------------------*/ MPU_Config(); /* Enable I-Cache---------------------------------------------------------*/ SCB_EnableICache(); /* Enable D-Cache---------------------------------------------------------*/ SCB_EnableDCache(); /* 1、系统、时钟初始化 */ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); // 初始化 HAL 库 /* Configure the system clock */ SystemClock_Config(); // 配置系统时钟 SystemCoreClockUpdate(); // 对系统时钟进行更新 /* 2、OS Tick 频率配置,RT_TICK_PER_SECOND = 1000 表示 1ms 触发一次中断 */ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/RT_TICK_PER_SECOND); /* 硬件 BSP 初始化*/ MX_GPIO_Init(); MX_DMA_Init(); //MX_IWDG_Init(); /* Call components board initial (use INIT_BOARD_EXPORT()) */ #ifdef RT_USING_COMPONENTS_INIT /* 调用组件初始化函数 (use INIT_BOARD_EXPORT()) */ rt_components_board_init(); #endif #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get()); #endif } ```
查看更多
yangjie
认证专家
2022-03-03
hello
是否打开了钩子函数功能
1
个回答
默认排序
按发布时间排序
撰写答案
登录
注册新账号
关注者
1
被浏览
1.2k
关于作者
用户名由3_15位
这家伙很懒,什么也没写!
提问
62
回答
229
被采纳
32
关注TA
发私信
相关问题
1
空闲线程调用LED闪烁钩子函数
2
程序跑飞了,msh发命令进不了shell 大循环,一直在idle里
3
RT-Thread Nano 支持CPU使用率计算吗?
4
SCB_CFSR_UFSR:0x02_INVSTATE
5
IDLE 线程总是显示超时状态,是什么原因?
6
idle线程资源回收
7
MSH运行hwtimer_test后把idle线程kill了?
8
idle线程中的rt_free
9
为什么RTT中空闲线程永远不能被挂起?
10
rt-4.1.0Bete版线程中使用mdelay后,线程结束时无法被回收?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
a1012112796
13
个答案
1
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部