你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
tjhbwjk 发表于 2015-1-18 19:16 5 p1 g( X/ D8 b9 B( w8 q楼主能整个cubemx的用法的文档吗?看着貌似很方面啊
lovewyufeng 发表于 2015-1-18 22:01 5 \* @4 ?$ g# |% v$ c: f2 ^没事 多点几下就会了 这个软件没几个 配置信息的
lovewyufeng 发表于 2015-1-8 21:29, S' l' k/ u: Q. ^, l# ` 是的 因为我的 资源一开始是不可用的 * k+ p: w$ h$ x, q6 \( E' x# }, _ 6 J/ O9 \# L9 t4 z- E- M这是典型的 生产消费问题
我是东哥 发表于 2015-1-21 12:18$ d5 x6 k2 {1 S- j 这个其实也没有不合理,看你怎么理解,资源一开始为0,也可以理解为空闲池一开始是满的。生产者生产了一 ...
lovewyufeng 发表于 2015-1-23 00:48 / ]) F5 i1 R$ p0 n4 P, E, f反过来理解是吧,说得通。可是 1 |, R4 ] c! G7 E有个问题。,生产一个就-1的话应该 take获取信号咯? 反过来消费应该pos ...
我是东哥 发表于 2015-1-23 07:50 & j W( y% P% b: a2 I你陷在细节里面了,看看人家的API是怎么样写的,osSemaphoreRelease和osSemaphoreWait,我们在生产者里面 ...
lovewyufeng 发表于 2015-1-23 09:52 , ~: c# q+ W: @; o' m- a好吧 那么我就简单的问 一句 我初始化一个 100的sem 按照 API 初始值 是100 ! m$ \9 ]) x Z4 ? ! g5 {, R% W% v6 R2 {8 R+ G那么在生产者还没生产任 ...
没事 多点几下就会了 这个软件没几个 配置信息的
好的,谢谢,明天试试
这个其实也没有不合理,看你怎么理解,资源一开始为0,也可以理解为空闲池一开始是满的。生产者生产了一个,资源+1,也可以理解为空闲池-1。
反过来理解是吧,说得通。可是% V- j+ t5 X5 |& W+ |0 T+ _, v
有个问题。,生产一个就-1的话应该 take获取信号咯? 反过来消费应该post 释放信号咯? 那么问题是 post是非阻塞立即返回的而take是阻塞的?8 h9 I- i! @3 P8 \: L$ K5 A$ V y3 c0 o
先不谈消费者应当随时饥饿,处于阻塞态。
生产一般在中断里吧,当take-到0的时候 阻塞线程阻塞谁呢
你陷在细节里面了,看看人家的API是怎么样写的,osSemaphoreRelease和osSemaphoreWait,我们在生产者里面应该要osSemaphoreRelease,而在消费者里面osSemaphoreWait,是吧?字面理解,相当于生产的人释放了一个东西,然后消费者就等待生产者的这个东西。再看里面的实现,osSemaphoreRelease里面是xSemaphoreGive而不是take,而osSemaphoreWait里面是xSemaphoreTake而不是give。& c3 a) m& z2 o$ }. I4 R( F' m
所谓的反过来理解只是一种理解方法,说take和post的逻辑也反的话是不对的。不要老想着什么时候去post,什么去take。cmsis_os的API意思很明了,生产者生产了东西就应该release,消费者就应该Wait,这不是很好理解吗?
好吧 那么我就简单的问 一句 我初始化一个 100的sem 按照 API 初始值 是100
" d4 G. k6 l0 e; [5 ] T: D
那么在生产者还没生产任何数据的时候 请问 消费者 需要数据应该调用哪个API
, F. t6 _3 u9 A1 l
wait 还是 release
消费者wait,生产者release。这有什么问题吗?这个100只是内部的一个计数,是不是能够wait到,是看是否能够release成功,也就是说你不release,是肯定不能wait到的。