尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【学习笔记】TI-OSAL

【学习笔记】TI-OSAL
📅 发布时间:2026/6/18 16:56:29

个人观点

只能定时“触发事件”的定时器不够灵活

目前的定时器是内部实现是定时触发事件,即“往xx任务发送xx event”;

如果设计成通用的软件定时器,定时回调的方式;
在回调函数中,不管是定时触发事件还是定时做什么动作;

这样就比较的灵活;

任务初始化

void osal_Task_init(void)只能在osal_add_task完成之后 实现任务的初始化;无法实现动态的添加任务;比如(某个任务状态就是 增加一个周期的子任务 做某个检测)

事件标志位

因为没有办法知道 相应了哪个事件;所有将没有相应的事件 返回,用于下一次处理;

消息的队列的方向

-fifo enqueue = 入队 = 添加到队列 尾部
- fifo dequeue = 出队 = 从队列 头部 移除

消息队列的设计

“用户透明的队列”,状态了消息头的设计

系统消息的理解

typedef struct { osal_event_hdr_t hdr; uint8* data; } osal_sys_msg_t; //默认系统消息结构体

上述结构的osal_event_hdr_t hdr; 实际使用了msg->hdr.event起到了定义消息类型的作用;

msg->hdr.status 没有起到任何作用;

对于oasl_sys_msg_t 不是系统级别消息,而是任务之间的数据消息;

那么对于“数据消息”,重点是定义数据消息的类型,以及数据消息的内容;
至于数据消息的内容,一种是值传递,即直接将消息的值,放在消息队列中;另一种是地址传递,即将消息数据的地址作为消息,与消息类型一起传递;

消息查找

osal_event_hdr_t *osal_msg_find(uint8 task_id, uint8 event)
找到与task_id 和 event相匹配的 消息头;

其中这个event 就是“消息类型”

定时器

taskid + event 一起定义一种定时器;

消息头的长度信息

没有作用;

消息头需要表征:从哪里来,到哪里去,什么消息类型

TODO

+ 消息订阅机制,处理同一个消息发送给不同的任务;

LOG

msg

删除 uint8 osal_msg_send(uint8 dest_task, uint8 *msg_data)中对id最大值的判断if(dest_task >= tasksCnt);改判断通过if(SUCCESS != osal_set_event(dest_task, OSAL_MSG_EVENT))实现;

删除osal_event_hdr_t

删除osal_sys_msg_t

删除 osal_event_hdr_t *osal_msg_find(uint8 task_id, uint8 event);

删除 osal_msg_hdr_t的len 字段

task

删除 uint8 tasksCnt = 0; 因为task_id 计数器可直接表征任务数量;

删除了task_active的变量;完全可以用局部变量实现对应的功能;

修改add_task为create_task;

在 add_task的地方 增加 return TaskNew->pfnInit(TaskNew->taskID);

修改了 uint8 *osal_msg_receive(uint8 task_id) ;listHrd 给的值始osal_msg_hdr_t;而不是像其他一样使用“消息体”的地址

timer

修改 event_flag 为 event_mask 体现位掩码的概念 防止理解出错

修改 osal_start_reload_timer 为 osal_start_repeat_timer ,方便理解

修改 osal_update_timers为 svoid osal_update_ticks(uint16 ticks) //ISR ;意味更新tick时钟,该函数通常用在isr中;需要与osal_timer_update分开使用;一个是更新tick ;一个是在主循环中检查是否有要触发的event ;

删除 osal_timer_hw_setup 因为没有使用的场景;低功耗场景 直接通过关闭硬件timer 实现osal_timer的停止计数;其他场景下,系统暂停时,osal_timer不应该被停止;

memory - 堆

堆空间被划分为两部分:小块内存和大块内存。小块内存用于频繁分配的小数据块,而大块内存则用于较大的数据块分配。这种设计减少了内存碎片化,提高了分配连续大内存块的成功率。

基于OSAL的嵌入式裸机事件驱动框架——内存管理osal_memory_stm32 osal-CSDN博客

数据对齐

Header+ [申请的size ,经过x对齐处理 ]

对比 freertos heap_4

其他TI-OSAL

osal_on_pc

它是原版的从ti-osal中剥离的;里面也收集了很多公共的模块

还有关于osal的文档

tslf 堆库

TLSF与FreeRTOS-heap4对比 | 耀眼的大神 (dazzlingokami.github.io)

eOSAL-3.0

耀眼的大神 (dazzlingokami.github.io)

task

独立的消息队列

消息头

消息头的三个参数 分别送给了 消息处理函数;

timer

flag 的位定义

1中是硬件中调度

2是软件

延时调度

作者为了这个“延时”问题,下了不少功夫

我的理解如果一个任务需要延时,裸机处理方式有两种:
1.使用状态机等待延时;-分状态,多
2.使用PT的delay方式实现等待;-好理解,阅读代码友好
直接“穿过”任务,轮询的主函数不被打断;

end

相关新闻

  • 2026密封条选购指南:三元乙丙胶条/尼龙(PA)隔热条/防火阻燃密封条正规厂家推荐:新合星塑胶制品有限公司领衔 - 栗子测评
  • XY2100命令行工具:模块化与管道化设计提升数据处理效率
  • 2026长沙钻石回收门店实力排行,禹竞名奢汇综合实力稳居榜首 - 名奢变现站

最新新闻

  • 2026 四川旅游公司口碑榜 TOP5:品质出游怎么选?企业客户真实评价告诉你 - 品研笔录
  • 5分钟掌握Obsidian日历插件:打造可视化时间管理系统终极指南
  • 2026性价比最高的GEO监测工具,选它就对了
  • 089、 PCIE ASPM策略与退出延迟:从一次深夜调试说起
  • 终极IT运维实战指南:LinkedIn技能评估完整题库解析
  • Microsoft Intune脚本开发指南:自定义脚本模板与最佳实践

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号