用keil HAL库方式建立了一个 stm32f103c8的RT-thread工程,通过编译实验发现,申请一个信号量消耗了32个字节。真的是这样吗,用单片机的话一个信号量32个字节感觉很大很浪费了。
查看更多
用c8还是别用hal库了,体积太大,用标准库。我用stm32f103cb,就是c8的128kROM版本,标准库+RT nano3.1.3目前感觉可以
三十二个字节就很大浪费了吗,看来楼主的应用对资源非常敏感了
发布 问题
分享 好友
手机 浏览
回到 顶部
你工程中一般怎么用线程同步呢,假设需要线程同步的任务比较多,信号量很吃资源啊感觉,用hal库是因为简单--,用cube生成就行,标准库跟那个也一样啊,只不过是不要的加进去,不需要的,不加,体积会差别很大吗。
@sisq19 hal空白工程编译出来就两三千字节了,标准库只有四百多字节,而且随着更多外设的使用,hal库更高的抽象封装比标准库占用更多内存和函数开销,hal的外设句柄设计内存占用比标准库大了不少的,标准库初始化用的结构体只是用一次就释放了。信号量是最基本的同步方式了吧,如果还嫌内存占用大,我有个思路但是没验证过,就是用事件集,一个事件集可以表示32个事件,功能上相当于可以替代32个二值信号量,注意是二值只有0和1,如果你的信号量会超过1那也没法用事件集了。我只是不知道如果大量线程都塞在一个事件集上会不会有什么隐患或性能问题,而且事件集的recv函数比信号量take函数参数多了一串,写起来略麻烦,我是只有一个线程需要同时响应三个信号才用的事件集,其他都用信号量。