dsp c6657 SYS/BIOS学习笔记
1 SYS/BIOS简介
SYS/BIOS是一种用于TI的DSP平台的嵌入式操作系统(RTOS)。
2 任务
2.1 任务调度
SYS/BIOS任务线程有0-31个优先级(默认0-15,优先级0被空闲线程使用,任务最低优先级为1,最高优先级为15),在内存允许的情况下可以不限制的创建任务数量。SYS/BIOS有独立的内存堆栈,可以为等待某一事件的发生而被挂起,任务会被其他更高优先级的线程打断。

2.2 动态创建任务
以下例程将动态创造两个任务:
/** ======== task ========*/
Void taskFxn1(UArg a0, UArg a1) {System_printf("enter task1\n");Task_sleep(10);System_printf("exit task1\n");System_flush();
}Void taskFxn2(UArg a0, UArg a1) {System_printf("enter task2\n");Task_sleep(10);System_printf("exit task2\n");System_flush();
}/** ======== main ========*/
Int main() {Task_Handle task1;Task_Handle task2;Task_Params taskParams;// 创建两个任务Task_Params_init(&taskParams);taskParams.priority = 1;//任务优先级taskParams.stackSize = 1024;//任务栈大小task1 = Task_create(taskFxn1, &taskParams, NULL);Task_Params_init(&taskParams);taskParams.priority = 2;//任务优先级taskParams.stackSize = 1024;//任务栈大小task2 = Task_create(taskFxn2, &taskParams, NULL);BIOS_start(); /* does not return */return (0);
}
3 同步模块
3.1 信号量
3.1.1 信号量简介
信号量通常用于协调一些处于竞争关系的任务之间对共享资源的访问。可以使任务处于挂起状态,用来等待某一个特定的事件,只有当这个事件发布的时候才能继续执行任务。
信号量的操作主要包括Semaphore_pend()和Semaphore_post()两个API。Semaphore_pend()用于请求信号量,如果信号量的计数值大于0,则任务可以继续执行,否则任务将被挂起等待信号量的发布。Semaphore_post()用于释放信号量,增加信号量的计数值,如果其他任务因等待此信号量而被挂起,则会唤醒这些任务中的一个。
简单来说:信号量的值为0的时候任务处于挂起状态,信号量大于等于1的时候任务恢复继续执行。
信号量有两种模式:计数信号量(Counting)和二进制信号量(Binary)。计数信号量可以有大于1的计数值,表示多个资源或资源的多个访问权限;而二进制信号量只有0和1两个状态,用于最简单的同步机制,比如一个资源的锁定和解锁。下面是两种计数模式的区别:

3.1.2 动态创建信号量
以下是创建信号量的例程,其中任务2优先级高于任务1,所以进入系统之后优先运行任务2,任务2执行到Semaphore_pend(sem, BIOS_WAIT_FOREVER);时,代表信号量为0将任务2挂起,运行任务1。任务1开始后,运行到Semaphore_post(sem);代表信号量为1,之前被挂起的任务2恢复运行。
Semaphore_Handle sem;/** ======== task ========*/
Void taskFxn1(UArg a0, UArg a1) {while (1) {System_printf("进入任务1\n");System_flush();// 发布Semaphore_post(sem);System_printf("退出任务1\n");System_flush();}
}Void taskFxn2(UArg a0, UArg a1) {while (1) {System_printf("进入任务2\n");System_flush();// 挂起Semaphore_pend(sem, BIOS_WAIT_FOREVER);System_printf("退出任务2\n");System_flush();}
}/** ======== main ========*/
Int main() {Task_Handle task1;Task_Handle task2;Error_Block eb;System_printf("enter main()\n");Error_init(&eb);// 创建两个任务Task_Params taskParams;Task_Params_init(&taskParams);taskParams.priority = 1;taskParams.stackSize = 1024;task1 = Task_create(taskFxn1, &taskParams, NULL);Task_Params_init(&taskParams);taskParams.priority = 2;taskParams.stackSize = 1024;task2 = Task_create(taskFxn2, &taskParams, NULL);// 创建一个信号量Semaphore_Params semParams;Semaphore_Params_init(&semParams);semParams.mode = Semaphore_Mode_BINARY; //二进制模式sem = Semaphore_create(0, &semParams, NULL); //1为该信号量的初始值BIOS_start(); /* does not return */return (0);
}
运行结果:

3.2 邮箱
3.2.1 邮箱简介
邮箱SYS/BIOS系统用来在任务间进行buffer传输的。可以将邮箱理解为一个FIFO的队列,Mailbox_post表示向队列写数据,Mailbox_pend表示向队列读数据,如果队列数据存满了,那么就无法向队列再写新的数据。
如果队列已满,执行 Mailbox_post则返回0,在time_out为BIOS_WAIT_FOREVER情况下,则任务被挂起,直到队列可以写数据。
如果队列为空,执行Mailbox_pend则返回0,在time_out为BIOS_WAIT_FOREVER情况下,则任务被挂起,直到队列有数据。
3.2.2 动态创建邮箱
Mailbox_Handle mbx;Void task_writer(UArg arg0, UArg arg1) {Int32 data_addr;data_addr = 12345678;//推送消息到邮箱//第一个参数为邮箱句柄,第二个参数为传递的消息地址,第三个表示超时时间Mailbox_post(mbx, &data_addr, BIOS_NO_WAIT);System_printf("writer done\n");System_flush();
}Void task_reader(UArg arg0, UArg arg1) {Int32 read_addr;while (1) {//第一个参数为邮箱句柄,第二个参数为传递的消息地址,第三个表示超时时间Mailbox_pend(mbx, &read_addr, BIOS_WAIT_FOREVER);System_printf("read data = %d \n", read_addr);System_flush();}
}Int main() {Task_Params taskParams;Mailbox_Params mbxParams;//创造一个邮箱实例Mailbox_Params_init(&mbxParams);//在Mailbox_create中,第一个参数表示邮箱传递消息的字节数,第二个参数表示邮箱消息的最大数量mbx = Mailbox_create(sizeof(Int32), 1, &mbxParams, NULL);//创建一个任务实例Task_Params_init(&taskParams);//写任务taskParams.priority = 10;Task_create(task_writer, &taskParams, NULL);//读任务taskParams.priority = 1;Task_create(task_reader, &taskParams, NULL);BIOS_start();return (0);
}
运行结果:
![]()
相关文章:
dsp c6657 SYS/BIOS学习笔记
1 SYS/BIOS简介 SYS/BIOS是一种用于TI的DSP平台的嵌入式操作系统(RTOS)。 2 任务 2.1 任务调度 SYS/BIOS任务线程有0-31个优先级(默认0-15,优先级0被空闲线程使用,任务最低优先级为1,最高优先级为15&am…...
分布式搜索引擎ES-DSL搜索详解
1.DSL搜索-入门语法 建立索引: xxx(自定义名称) 自定义mapping: POST /shop/_mapping {"properties": {"id": {"type": "long"},"age": {"type": "integer"},"username": {&quo…...
vue zip文件下载请求封装与使用
axios封装(重点是响应拦截) 这里把响应超时时间注释是文件下载接口返回需要较长时间 import axios from axios import {ElMessageBox} from "element-plus"; import router from "/router";const service axios.create({baseURL: …...
Windows波形音频MMEAPI简介
Windows波形音频MMEAPI简介 使用MMEAPI时需要导入头文件:#include<mmeapi.h> mmeapi.h文件的主要内容 mmeapi.h 文件是 Windows 多媒体 API 的一部分,主要用于处理波形音频(Waveform Audio)的输入和输出。以下是该文件的…...
sklearn聚类算法用于图片压缩与图片颜色直方图分类
上期文章:机器学习之SKlearn(scikit-learn)的K-means聚类算法 我们分享了sklearn的基本知识与基本的聚类算法,这里主要是机器学习的算法思想,前期文章我们也分享过人工智能的深度学习,二者有如何区别,可以先参考如下几个实例来看看机器学习是如何操作的 不同K值下的聚…...
Llama 3.1要来啦?!测试性能战胜GPT-4o
哎呀,Meta声称将于今晚发布的Llama 3.1,数小时前就在Hugging Face上泄露出来了?泄露的人很有可能是Meta员工? 还是先来看泄露出来的llama3.1吧。新的Llama 3.1模型包括8B、70B、405B三个版本。 而经过网友测试,该base…...
C++使用opencv处理图像阴影部分
1. 直方图均衡化 直方图均衡化是一种增强图像对比度的方法,可以通过均衡化图像的灰度级分布来改善图像中阴影部分的亮度。 #include <opencv2/opencv.hpp>using namespace cv;int main() {// 读取图像Mat image imread("input_image.jpg", IMREA…...
4.Java Web开发模式(javaBean+servlet+MVC)
Java Web开发模式 一、Java Web开发模式 1.javaBean简介 JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。名称中…...
centos7 mysql 基本测试(6)主从简单测试
centos7 xtrabackup mysql 基本测试(6)主从简单测试 mysql -u etc -p 1234aA~1 参考: centos7 时区设置 时间同步 https://blog.csdn.net/wowocpp/article/details/135931129 Mysql数据库:主从复制与读写分离 https://blog.csd…...
信息安全工程师题
防火墙安全策略有两种类型:白名单策略、黑名单策略白名单策略:只允许符合安全规则的包通过防火墙,其他通信包禁止黑名单策略:禁止与安全规则相冲突的包通过防火墙,其他通信包允许实现网络地址转换的方式主要有静态NAT、…...
springcloud rocketmq 新增的消费者组从哪里开始消费
如果新建一个新的消费者组,是否会消费历史消息,导致重复消费? 直接在 console 界面新增消费者组,但是没有办法绑定订阅关系,没有找到入口,在 控制台项目源码 rocketmq-externals 也没有找到可以确定订阅关系…...
Redis-缓存
什么是缓存? 缓存就像自行车和越野车的避震器,降低硬着陆造成的损害 缓存就是系统的避震器,,防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数…...
MySQL练习05
题目 步骤 触发器 use mydb16_trigger; #使用数据库create table goods( gid char(8) primary key, name varchar(10), price decimal(8,2), num int);create table orders( oid int primary key auto_increment, gid char(10) not null, name varchar(10), price decima…...
[C++][STL源码剖析] 详解AVL树的实现
目录 1.概念 2.实现 2.1 初始化 2.2 插入 2.2.1 旋转(重点) 左单旋 右单旋 双旋 2.❗ 双旋后,对平衡因子的处理 2.3 判断测试 完整代码: 拓展:删除 1.概念 二叉搜索树虽可以缩短查找的效率,但…...
Kubernetes存储 - Node本地存储卷
官方文档 Kubernetes管理的Node本地存储目前有三种,分别是EmptyDir,HostPath,Local,EmptyDir是一种与Pod同生命周期的Node临时存储;HostPath是Node的目录;Local是基于持久卷(PV)管理的Node目录。接下来详细说明这几种类型如何以存…...
Cocos Creator2D游戏开发-(2)Cocos 常见名词
场景(Scene): 它一个容器,容纳游戏中的各个元素,如精灵,标签,节点对象。它负责着游戏的运行逻辑,以帧为单位渲染这些内容。就是你理解到的那个场景; 个人理解就是一个画面, 一个游戏不同的关卡,会有不同的…...
【不同设备间的数据库连接】被连接设备如何开权限给申请连接的设备
为了方便叙述,简称申请连接数据库的设备为a,被连接的为b 1.确保在同一局域网下,检查a的ip 如果你设置的动态ip,那么每重启一次这个ip都会变。两种选择,每次都给b同步一下你的最新ip,或者a设置成静态ip。具…...
Whisper离线部署问题处理
Whisper是OpenAI开发一款开源语音识别模型,可以帮我们低成本的拥有语音识别的能力。具体的安装部署方法,我在这里就不详细说了,网上有很多相关文章: 使用OpenAI的Whisper 模型进行语音识别 (baidu.com) 我这里主要想说的是&…...
【Hive SQL】数据探查-数据抽样
文章目录 数据随机抽样1、随机数排序抽样(rand())2、数据块抽样(tablesample())3、分桶抽样 数据随机抽样 在大规模数据量的数据分析及建模任务中,往往针对全量数据进行挖掘分析时会十分耗时和占用集群资源,…...
微信答题小程序产品研发-需求分析与原型设计
欲知应候何时节,六月初迎大暑风。 我前面说过,我决意仿一款答题小程序,所以我做了大量的调研。 题库软件产品开发不仅仅是写代码这一环,它包含从需求调研、分析与构思、设计到开发、测试再到部署上线一系列复杂过程。 需求分析…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
