Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
信号量_semaphore
文档中关于semaphore的两个例子在连续执行第二次的时候都会报错
发布于 2021-01-16 15:13:04 浏览:1205
订阅该版
文档中关于semaphore的两个例子在连续执行第二次的时候都会报错: ``` (obj != object) assertion failed at function:rt_object_init, line number:267 ``` 请问如果正确的回收信号量,或都说正确使用信号量 ```c #include
/* * Copyright (c) 2006-2020, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2021-01-16 Administrator the first version * * //RT-Thread 编程指南 65RT-Thread 编程指南 5.1 节 信号量 */ #define THREAD_PRIORITY 25 #define THREAD_TIMESLICE 5 /* 指 向 信 号 量 的 指 针 */ static rt_sem_t dynamic_sem = RT_NULL; /**********thread1*************/ ALIGN(RT_ALIGN_SIZE) static char thread1_stack[1024]; static struct rt_thread thread1; static void rt_thread1_entry(void *parameter) { static rt_uint32_t count = 0; while (1) { if (count <= 100) { count++; } else{ rt_sem_delete(dynamic_sem); return; } /* count 每 计 数 10 次, 就 释 放 一 次 信 号 量 */ if (0 == (count % 10)) { rt_kprintf("t1 release a dynamic semaphore.\n"); rt_sem_release(dynamic_sem); } } } /**********thread2*************/ ALIGN(RT_ALIGN_SIZE) static char thread2_stack[1024]; static struct rt_thread thread2; static void rt_thread2_entry(void *parameter) { static rt_err_t result; static rt_uint32_t number = 0; while(1) { /* 永 久 方 式 等 待 信 号 量, 获 取 到 信 号 量, 则 执 行 number 自 加 的 操 作 */ result = rt_sem_take(dynamic_sem, RT_WAITING_FOREVER); //信号量被删除的时候返回RT_ERROR,到时候可以做相应的操作 if (result != RT_EOK) { rt_kprintf("t2 take a dynamic semaphore, failed.\n"); return; } else { number++; rt_kprintf("t2 take a dynamic semaphore. number = %d\n", number); } } } /* 信 号 量 示 例 的 初 始 化 */ int semaphore_sample(void) { /* 创 建 一 个 动 态 信 号 量, 初 始 值 是 0 */ dynamic_sem = rt_sem_create("dsem", 0, RT_IPC_FLAG_FIFO); if (dynamic_sem == RT_NULL) { rt_kprintf("create dynamic semaphore failed.\n"); return -1; } else { rt_kprintf("create done. dynamic semaphore value = 0.\n"); } rt_thread_init( &thread1, "thread1", rt_thread1_entry, RT_NULL, &thread1_stack[0], sizeof(thread1_stack), THREAD_PRIORITY, THREAD_TIMESLICE); rt_thread_startup(&thread1); rt_thread_init( &thread2, "thread2", rt_thread2_entry, RT_NULL, &thread2_stack[0], sizeof(thread2_stack), THREAD_PRIORITY-1, THREAD_TIMESLICE); rt_thread_startup(&thread2); return 0; } /* 导 出 到 msh 命 令 列 表 中 */ MSH_CMD_EXPORT(semaphore_sample, semaphore sample); /* res create done. dynamic semaphore value = 0. t1 release a dynamic semaphore. t2 take a dynamic semaphore. number = 1 t1 release a dynamic semaphore. t2 take a dynamic semaphore. number = 2 t1 release a dynamic semaphore. t2 take a dynamic semaphore. number = 3 t1 release a dynamic semaphore. t2 take a dynamic semaphore. number = 4 t1 release a dynamic semaphore. t2 take a dynamic semaphore. number = 5 t1 release a dynamic semaphore. t2 take a dynamic semaphore. number = 6 t1 release a dynamic semaphore. t2 take a dynamic semaphore. number = 7 t1 release a dynamic semaphore. t2 take a dynamic semaphore. number = 8 t1 release a dynamic semaphore. t2 take a dynamic semaphore. number = 9 t1 release a dynamic semaphore. t2 take a dynamic semaphore. number = 10 */ ```
查看更多
yangjie
认证专家
2021-01-18
hello
示例代码本就是用来入门的,能看懂就行了,如果要做到可以重入,那么还需要把线程杀死,这样示例代码就变复杂了。把重点放在学习信号量的使用上就行
4
个回答
默认排序
按发布时间排序
dayisheng
2021-01-16
这家伙很懒,什么也没写!
`rt_sem_delete(dynamic_sem);`使用的有问题
mysterywolf
认证专家
2021-01-17
https://github.com/mysterywolf
有瑕疵
liuduanfei
2021-01-18
这家伙很懒,什么也没写!
修改pr一个好使的
撰写答案
登录
注册新账号
关注者
0
被浏览
1.2k
关于作者
dayisheng
这家伙很懒,什么也没写!
提问
15
回答
16
被采纳
0
关注TA
发私信
相关问题
1
怎样可以将信号量复位为初始值
2
rt_sem_take 引起段错误
3
生产者消费者中是否可以使用一个事件集来代替多个二值信号量?
4
看RTT文档,不太懂有关信号量的死锁问题
5
这样使用UART接收一帧数据的方法是否可行
6
一对多线程间通信的问题
7
动态内存堆 保护全局变量lfree,为什么用信号量而不是互斥信号量
8
二值信号量的使用问题
9
USART1_IRQHandler串口中断接收问题
10
开发文档semaphore_sample.c有问题
推荐文章
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
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
2
Rt-thread中OTA下载后,bootloader不搬程序
3
ulog 日志 LOG_HEX 输出时间改为本地日期时间
4
在RT-Thread Studio中构建前执行python命令
5
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
热门标签
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
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
xusiwei1236
8
个答案
2
次被采纳
踩姑娘的小蘑菇
1
个答案
2
次被采纳
用户名由3_15位
9
个答案
1
次被采纳
bernard
4
个答案
1
次被采纳
RTT_逍遥
3
个答案
1
次被采纳
本月文章贡献
聚散无由
2
篇文章
15
次点赞
catcatbing
2
篇文章
5
次点赞
Wade
2
篇文章
4
次点赞
Ghost_Girls
1
篇文章
7
次点赞
xiaorui
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部