开源改变世界!!

新港口问题 #10

推推 grbl 2年前 (2023-02-08) 113次浏览
关闭
holla2040 打开了这个问题 2021 年 4 月 5 日 · 17条评论
关闭

新港口问题#10

holla2040 打开了这个问题 2021 年 4 月 5 日 · 17条评论

评论

新港口问题 #10

几年来我一直在关注 grblHAL 的进展。我正在考虑为 Teknic ClearCore 控制器启动一个端口,https: //www.teknic.com/products/io-motion-controller/ ,它使用 M4 SAM E53。

terjeio/grblHAL 自述文件指出“如果您愿意,您甚至可以添加自己的驱动程序。” 此模板链接已关闭https://github.com/terjeio/grblHAL/blob/master/templates/arm-driver

wiki 中的 HAL 开发参考,https://github.com/terjeio/grblHAL/wiki/Hardware-Abstraction-Layer- (HAL)—-developer-reference 已有 18 个月了。有更新的计划吗?或者这仍然是最新的。

我知道待定的 grblHAL 移动正在进行中,端口处于不同的开发阶段……

  1. 哪个端口遵循您希望在所有新端口中看到的目录/文件结构?
  2. 有模板可循吗?
  3. 日期为 2019 年的 HAL Dev Ref 页面是否接近当前代码修订级别?
  4. 当内核在 FreeRTOS 任务中运行时,您是否对 grblHAL 的性能进行了基准测试?
  5. 对于需要 CPU与其他非 grbl 相关任务进行多任务处理的一些更复杂的设计,您认为使用 FreeRTOS 有什么优势吗?

谢谢你的时间。

新港口问题 #10
贡献者
terjeio 评论了 2021 年 4 月 6 日  

terjeio/grblHAL 自述文件指出“如果您愿意,您甚至可以添加自己的驱动程序。” 此模板链接已关闭
我已更新此存储库中的自述文件以指向正确的位置

wiki 中的 HAL 开发参考,https://github.com/terjeio/grblHAL/wiki/Hardware-Abstraction-Layer- (HAL)—-developer-reference 已有18 个月了。有更新的计划吗?或者这仍然是最新的。

它不是最新的,应该更新。

哪个端口遵循您希望在所有新端口中看到的目录/文件结构?

目录结构取决于目标编译器/IDE 要求,文件命名与其他驱动程序一致。至少一个my_machine.h用于驱动程序配置和driver.c/driver.h用于主要驱动程序代码。我喜欢将通信代码和 eeprom/flash 设置存储代码保存在单独的文件中。如果支持多个板,它们应该有自己的引脚映射文件,如果需要,还应该有支持代码。

有模板可循吗?

是和否 –提供的模板适用于基本驱动程序,请查看(或使用)实际驱动程序以获取想法。驱动程序的复杂性可能会有很大差异,如果对于单板/单一配置,它可能相对简单 – 如果需要支持许多,它可能会变得复杂。

日期为 2019 年的 HAL Dev Ref 页面是否接近当前代码修订级别?

不 – 从那时起已经有很多补充。但架构基本相同,大量使用函数指针将所有内容粘合在一起。

当内核在 FreeRTOS 任务中运行时,您是否对 grblHAL 的性能进行了基准测试?

不,但我认为它不会受到太大影响,因为代码的关键部分是从中断运行的。我有一块 STM32F756 Nucleo-144 板,我打算为其编写驱动程序,这会将内核作为 FreeRTOS 任务运行,并具有网络支持,包括用于运行 ESP32 WebUI 的 http 协议。当我开始写这篇文章时,然后进行基准测试可能是个好主意。

对于需要 CPU 与其他非 grbl 相关任务进行多任务处理的一些更复杂的设计,您认为使用 FreeRTOS 有什么优势吗?

使用 RTOS 时添加网络协议可能更容易。除此之外,我不太热衷于让处理器承担其他任务,例如保持 UI 更新。将此类任务卸载到第二个处理器会更好吗?但是复杂的设计可能不需要处理器容量来影响中断延迟,从而影响目标应用程序的步进速率/抖动……

新港口问题 #10
作者

感谢您回答这些问题。在我决定支持哪个 IDE/开发环境之后,我将开始在端口上工作。学习 Arduino 提供的工具链。我已经将我的嵌入式开发迁移到在 docker 容器中运行。抓住了你的电子邮件地址,也知道了。

新港口问题 #10
作者

我的 Teknic ClearCore 端口即将推出。我实现了流和 nvs 存储。HAL文档有什么进展吗?谢谢。

新港口问题 #10
贡献者

HAL文档有什么进展吗?

到目前为止,只有在我的脑海里——我已经为一项相当大的任务做好了准备,这取决于我如何确定它的范围。最近,我扩展了 ABC 电机的辅助 I/O 支持和简化的引脚映射,包括重新映射到联动/方轴。完成后(一些测试仍然存在)我真的应该开始编写文档……

结合用户代码可以“挂钩”到 HAL 和核心部分的事实,这意味着可以将整体视为一种可以由用户代码使用的操作系统。所以我必须决定如何处理文档,只针对驱动程序开发人员或一般也可能使用现有驱动程序并添加他们自己的代码(插件)的开发人员?你怎么认为?

新港口问题 #10
贡献者

我已经为核心生成了原始文档,您现在可以在这里找到它。

是 HAL 位。

新港口问题 #10
作者

经过漫长的一天,这里已经很晚了。我早上看看这个。

我将回答您关于谁是文档的目标受众的问题。我怀疑更多的开发人员会希望使用 grblHAL 进行端口修改和定制。如果文档对他们没有帮助,这个群体会更大并且很可能会产生更多问题。

端口开发人员,像我一样,具有一般的 grbl 内部知识,只需要了解回调需要完成什么以及核心将如何使用它。

我真的很累,现在要关机了。

新港口问题 #10
作者

您的原始文档是一个好的开始。使用 doxygen 也很好,因为它的可理解源代码嵌入在代码中,也可以在那里阅读。我将重温 doxygen 的使用并将其添加到我的端口中。

新港口问题 #10
作者

对于C代码,启用doxygen的调用图是否会生成调用树图?https://youtu.be/5G1zUpNFmEY?t=3617

新港口问题 #10
贡献者

很可能就像我相信在其他地方的 C 代码文档中看到的那样。我不知道这将如何与 HAL 函数指针一起工作。有待以后调查。

请注意,今天是我第一次接触这个工具,所以我正处于学习阶段。我每隔几分钟就推送一次更新,看看我添加的详细信息是如何显示的……

顺便说一句,您希望我首先扩展文档的任何部分吗?

新港口问题 #10
作者

就我个人而言,作为端口开发人员,我希望将 HAL 回调函数记录在驱动程序中。

新港口问题 #10
作者

至于我的doxygen知识,我可能比你知道的少。

新港口问题 #10
贡献者
terjeio 评论了 2021 年 6 月 18 日  

就我个人而言,作为端口开发人员,我希望将 HAL 回调函数记录在驱动程序中。

我来说,从核心调用驱动程序不是回调,从驱动程序返回核心的调用是。

一个例子可能是即将完成的限制 API

我的思维方式和语言使用方式有问题吗?我不是以英语为母语的人……

新港口问题 #10
作者

好的,我认为回调的情况正好相反。由于内核是主执行循环,驱动程序在 driver_init 中设置内核的函数指针以回调驱动程序以获取额外信息/执行。

例如,
hal.stream.read = serialGetC;

我的端口实现了由核心调用的 serialGetC,因此它是一个回调。这是我对“回调”一词的理解。

新港口问题 #10
贡献者

我的端口实现了由核心调用的 serialGetC,因此它是一个回调。这是我对“回调”一词的理解。

我的理解是相反的,回调通常是异步发生的事情,例如对中断处理程序的调用。grblHAL 中的大多数回调实际上是由中断触发的,但是有些回调用于枚举核心无法直接访问的数据。例如,enumerate_pins 处理程序使用回调来获取枚举数据,而无需构建大型数据结构来保存它。

当发出调用并立即返回结果时,它不是回调,即使它是通过函数指针。

所以 IMO 上面链接中的这个声明显然是错误的:

在 C 中,回调函数是通过函数指针调用的函数。

指向驱动程序的函数指针本来可以是简单的静态调用,但代价是失去了在运行时切换功能的自由。通过函数指针传递调用并不会神奇地将它们变成回调。

新港口问题 #10
作者

我明白你的意思。最终,内核和驱动程序之间的交互是通过函数指针完成的,这对于 C 来说是很正常的。让我们继续进行更重要的工作。感谢您的讨论。请关闭此问题。

新港口问题 #10
贡献者

好的,那么我想现在应该继续在 hal.h 文件中自上而下添加文档。其中一些会带我进入其他文件,因此需要一些时间。如果有任何不清楚的地方,请大声说出来。