我在 MacBook Pro 上使用 gitlab-runner 和 Docker。我使用 gitlab.com 来托管我的 git 存储库。我已经配置了一个存储库,以便每当提交被推送到存储库时就执行管道。该管道有两个任务:显示一些信息,以及克隆一个单独的存储库作为依赖项。
这是第一个作业的输出:
Running with gitlab-runner 12.2.0 (a987417a)
on old_gen_runner 6fsjs96e
Using Docker executor with image gcc-arm_4_7-2013q3:3.0 ...
Using docker image sha256:5d4741a428654beb44a3c004822e4d2ceededc88f22ec1ec7f45dedf707a0302 for gcc-arm_4_7-2013q3:3.0 ...
Running on runner-6fsjs96e-project-13664495-concurrent-0 via my_laptop.local...
Fetching changes with git depth set to 50...
Initialized empty Git repository in /builds/staging-fw/my-project/.git/
Created fresh repository.
From https://gitlab.com/staging-fw/my-project
* [new branch] master -> origin/master
Checking out 722c2c38 as master...
Skipping Git submodules setup
$ python /scripts/info.py
Printing job info...
Builds …Run Code Online (Sandbox Code Playgroud) 我正在努力使用 GCC 将 printf 从 newlib 正确实现到我的 esp32 中。
我已经阅读了 newlib 文档,它为我提供了有关如何调用 printf 的一般信息,但没有向我解释后端实现。
根据我当前的研究,我确定 printf 将格式化字符串输出到 STDOUT。在 PC 上,这对我来说更容易理解,因为有一个控制台窗口可以显示 printf 的格式化输出,但是在嵌入式系统上,我知道您必须告诉库将 printf 的格式化输出重定向到哪里,这就是我正在想办法。
再次,根据我的研究,我了解到需要一些功能来完成此任务,特别是功能_write。
我发现如何弥合 printf 和使用该_write函数之间的差距非常困难。我希望这里有人能帮助我理解如何正确实现 printf。
如果我错过了一些清楚解释这一点的文档,那么请将我重定向到该文档。我尝试阅读 newlib 文档以及 GCC 相关文档,但没有真正提到如何使用 printf,但是有大量关于如何调用 printf 和格式化字符串的文档,但这部分很简单。我需要知道如何从 MCU 的 STDOUT 获取格式化字符串。
谢谢大家!
我一直在阅读 ARM 信息中心的各个部分以尝试找到我的答案,但是我发现文档让我感到困惑,所以我希望这里有人可以提供帮助。
我知道 Cortex-M 处理器中有两个堆栈:
我试图弄清楚 ARM 内核如何使用每一个。
ARM 信息中心中讨论 Cortex-M3 时的文档说明如下:
主堆栈在复位时使用,并且始终在处理程序模式下使用(进入异常处理程序时)。进程堆栈指针仅在线程模式下可用作当前堆栈指针。
好的,这告诉我 MSP 在重置时使用。但是,文档还说明了以下内容:
用于执行应用软件。处理器退出复位后进入线程模式。
用于处理异常。处理器在完成所有异常处理后返回线程模式。
好吧,这就是让我困惑的地方。如果在复位时使用MSP,并且总是在Handler模式下使用,而PSP在线程模式下使用,那么如果处理器在复位时处于线程模式,如何在复位时使用MSP?