ucos练习

news2025/4/26 11:03:55

文章目录

  • 简单实验
    • 在开始任务中创建优先级不同的多个任务
    • 使用信号量进行同步
  • UCOS 硬件实现
      • 任务管理
      • 任务调度

zynq + ucos

简单实验

在开始任务中创建优先级不同的多个任务

int main()
{
    UCOSStartup(MainTask);
    return 0;
}

void  MainTask (void *p_arg)
{
    OS_ERR       os_err;
    UCOS_Print ("Hello world from the main task\r\n");
    OSTaskCreate(&AppTask1_TCB,
				  "AppTask1",
				  AppTask1,
				  (void *)0,
				  3,
				 &AppTask1_Stk[0],
				  0,
				  1024,
				  0,
				  0,
				  DEF_NULL,
				 (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
				 &os_err);

    OSTaskCreate(&AppTask2_TCB,
   				  "AppTask2",
   				  AppTask2,
   				  (void *)0,
   				  10,
   				 &AppTask2_Stk[0],
   				  0,
   				  1024,
   				  0,
   				  0,
   				  DEF_NULL,
   				 (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
   				 &os_err);

    while (DEF_TRUE) {
        OSTimeDlyHMSM(0, 0, 10, 0, OS_OPT_TIME_HMSM_STRICT, &os_err);
        UCOS_Print("MainTask,prio is 5\r\n");
    }
}

static void  AppTask1 (void *p_arg)
{
	OS_ERR       os_err;
	p_arg = p_arg;
	while(DEF_TRUE)
	{
		UCOS_Print ("AppTask1,prio is 3\r\n");
		OSTimeDlyHMSM(0, 0, 0, 100, OS_OPT_TIME_HMSM_STRICT, &os_err);
	}
}

static void  AppTask2 (void *p_arg)
{
	OS_ERR       os_err;
	p_arg = p_arg;
	while(DEF_TRUE)
	{
		UCOS_Print ("AppTask2,prio is 10\r\n");
		OSTimeDlyHMSM(0, 0, 0, 100, OS_OPT_TIME_HMSM_STRICT, &os_err);
	}
}

在这里插入图片描述
可以看出,优先级数值越小,优先级越高(最先运行)。

使用信号量进行同步

void  MainTask (void *p_arg)
{
    OS_ERR       os_err;

    g_uiTimeCnt = 0;

    OSSemCreate(&g_timer_sem,"g_timer_sem",(OS_SEM_CTR)0,&os_err);
    OSSemCreate(&g_task1_sem,"g_task1_sem",(OS_SEM_CTR)0,&os_err);
    OSSemCreate(&g_task2_sem,"g_task2_sem",(OS_SEM_CTR)0,&os_err);

    OSTaskCreate(&TimerTask_TCB,"TimerTask",TimerTask,(void *)NULL,10,&TimerTask_Stk[0],
    				  0,1024,0,0,DEF_NULL,(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),&os_err);

    OSTaskCreate(&AppTask1_TCB,"AppTask1",AppTask1,(void *)NULL,20,&AppTask1_Stk[0],
				  0,1024,0,0,DEF_NULL,(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),&os_err);

    OSTaskCreate(&AppTask2_TCB,"AppTask2",AppTask2,(void *)NULL,30,&AppTask2_Stk[0],
    				  0,1024,0,0,DEF_NULL,(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),&os_err);

    while (DEF_TRUE) {
        OSTimeDlyHMSM(0, 0, 10, 0, OS_OPT_TIME_HMSM_STRICT, &os_err);
    }
}

static void  TimerTask (void *p_arg)
{
	OS_ERR       os_err;
	static u32 s_dataRead_pre;
	static u32 s_dataRead;
	static u32 s_cnt = 0;

	p_arg = p_arg;
	while(DEF_TRUE)
	{
		g_uiTimeCnt++;

		s_dataRead_pre = s_dataRead;
		s_dataRead = EmcRead(0x0004,DSP_CE);
		g_uiTimeSubAy[s_cnt] = s_dataRead - s_dataRead_pre;
		s_cnt++;
		if(s_cnt>=1024)
		{
			s_cnt = 0;
		}

		OSSemPost(&g_timer_sem,OS_OPT_POST_1,&os_err);
		OSTimeDlyHMSM(0, 0, 0, 1, OS_OPT_TIME_HMSM_STRICT, &os_err);
	}
}

static void  AppTask1 (void *p_arg)
{
	OS_ERR os_err;
	CPU_TS ts;
	u32    uiData;

	p_arg = p_arg;
	while(DEF_TRUE)
	{
		OSSemPend(&g_timer_sem,0,OS_OPT_PEND_BLOCKING,&ts,&os_err);
		uiData = EmcRead(0xFFFF,DSP_CE);
		OSSemPost(&g_task1_sem,OS_OPT_POST_1,&os_err);
		OSTimeDlyHMSM(0, 0, 0, 1, OS_OPT_TIME_HMSM_STRICT, &os_err);
	}
}

static void  AppTask2 (void *p_arg)
{
	OS_ERR os_err;
	CPU_TS ts;
	p_arg = p_arg;
	while(DEF_TRUE)
	{
		OSSemPend(&g_task1_sem,0,OS_OPT_PEND_BLOCKING,&ts,&os_err);
		EmcWrite(0xFFFF,0x12345678,DSP_CE);
//		OSSemPost(&g_task2_sem,OS_OPT_POST_1,&os_err);
		OSTimeDlyHMSM(0, 0, 0, 1, OS_OPT_TIME_HMSM_STRICT, &os_err);
	}
}

UCOS 硬件实现

《实时操作系统任务调度算法的硬件实现》

任务管理

在这里插入图片描述

任务调度

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1120116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

42905-2023 碳化硅外延层厚度的测试 红外反射法

1 范围 本文件描述了采用红外反射法测试碳化硅外延层厚度的方法。 本文件适用于 n 型掺杂浓度大于110⁸ cm⁻ 的碳化硅衬底上同质掺杂浓度小于110⁵ cm⁻ 的 同质碳化硅外延层厚度的测试,测试范围为3μm~200μm。 2 规范性引用文件 下列文件中的内容…

Go并发编程之一

一、前言 新年学新语言Go系列文章已经完结,用了最简单的例子去了解Go基础语法,但Go最牛B的是它对并发的友好支持,每一门语言都有它自己独特的优势,如Java适合大型工程化项目,Python适合做数据分析及运维脚本&#xff0…

我单方面宣布:腾讯云服务器优惠价格(双11特价)

2023腾讯云双十一服务器优惠价格表多少钱一年?轻量服务器2核2G3M、2核2G4M、2核4G5M、4核8G12M、8核16G18M、16核32G28M和云服务器CVM标准型S5实例优惠价格,腾讯云百科今年双11服务器价格会在当前的价格基础上享受个9折优惠,可领券 https://c…

42911-2023 碳纤维增强复合材料 密封压力容器加速吸湿和过饱和调节方法

1 范围 本文件描述了碳纤维增强复合材料加速吸湿和过饱和调节的方法,该方法在温度高于100 ℃但低 于试验材料玻璃化转变温度(T) 的饱和水蒸气密封压力容器中进行。 本文件适用于玻璃化转变温度大于150℃的热固性碳纤维增强复合材料。热塑性碳纤维增强复合 材料也…

YOLOV8目标检测——模型训练

文章目录 1下载yolov8([网址](https://github.com/ultralytics/ultralytics))2用pycharm打开文件3训练自己的YOLOV8数据集4run下运行完了之后没有best.pt文件5导出为onnx文件 本章内容主要解决如何训练自己的YOLOV8模型。 1下载yolov8(网址&a…

17.1 隐藏执行CMD命令

本章内容涉及使用Socket API和CMD命令行工具实现本地CMD命令执行、无管道正向CMD和无管道反向CMD三种功能。执行本地CMD实现使用CreateProcess函数创建一个新的CMD进程,并将标准输入、输出和错误输出重定向到当前进程的标准输入、输出和错误输出。无管道正向CMD和无…

vue阻止浏览器刷新,达到业务逻辑的实现,在Ts+vue中使用组件内路由守卫

vue阻止浏览器刷新,达到业务逻辑的实现 有类似的需求,页面存在编辑框或者文本输入或者其他,当用户进入编辑状态时,如果没有点击保存就离开页面,需弹窗提示。chrome浏览器手动刷新时如果处于编辑状态也弹出相应的阻止功…

如何处理前端文件上传?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

如何实现前端实时通信(WebSocket、Socket.io等)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

问题记录:GPU显卡提高后,代码总体运行效率没有提高

问题:GPU显卡提高后,代码总体运行效率没有提高 原先显卡NIVIDA T400换成NVIDIA RTX A4000,CUDA核心(物理GPU线程单位)从三百多提升到了六千多,但是程序总体运行的时间没有变化。 原因分析 显卡没用上或者…

Webots将节点复制到不同工程中

我们要将A工程的节点复制到B工程中。 先将两个工程调成未开始仿真模式 将A中的节点复制 选中节点wall,右击选择Export然后保存为.wbo格式 打开B工程 点击新增,再点击Import,选择刚刚导出的文件 成功导入

【java基础-实战3】list遍历时删除元素的方法

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 在实际的业务开发中,容器的遍历可以说是非…

【C语言】写入访问权限冲突

访问权限冲突 一、引入:情景再现二、出现问题的原因三、解决问题的方法四、问题解决五、结果修正 一、引入:情景再现 想在结构体堆的数组中for循环读入已经有的一个数组 int main() {int a[] { 2,3,5,7,4,6,8,65,100,70,32,50,60 };int num sizeof(a…

Xray联动crawlergo自动扫描教程

xray和crawlergo联动 xray下载: https://github.com/chaitin/xray/releases crawlergo下载:360-crawlergo: github:https://github.com/Qianlitp/crawlergo/releases 联动脚本: github:https://github.com/timwhitez/crawlergo_x_…

C++ 模板集 - 不定期更新

文章目录 01背包完全背包动态规划区间动态规划DFS - 栈链式前项星图论 dijkstra算法 (邻接矩阵)图论 dijkstra算法 - 堆优化 (小根堆)图论 dijkstra算法 - 堆优化 (大根堆-修复中)最短路 - SPFA最短路 - Floyd最小生成树 - Kruskal最小生成树 - Prim快读拓扑排序高精度 - 加法 …

STM32F4X定时器之基本定时器

一、定时器的概述 进行有规律的计数,每记一次数的时间都是固定的 定时器的本质:计数的总时间 记一次数的时间(时钟的频率) * 记多少次(重装载值)。 基本定时器属于片上外设,系统滴答定时器是…

flutter开发的一个小小小问题,内网依赖下不来

问题 由于众所周知的原因,flutter编译时,经常出现Could not get resource https://storage.googleapis.com/download.flutter.io…的问题,如下: * What went wrong: Could not determine the dependencies of task :app:lintVit…

macOS telnet替代方式

前言 经过使用Linux,常常用Linux的telnet查看端口畅通,是否有防火墙,但是在mac上已经没有这个命令了,那么怎么使用这个命令或者有没有其他替代呢,win和linux是否可以使用相同的替代。macOS可以原生用nc命令替代&#…

SpringCloud之gateway基本使用解读

目录 基本介绍 概述 API网关介绍 路由(Route) 断言(Predicate) 过滤器(Filter) 简单JAVA代码实战 实战架构 teacherservice服务 gateway服务 测试 断言工厂 过滤器工厂 全局过滤器 &#xf…

数据库基础(二)【MySQL】

文章目录 什么是数据库数据库是运行在操作系统中的软件 为什么需要数据库有哪些数据库MySQL 的体系架构网络连接层/API 层数据库服务层存储引擎层系统文件层 什么是 SQL参考资料 阅读前导:理论上数据库可以在操作系统和网络之前学习,但是这样会让学习层次…