embedded - 如何使普通的 C 库在嵌入式环境中工作?
问题描述
最近有人问我如何在嵌入式环境中使用 C 库(在本例中为Cello),但我不确定如何去做。
说一个库如果能在嵌入式环境下编译就可以用,对吗?我是否应该关心使库更轻量级或类似的东西?
任何建议表示赞赏。
解决方案
并非所有可以编译的库都可以在嵌入式环境中使用。使用malloc
和free
(或它们的 C++ 对应物)的库是危险的,因此应小心处理。由于内存分配失败,这些库可能会导致不确定的行为。
标准 C STD 可能完全针对嵌入式设备进行编译,但这并不意味着您将有很多使用printf
or scanf
。因此,在您询问是否可以编译它之前,一个更好的问题是您是否应该使用它。大提琴似乎是一个有趣的实验,但不是一个稳定的平台来开发真正的东西。但是可以做到这一点,其中一个例子就是Espruino。
大多数时候,将库重写为“轻量级”或更重要的是在嵌入式环境中:静态分配是一个坏主意。你可能没有那些人那么聪明,或者不会投入时间来创建一个完整的功能嵌入式分叉,它与原始分叉一样稳定,甚至更好。不要被一个有趣的小项目劝阻,但不要依赖它来完成一个真正的项目。
另一个问题可能是库对于您的微控制器来说太大了。Atmega32a 只有 32KB 的可编程闪存。举一个 C++ 的例子:即使对于它提供的所有高度可用的工具,boost 也不适合那个空间。
推荐阅读
- android - 折叠工具栏和卡片视图格式不正确
- excel-formula - 在公式中连接 CHAR(10) 忽略换行符
- python - 如何获得某个标记后的线?
- django - django-heroku 和 psycopg2 已安装,但显示“import django_heroku ModuleNotFoundError: No module named 'django_heroku'”
- oracle - PL/SQL 函数未知编译错误
- flutter - 在 Flutter 中定位两个浮动操作按钮
- c# - 仅在不为 NULL 或为空时进行属性验证
- kubernetes - 使用部署类型时如何使traefik绑定主机服务器的80和443端口
- javascript - 使用 javascript 变量设置 img src 以在 Google Maps InfoWindow 中使用
- sql-server - 如何在数据网格中显示数据