We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
按照DEMO的时序是 在 init初始化 flex_button_register 注册好按键,然后开启线程button_scan 进行扫描,这个肯定没问题
如果在其它应用调用 flex_button_register , 会和 button_scan 有线程安全问题?,导致加入按键链表有的 按键 结构体数据可能不完整,被button_scan 打断,导致有问题
加下这两个函数互斥应该完美点。。。
The text was updated successfully, but these errors were encountered:
还有 flex_button_event_read 读出事件结果,没有读写锁,也没有线程安全
以上是本人的拙见。。。。
Sorry, something went wrong.
感谢您的反馈 😃
确实会存在多线程安全的问题,后续我考虑下如何简单实现数据互斥,您有好的想法和代码实现也可以直接 PR 提上来 。
像例程中单独创建一个按键任务,即使在任意时刻打断,恢复上下文将继续操作。 操作flex_button全局,只在当前按键任务进行操作,是线程安全的; 只要不在别的任务进行flex_button库的数据操作或其他操作即可; 可以在按键回调任务发送事件,信号量或队列进行数据传递;
如果非要在其他任务操作 flex_button_register: 我推荐的做法是 void other_task() { flex_button_register(); semp_give(); // 注册完成 发送信号量解除按键任务阻塞 for(;;){ //.......... } } void key_task() { semp_take(max_delay); // 等待创建完成进行 扫描工作 for(;;){ flex_key_scan(); os_delay(20); } }
No branches or pull requests
按照DEMO的时序是 在 init初始化 flex_button_register 注册好按键,然后开启线程button_scan 进行扫描,这个肯定没问题
如果在其它应用调用 flex_button_register , 会和 button_scan 有线程安全问题?,导致加入按键链表有的 按键 结构体数据可能不完整,被button_scan 打断,导致有问题
加下这两个函数互斥应该完美点。。。
The text was updated successfully, but these errors were encountered: