心功能二级是什么意思| 懒惰是什么意思| 妊娠是什么意思| 零和游戏是什么意思| 什么药可以治早迣| 青梅竹马什么意思| 公开课是什么意思| 凌晨属于什么时辰| 梦见打麻将是什么意思| 冬天有什么水果| 儿童支气管炎吃什么药| 7月8日是什么星座| 蜂王浆有什么功效| 氨咖黄敏胶囊是治什么的| 佟丽娅什么民族| 早上起来眼皮肿是什么原因| 脂肪肝要注意什么| id医学上是什么意思| 丁香茶有什么作用和功效| 血管钙化是什么意思| 狗狗拉肚子是什么原因| 一年半载是什么意思| 鲁蛇是什么意思| 海鸥手表是什么档次| 三月份是什么星座的| pct偏高说明什么| 蛋白质阴性是什么意思| 牙龈肿痛吃什么药好| 鼻子旁边的痣代表什么| 慢性阑尾炎挂什么科| 一什么瓜地| 滑石粉是什么东西| 煮牛骨头放什么调料| 孜孜不倦是什么意思| 什么是佝偻病| 卸磨杀驴什么意思| 蛇胆疮是什么原因引起的| 肺和大肠相表里是什么意思| 腿外侧是什么经络| 浩特是什么意思| 玫瑰茄是什么东西| 盐为什么要加碘| 局长是什么级别干部| 28岁属相是什么生肖| 遗传物质是什么| 夏天吃什么水果| 双肺散在纤维灶是什么意思| 张国立的老婆叫什么名字| 什么是性高潮| 猴子的尾巴像什么| 晚上9点半是什么时辰| qq黄钻有什么用| 吃惊的近义词是什么| 吉祥物是什么生肖| cbd是什么| 不感冒是什么意思| 背厚是什么原因造成的| 水痘挂什么科| 莫非的近义词是什么| 阴煞是什么意思| 吃什么营养神经| 佐餐是什么意思| 护理部主任是什么级别| 紫色属于五行属什么| 脑血管挂什么科| 什么情况下会缺钾| 金箔是什么| 德国人是什么人种| amv是什么意思| 到底为了什么| 吃什么助勃药能硬| 青蛙属于什么类动物| 白细胞低吃什么药可以增加白细胞| 天天吃玉米有什么好处和坏处| 手上的纹路代表什么| 例假一个月来两次是什么原因| 微循环是什么意思| 硬膜囊前缘受压是什么意思| 二次元文化是什么意思| 肝火旺盛失眠吃什么药| 行房时间短吃什么药| nag是什么意思| 养胃吃什么好| 刀口力念什么| 小肚子疼是什么原因引起的| 怀孕前三个月吃什么好| 一什么村庄| 祭祀什么意思| 嗓子不舒服吃什么消炎药| 满月脸是什么意思| 为什么不建议小孩吃罗红霉素| 心脏彩超可以检查什么| 风调雨顺是什么生肖| 头痒是什么原因| 偏食是什么意思| 舍本逐末是什么意思| 舌苔厚白吃什么食物好| 脾肺两虚吃什么中成药| 肌酐低是什么问题| 半夜腿抽筋是什么原因| 腿抽筋挂什么科室| 吃什么降糖最快| 长痔疮有什么症状| 偏头痛什么原因引起| 皮肤的八大功能是什么| 羽衣甘蓝是什么| 荠菜长什么样| 阑尾炎的症状是什么| 后背长痘是什么原因| 遇上方知有什么意思| 胆囊炎输液用什么药| emo是什么意思| 心悸症状是什么感觉| 异常灌注是什么意思| 男生小肚子疼是什么原因| 7.6是什么日子| 前额头疼是什么原因引起的| 5月24号是什么日子| 23度穿什么衣服合适| 感冒口苦是什么原因| 眉毛里有痣代表什么| 荤菜是什么意思| 铁树开花什么样| 护理专业是干什么的| 吃什么补肾最快最好| 阳虚火旺吃什么中成药| 舌头发白是什么原因| 洛阳有什么大学| 海龟是什么动物| 舌头下面的筋叫什么| reebok是什么牌子| 7月15号是什么星座| 男人射的快是什么原因| 塔利班是什么组织| 胎儿肾盂分离是什么意思| 什么时间喝牛奶最佳| 胃酸胃胀反酸水吃什么药| 12月6号是什么星座| 肩膀上的肌肉叫什么| 黑色鸟是什么鸟| 嘴边长痘痘是什么原因| 胎盘1级什么意思| buffalo是什么牌子| 王八看绿豆是什么意思| 烟酰胺有什么作用| 孩子生化了是什么意思| 猪与什么属相相冲| 4月14日是什么星座| 三焦不通吃什么中成药| 恭请是什么意思| 宫颈多发纳囊什么意思| 可乐喝多了有什么危害| spf50是什么意思| 梦见生了个孩子是什么意思| 癌胚抗原偏高说明什么| 黄忠字什么| 什么睡姿对髋关节好| 花甲炒什么配菜好吃| 7月6号是什么星座| 上校相当于政府什么官| 00年是什么命| 今天吃什么菜| 献血和献血浆有什么区别| 怀孕一个月吃什么对宝宝发育好| 50pcs是什么意思| 中暑什么症状| 木瓜是什么季节的水果| 孕期什么时候补铁| 自在什么意思| 祎字五行属什么| 心脏舒张功能减低是什么意思| 268是什么意思| mg什么意思| 2月29号是什么星座| 保险属于什么行业| 锦纹是什么中药| 摩羯女和什么星座最配| 夜晚的星星像什么| 梦见水代表什么| 黄体破裂什么症状| 人加三笔是什么字| 梨不能和什么一起吃| 热泪盈眶的盈是什么意思| 爸爸的姐姐叫什么| 甲状腺是什么病严重吗| 七月二十四是什么星座| 鸡鸡长什么样| 什么是熊猫血型| 脑梗什么原因导致的| 将军是指什么生肖| 脸基尼是什么意思| 面粉做什么好吃又简单| 燚是什么意思| 梦见和死去的亲人吵架是什么意思| 时光荏苒岁月如梭是什么意思| 蓝莓什么季节成熟| 黄精能治什么病| 处女座的幸运色是什么| 炎症是什么病| clarks是什么牌子| 驱除鞑虏是什么意思| 婴儿泡奶粉用什么水好| 1936年属什么生肖| 干戈是什么意思| 紧张性头痛吃什么药| 10岁属什么| 偏头痛是什么原因引起的| 什么车不能坐| 男孩什么时候开始发育| 沙门氏菌用什么药| 糖尿病人吃什么水果| 喝酒吃头孢有什么反应| 蝎子怕什么| 肠道有息肉有什么症状| 腋毛上有白色附着物是什么| 五红汤什么时候喝最好| 卢字五行属什么| 2月18号什么星座| 脂膜炎是什么病| 透明隔间腔是什么意思| 甲亢去医院挂什么科| 苏打水喝了有什么好处| gmp认证是什么意思| 甲亢吃什么好的更快| 吃生蚝有什么好处和坏处| cems是什么意思| 什么大什么粗| 子宫有问题有什么症状| 淋巴细胞绝对值偏低说明什么| 肿瘤标志物是什么| 火烈鸟为什么是红色的| aa是什么| 在什么前面用英语怎么说| 霉菌性阴道炎用什么药好| 爱马仕为什么要配货| 知柏地黄丸有什么功效| 急性肠胃炎是什么引起的| 美国报警电话为什么是911| 窦性早搏是什么意思| 脸上肉跳动是什么原因| 睡醒手麻是什么原因引起的| aquascutum是什么牌子| 6月23号什么星座| 阴差阳错代表什么生肖| 柚子是什么季节| 88年五行属什么| 喝什么酒对身体好| 印度人口什么时候超过中国| 义子是什么意思| 什么药可以降尿酸| 狐狸和乌鸦告诉我们什么道理| 怎么知道自己对什么过敏| 乌鸡白凤丸男性吃治疗什么| 林子祥属什么生肖| 走路脚后跟疼是什么原因| 瞽叟是什么意思| 就让我爱你把你捧在手心里是什么歌| 3月23日什么星座| 脂肪分解成什么| 7月初7是什么日子| 腹胀吃什么药| 梦见女鬼是什么意思| 碍事是什么意思| 宫颈机能不全是什么意思| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? STM32 ? NUCLEO-U083RC学习历程35-使用任务调度实现不同任务输出

共2条 1/1 1 跳转至

NUCLEO-U083RC学习历程35-使用任务调度实现不同任务输出

高工
2025-08-04 19:42:45     打赏
百度 茶与富士山都是静冈县的名片,富士山下就是静冈绵延数十里的茶园。

在C语言里,任务调度指的是对多个任务(也被叫做线程或者进程)的执行顺序进行管理,以此来达成高效利用系统资源的目的。

下面为你详细介绍任务调度的相关概念和实现方法。

一:任务调度的概念思想:

抢占式调度:在这种调度方式下,操作系统能够依据任务优先级,强行暂停当前正在执行的任务,转而执行其他任务。

非抢占式调度:采用这种调度方式时,任务只有在主动放弃 CPU 控制权的情况下,其他任务才有机会执行。

实时调度:实时调度的核心是保证任务能在严格的时间限制内完成,它又可以细分为硬实时调度和软实时调度。

优先级调度:优先级调度会为每个任务分配一个优先级,系统会优先执行优先级较高的任务。

二:任务调度的关键要点

上下文切换:在任务切换时,需要保存当前任务的状态(例如寄存器值),并恢复下一个任务的状态。

临界区保护:对于共享资源,要使用互斥锁、信号量等机制来避免竞态条件。

任务同步:可以通过信号量、事件标志组等方式实现任务间的同步。

堆栈管理:每个任务都有自己独立的堆栈,必须确保堆栈大小足够,防止溢出。

常用的任务调用有Free Rtos,OS,RT-threard等等实时操作系统专为嵌入式系统设计,提供了强大的任务调度功能,

这里和大家分享一个简单任务调度器。创建任务队列。然后按照一定时间间隔来处理任务。

三:定时器6实现基本的任务调度

实现任务调度的编写流程如下所示:

1:使能定时器6时钟。

2:初始化定时器,配置ARR,PSC,中断时间1ms。

3:开启定时器6中断,配置NVIC中断优先级。

4:使能定时器6,定时器开始功能。

5: 编写中断服务函数。

这里定时器的中断频率计算公式如下:Tout(中断触发时间)=(ARR+1)(PSC+1)/定时器的时钟频率

四:程序编写过程如下所示:

4.1 定时器6初始化

void MX_TIM6_Init(void)
{

  /* USER CODE BEGIN TIM6_Init 0 */

  /* USER CODE END TIM6_Init 0 */

  TIM_MasterConfigTypeDef sMasterConfig = {0};

  /* USER CODE BEGIN TIM6_Init 1 */

  /* USER CODE END TIM6_Init 1 */
  htim6.Instance = TIM6;
  htim6.Init.Prescaler = 1599;
  htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim6.Init.Period = 9999;
  htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN TIM6_Init 2 */
       HAL_TIM_Base_Start_IT(&htim6);
  /* USER CODE END TIM6_Init 2 */

}

4.2  编写任务标记回调函数

void Task_Marks_Handler_Callback(void)
{
	char i;
	for(i=0; i<Tasks_Max; i++)
	{
		if(Task_Comps[i].TIMCount)    /* If the time is not 0 */
		{
			Task_Comps[i].TIMCount--;  /* Time counter decrement */
			if(Task_Comps[i].TIMCount == 0)  /* If time arrives */
			{
				/*Resume the timer value and try again */
				Task_Comps[i].TIMCount = Task_Comps[i].TRITime;  
				Task_Comps[i].Run = 1;    /* The task can be run */
			}
		}
	}
}

4.3 编写任务处理回调函数

void Task_Pro_Handler_Callback(void)
{
	char i;
	for(i=0; i<Tasks_Max; i++)
	{
		if(Task_Comps[i].Run) /* If task can be run */
		{
			Task_Comps[i].Run = 0;    /* Flag clear 0 */
			Task_Comps[i].TaskHook();  /* Run task */
		}
	}
}

4.4分别在定时器6的定时器回调函数 和主程序中调用上述两个函数

定时器回调函数添加下述代码

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* USER CODE BEGIN Callback 0 */

  /* USER CODE END Callback 0 */

  /* USER CODE BEGIN Callback 1 */
  if (htim->Instance == TIM6) {

		Task_Marks_Handler_Callback();
  }
  /* USER CODE END Callback 1 */
}

在程序中添加任务处理部分

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

		Task_Pro_Handler_Callback();
  }

4.5 添加两个不同的任务,如下所示:分别为简单的LED闪烁和串口输出功能

4.5.1定义任务名称:

static TASK_COMPONENTS Task_Comps[]=
{
    {0, 1000,1000, task_1000ms},		          /* task 1 Period: 1000ms */
  {0, 500,500,   task_500ms},		            /* task 2 Period: 500ms */
  {0, 10,10,   task_10ms},		            /* task 3 Period: 10ms */
};

char Tasks_Max = sizeof(Task_Comps)/sizeof(Task_Comps[0]);

4.5.2 实际任务如下所示:

char buffer[50] ={"STM32 U083 test  /r/n"};
//========================================================================
// 函数: void task_1000ms(void)
// 描述: 1000ms 任务.
// 参数: None.
// 返回: None.
// 版本: V1.0, 2025-08-04
//========================================================================
void task_1000ms(void)
{
  HAL_UART_Transmit_DMA(&huart2, (uint8_t *)buffer, 50);
}	
//========================================================================
// 函数: void task_500ms(void)
// 描述: 500 任务.
// 参数: None.
// 返回: None.
// 版本: V1.0, 2025-08-04
//========================================================================
void task_500ms(void)
{
   HAL_GPIO_TogglePin(GPIOA ,GPIO_PIN_5);
}

五:测试图片:

123456.jpg

实际测试需求,任务最小扫描周期为1ms。

本贴只是开启了两个简单的任务,稍后添加其他任务处理。




关键词: NUCLEO-U083RC     任务     调度    

院士
2025-08-04 11:32:22     打赏
2楼

看上去这颗U0系列的MCU在使用上,与其它MCU差不多啊


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
早早孕试纸什么时候测最准 睾丸痒是什么原因 梦见滑雪是什么意思 打封闭针有什么坏处 眼白发红是什么原因
小姑娘月经推迟不来什么原因 全麻对身体有什么危害 月经量突然减少是什么原因 全国劳动模范有什么待遇 甲状腺是什么病
夜间尿多是什么原因 眩晕去医院挂什么科室 甲状腺彩超挂什么科 螺旋杆菌阳性是什么病 b12有什么作用
汗味酸臭是什么原因 多多益善的意思是什么 疏肝理气喝什么茶 智商135是什么水平 身上长红疙瘩很痒是什么原因
女生做彩超是检查什么hcv8jop4ns8r.cn 身体欠佳什么意思hcv9jop5ns3r.cn 睾丸炎用什么药hcv9jop1ns5r.cn 未退化胸腺是什么意思0735v.com 艾滋病早期有什么症状hcv9jop5ns4r.cn
武林外传的客栈叫什么hcv8jop1ns4r.cn 糖筛和糖耐有什么区别hcv7jop6ns2r.cn 三凹征是什么bfb118.com 咳必清又叫什么hcv9jop0ns0r.cn 三天不打上房揭瓦的下一句是什么hcv9jop5ns9r.cn
激情什么意思zhongyiyatai.com 扁桃体切除有什么坏处hcv8jop0ns8r.cn 梦到鱼是什么意思hcv7jop6ns2r.cn 92年出生属什么hcv9jop7ns2r.cn 基友是什么意思hcv9jop4ns1r.cn
惠字五行属什么beikeqingting.com 胃炎吃什么最好hcv8jop6ns4r.cn 呢是什么意思hcv9jop4ns0r.cn 白羊座前面是什么星座hcv7jop9ns6r.cn 医学是什么hcv8jop7ns1r.cn
百度