eCos中的线程与同步

eCos Mbox机制 背景 总结下 ecos mbox这个通信机制。 ecos下面的通信机制真的很少,没有信号、消息队列、信号量、unix域…, 当然,我看到里面不少地方用到了 网络socket,如DHCP客户端的开启和关闭。 mbox我理解上应该就是Linux下消息队列吧,但是BRCM下面的 rc 中,用到的非常简单,仅仅使用这种机制来传递一个整数,哈哈,真是蛋碎。 经过扩展后,能传递字符串了。下面,走进去看下。 m... 阅读详情

1.线程的创建

void cyg_thread_create(...),创建一个线程,处于挂起状态

 

2.线程的控制

void cyg_thread_yield (),使线程放弃对处理器的控制

void cyg_thread_delay (cyg_tick_count_t    delay),使线程挂起一定的时间

void cyg_thread_suspend (cyg_handle_t  thread),挂起指定的线程

void cyg_thread_resume (cyg_handle_t  thread),启动指定线程

void cyg_thread_release (cyg_handle_t  thread),将处于阻塞态的线程释放

 

void cyg_thread_exit (void),线程自己退出

void cyg_thread_kill (cyg_handle_t  thread),杀死另外一个线程

void cyg_thread_delete(cyg_handle_t  thread),删除一个线程

 

3.线程优先级的操作

一般来说,线程的优先级使用0 ~ 31的整数来表示。空闲线程是最低优先级。

cyg_priority_t  cyg_thread_get_priority (cyg_handle_t  thread),得到指定线程的优先级

cyg_priority_t  cyg_thread_get_current_priority (cyg_handle_t  thread),得到指定线程的当前优先级

void cyg_thread_set_priority (cyg_thread_t  thread,  cyg_thread_t  priority),修改指定线程的优先级

 

同步机制

 

eCos的同步机制提供了几个同步原语来实现多线程之间的协同工作和对资源的合理分配利用:

1.Mutex 互斥体,实现线程对资源的安全共享。

简单概念:

 

eCos内核关于Mutex的API:

void cyg_mutex_init (cyg_mutex_t*  mutex),初始化一个互斥体

void cyg_mutex_destory (cyg_mutex_t* mutex),报废一个互斥体

void cyg_mutex_lock (cyg_mutex_t* mutex),锁住Mutex对象

void cyg_mutex_unlock (cyg_mutex_t* mutex),解锁

cyg_bool_t  cyg_mutex_trylock (cyg_mutex_t* mutex),尝试着上锁

void cyg_mutex_release (cyg_mutex_t* mutex),所有等待这个mutex对象的线程,我都要把它们释放,想获取,没门

void cyg_mutex_set_ceiling (cyg_mutex_t* mutex,  cyg_priority_t  priority),避免死锁的常用手法,将这个mutex的优先级置顶,关于这个还有个任务优先级倒置的问题,以后再详解

void cyg_mutex_set_protocol (cyg_mutex_t* mutex,  enum  cyg_mutex_protocol  protocol),设置互斥体协议

 

 

2.Condition Variable 条件变量

void cyg_cond_init ( cyg_cond_t* cond,  cyg_cond_t* mutex),初始化一个条件变量

void cyg_cond_destory (cyg_cond_t* cond),报废一个条件变量

cyg_bool_t  cyg_cond_wait ( cyg_cond_t* cond),等待一个条件变量

void cyg_cond_signal (cyg_cond_t* cond),唤醒一个等待cond的线程,通常是级别高的会优先被唤醒

void cyg_cond_broadcast (cyg_cond_t* cond),唤醒所有等待cond的线程

cyg_bool_t cyg_cond_timed_wait ( cyg_cond_t* cond, cyg_tick_count_t abstime),等待cond,并具有超时功能

 

3.Semaphore 信号量

void cyg_semaphore_init (cyg_sem_t* sem, cyg_count32 val),初始化一个信号量,其计数器的初值为val

void cyg_semaphore_destory (cyg_sem_t* sem)

cyg_bool_t cyg_semaphore_wait (cyg_sem_t* sem),等待一个信号量

cyg_bool_t cyg_semaphore_timed_wait (cyg_sem_t* sem, cyg_tick_count_t abstime),如上,还有超时功能

cyg_bool_t cyg_semaphore_trywait (cyg_sem_t* sem),尝试等待

void cyg_semaphore_post (cyg_sem_t* sem) ,信号量sem的计数器加1

void cyg_semaphore_peek (cyg_sem_t* sem, cyg_count32* val),获取sem当前的计数器值

 

 

4.MailBox 邮箱

类似于Semaphore,不同之处在于,mailbox还可以被线程在事件发生时用来传递一些数据。

void cyg_mbox_create (cyg_handle_t* handle, cyg_mbox* mbox)

void cyg_mbox_delete (cyg_handle_t  mbox)

void cyg_mbox_get (cyg_handle_t  mbox),从MailBox内读数据

void* cyg_mbox_tryget (cyg_handle_t mbox)

void* cyg_mbox_peek_item (cyg_handle_t mbox),从MailBox内读数据,但数据仍在MailBox里

cyg_bool_t cyg_mbox_put (cyg_handle_t mbox, void* item),将消息送入一个MailBox内

cyg_bool_t cyg_mbox_timed_put (cyg_handle_t mbox, void* item, cyg_tick_count_t abstime)

cyg_bool_t cyg_mbox_tryput (cyg_handle_t mbox, void* item)

cyg_count32 cyg_mbox_peek (cyg_handle_t mbox),返回MailBox内等待处理的消息数

cyg_bool_t cyg_mbox_waiting_to_get (cyg_handle_t mbox),检测是否有线程在等待MailBox中的消息

cyg_bool_t cyg_mbox_waiting_to_put (cyg_handle_t mbox),检测是否有线程在等待从MailBox中删除消息以便送入新消息

 

5.Flag 事件标志

void cyg_flag_init (cyg_flag_t* flag)

void cyg_flag_destory (cyg_flag_t* flag)

void cyg_flag_setbits (cyg_flag_t* flag, cyg_flag_value_t value),对事件标志位进行设置

void cyg_flag_maskbits (cyg_flag_t* flag, cyg_flag_value_t value),清除事件标志中的某些位

cyg_flag_value_t cyg_flag_wait ( cyg_flag_t* falg, cyg_flag_value_t pattern, cyg_flag_mode_t mode),使线程阻塞等待一组事件的发生

cyg_flag_value_t cyg_flag_timed_wait (...)

cyg_flag_value_t cyg_flag_poll (...),检测事件标志中的一组事件是否发生

cyg_flag_value_t  cyg_flag_peek (cyg_flag_t* flag ),返回事件标志中的当前值

cyg_bool_t cyg_flag_waiting (cyg_flag_t* flag),检测当前是否有线程处于等待事件标志的阻塞状态

 

 

6.Spinlock

spinlock是为多处理器系统(SMP)中的应用程序提供的一个同步原语,关于SMP,以后详解。

void cyg_spinlock_init (cyg_spinlock  lock,  cyg_bool_t  locked)

void cyg_spinlock_destory (cyg_spinlock_t  lock)

void cyg_spinlock_spin (cyg_spinlock_t  lock),对spinlock进行声称

void cyg_spinlock_clear (cyg_spinlock_t* lock),释放一个spinlock

cyg_bool_t cyg_spinlock_try (cyg_spinlock_t lock),声称一个spinlock

cyg_bool_t cyg_spinlock_test (cyg_spinlock_t lock),检查当前是否有线程正在阻塞等待spinlock

void cyg_spinlock_spin_intsave (cyg_spinlock_t lock, cyg_addrword_t istate),声称spinlock,并禁止中断

void cyg_spinlock_clear_intsave (cyg_spinlock_t* lock, cyg_addrword_t istate),释放一个spinlock

     to be continued

Zephyr 开发必备技能:一文搞懂 west manifest 本文深入解析Zephyr项目的westmanifest工具Manifest文件管理,从基础概念到高级应用。文章首先介绍westmanifest作为Zephyr模块化架构的核心工具,负责管理west.yml文件中的模块信息、Git地址及版本控制。随后详细讲解Manifest文件的基本结构、字段含义,以及westmanifest子命令的使用方法,包括查看内容、冻结版本、验证文件等操作。文章还探讨了Manifest的导入继承机制和在团队协作中的版本管理策略,并给出常见问题排查技巧。最后强调Manifest文件作 阅读详情

相关推荐

eCOS嵌入式操作系统详细介绍特点

总结:eCOS是一款功能强大的嵌入式操作系统,具有高度可配置性、小尺寸和可靠性。通过灵活的配置选项,开发人员可以根据应用程序的需求选择所需的功能和设备驱动程序。eCOS的小尺寸使其适用于资源受限的嵌入式系统,并且通过可靠性增强技术确保系统的稳定性和可靠性。eCOS(Embedded Configurable Operating System)是一种开放源代码的嵌入式操作系统,它具有高度可配置性和可定制性。eCOS的设计目标是为嵌入式系统提供高性能、小尺寸和可靠性。eCOS嵌入式操作系统详细介绍特点。

CodeMaven的博客 844

ecos内存管理

    在嵌入式系统中,为了对内存资源进行很好地控制,避免发生不可预测的后果,一般建议使用静态内存分配。ecos是专门为实时嵌入式系统量身定做的操作系统,它的大多数系统调用在被使用时都要求将预先指定的由系统调用所产生的目标对象的内存地址传递给该系统调用(即对其进行静态内存分配)。如第一讲cyg_thread_create系统调用函数就要求传入句柄指针和线程数据结构体指针及堆栈起址,而这三个指针对应

aaaaatiger--寻路 4146

RK3568平台开发系列讲解(安卓篇)LED呼吸灯系统流程

1.app层封装后使用NotificationManager发出:NotificationManager.notify() 2.Android 系统架构中:一个manager类对应一个aidl接口,一个manager对应一个底层的服务,notification也是这个架构

内核笔记 3596

同步原语

http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?ID=2462312 gdtyy 发表于 2007-3-10 11:41 ZLG-ARM ←返回版面

aaaaatiger--寻路 1784

ecos线程

 一些网友来信反映说ecos增值软件包的范例比较少,不太会用,希望增加详细的使用说明。其实很多关于ecos的书上都有使用方法的介绍,不过考虑到很多用户第一次使用ecos,我还是觉得有必要再给出一些详细的使用说明。因为网友的问题重复的比较多,就不一一回信了,统一写成文档共享。主要想说明线程、IO操作、中断、TCP/IP协议栈、文件系统、GUI等的使用方法及其他感觉有必要阐述的内容。        在

ccl033的专栏 1431

深入理解eCos内核的线程调度同步

本文深入探讨了eCos操作系统内核在多处理器系统上如何处理中断源,配置中断控制器,并介绍了其支持的多种线程调度器设计,包括位图调度器和多级队列调度器。文章还详细解析了eCos内核提供的六种不同的线程同步机制,包括互斥锁、信号量、条件变量、事件标志、邮箱和自旋锁,及其在实时系统中的应用。

weixin_30820933的博客 527

ECOS线程

1.线程的创建void cyg_thread_create(...),创建一个线程,处于挂起状态2.线程的控制void cyg_thread_yield (),使线程放弃对处理器的控制void cyg_thread_delay (cyg_tick_count_t delay),使线程挂起一定的时间void cyg_thread_suspend (cyg_handle_t...

weixin_34253539的博客 319

内核 - ecos内核概览 .

概览   名称 内核- ecos内核概览   描述   内核是ecos的一个关键包。它提供了开发多线程应用程序的核心方法。 1.创建新线程,在系统启动或者已经运行的时候。 2.控制不同的线程,比如操作线程的优先级。 3.一个调度器,决定哪个线程当前可以运行。 4.一组同步元语,允许多线程通讯和安全共享数据。 5.集成系统中断和异常。   在其它一些操作系统内核中,一般会

mrwangwang的专栏 924

eCos中的同步原语简要

eCos提供的同步原语包括信号量、互斥量、条件变量、事件标志、邮箱以及消息队列。每种同步原语都有特别之处,不同的同步原语满足了应用对不同的线程同步和消息传递需求。 eCos官网http://ecos.sourceware.org,eCos中文技术网http://www.52ecos.net,eCos交流QQ群144940146。 mingdu.zheng<at>gmail<...

zoomdy's blog 2137

ecos内核概览--bakayi译

最近正在学习ecos嵌入式系统,国内关于这玩意的东西还真是少之又少啊,闲着没事也翻译了两篇,看了下面这篇翻译,觉得比自己翻译的好多了,美中不足的是,这个家伙貌似就翻译了这么一篇~~~先转过来吧注:原文出处http://blog.csdn.net/bakiya/archive/2008/04/25/2329124.aspx名称内核- ecos内核概览描述内核是ecos的一个关键包。它提供了开发多线程应用程序的核心方法。1.创建新线程,在系统启动或者已经运行的时候。2.控制不同的线程,比如操作线程的优先级。3.

1430

内核 - ecos内核概览

概览 名称内核 - ecos内核概览 描述 内核是ecos的一个关键包。它提供了开发多线程应用程序的核心方法。1.创建新线程,在系统启动或者已经运行的时候。2.控制不同的线程,比如操作线程的优先级。3.一个调度器,决定哪个线程当前可以运行。4.一组同步元语,允许多线程通讯和安全共享数据。5.集成系统中断和异常。 在其它一些操作系统内核中,一般

不能六分 4554

内核——eCos内核概览

转载自:http://blog.csdn.net/bakiya/article/details/2329124,原文是对eCos参考手册内核简介部分的翻译,英文原文:http://ecos.sourceware.org/docs-latest/ref/kernel-overview.html。 eCos官网:http://ecos.sourceware.org eCos中文技术网:http:/...

zoomdy's blog 2118

uC/OS-II、eCos、Linux的简要比较

uC/OS-II:  占先式内核,仅支持bitmap调度算法,最多支持65任务线程,提供比较完善的线程同步服务。 开源但非免费,需要开发商业产品的用户,需要购买license。 开发环境,没有限制,对于软件开发来讲仅仅相当于一个函数库。 ecos   : 占先式内核,支持bitmap调度算法和同优先级分时调度算法,支持POSIX标准接口,比较完善的线程同步服务。有自己

aiwode 的专栏 2249

垂直极化波斜入射到两种理想介质分界面MATLAB仿真

电磁场课程设计:垂直极化波斜入射到两种理想介质分界面MATLAB仿真

上一篇:
下一篇: 认真对待内存管理
test27
博客等级 码龄16年 11粉丝 30原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值