Eclipse有一个无头构建选项,他们在文档中说我们可以添加或替换工具选项
替换工具选项值:-T {toolid} {optionid = value}
附加到工具选项值:-Ta {toolid} {optionid = value}
前缀为工具选项值:-Tp {toolid} {optionid = value}
删除工具选项:-Tr {toolid} {optionid = value}
有人将如何找到构建选项的{toolid}值?
我想更改此命令的命令行参数
arm-none-eabi-objcopy -O ihex "KTV_Rear.elf" "KTV_Rear.hex"
Run Code Online (Sandbox Code Playgroud)
至
arm-none-eabi-objcopy -O binary "KTV_Rear.elf" "KTV_Rear.bin"
Run Code Online (Sandbox Code Playgroud)
我还找不到任何有关如何获取工具ID传递给-T命令的文档。任何帮助,将不胜感激。
====================更新=======================
我试图找出HighCommander4建议的工具ID是什么。在项目中搜索“工具ID”可以得到
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.1172133377" name="GNU ARM Cross C++ Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.707543027" name="GNU ARM Cross C++ Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker">
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.archiver.1908892168" name="GNU ARM Cross Archiver" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.archiver"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting.1903643389" name="GNU ARM Cross Create Listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting">
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.270131667" name="GNU ARM Cross C++ Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.1091026714" …Run Code Online (Sandbox Code Playgroud) 首先的问题是,在核心角色中使用核心蓝牙将数据发送到蓝牙 LE 设备的最佳方式是什么。需要处理数据,如果它在 UI 线程上运行,则需要足够的时间在 UI 线程上引起问题。用户将在手机应用程序打开的情况下启动该过程,然后继续使用该应用程序或关闭该应用程序并期望数据继续发送到设备。
我发现了 2 种非常糟糕的方法,它们似乎有效
这似乎源于 iOS 线程/调度队列以及 iOS 蓝牙内部结构。
蓝牙 LE iOS 应用程序作为核心角色连接到蓝牙 LE 设备。CBCentralManager 是根据苹果文档初始化的。队列定义为:
用于调度中心角色事件的调度队列。如果值为 nil,则中央管理器使用主队列分派中央角色事件。
正如vladiulianbogdan 对 Swift 的回答所建议的:为蓝牙中央管理器选择队列,我们应该为 CBCentralManager 创建一个串行队列。这似乎是有道理的,有一段时间我一直在遵循这个建议。此外allprog评论斯威夫特CoreBluetooth:在一个单独的线程应该CentralManager运行 表明,主队列将暂停,但其他队列不会,这是我所看到的是相反的。
在为蓝牙使用串行队列时,最好使用与主线程不同的队列。有一个问题:回调:
-(void)peripheralIsReadyToSendWriteWithoutResponse:(CBPeripheral *)peripheral
{
[self sendNextBluetoothLePacket];
}
Run Code Online (Sandbox Code Playgroud)
停止被调用。还有另一种方法可以检查外设是否准备好发送更多数据,CBPeripheral 有一个成员变量 canSendWriteWithoutResponse,如果可以发送则返回 true。此变量也开始重新调整 false 并且永远不会回到 true。
我从Sandeep Bhandari找到了这条评论,它说当应用程序进入后台时,所有队列线程都会停止,除非它们是苹果提供的后台模式之一。Biniou 发现他能够通过在视图控制器而不是应用程序委托中初始化来解决他的核心蓝牙背景问题。这对我来说没有意义。
我的应用程序确实在其 info.plist 中选择了核心蓝牙背景模式,因此它应该是这些背景模式之一。我发现当我的应用程序进入后台时,应用程序确实会继续处理数据。我看到来自每 100 毫秒运行一次的轮询循环的日志消息。
如果我从这些轮询循环中触发蓝牙 LE 写入,我就可以继续发送数据。问题是我无法确定发送数据的安全速率,要么速度很慢,要么数据有时会丢失。
我不确定如何最好地处理这个问题。任何建议,将不胜感激。似乎无论我在后台做什么,我都无法确定发送数据是否安全。
我看到这条评论 …
grand-central-dispatch ios core-bluetooth ios-bluetooth dispatch-queue
我们正在为 STM32 芯片上的 ARM Cortex M4 编写一些代码。
我的理解是 Cortex-M4 有一些 32 位指令,但这些不是 32 位 ARM 指令,它们只是一些特殊指令。我认为粘合剂是为了在 ARM 和拇指指令集之间转换。那么为什么链接描述文件需要胶水呢?
.text :
{
. = ALIGN(4);
*(.text) /* .text sections (code) */
*(.text*) /* .text* sections (code) */
*(.glue_7) /* glue arm to thumb code */
*(.glue_7t) /* glue thumb to arm code */
Run Code Online (Sandbox Code Playgroud)
由于处理器仅支持拇指指令,我可以删除glue_7和吗?glue_7t这样做会释放任何闪存吗?
我正在尝试构建一个具有6种构建风格的Android项目.每个只有一个独特的资源文件.Ant构建将文件从res/configs /复制到res/raw /以用于每种风格.我不想打破这个版本,我无法弄清楚如何让Gradle Android版本与这个文件夹结构一起使用.所以我添加了一个复制阶段来获取一个公共资源文件夹,然后添加一个用于每个风格的文件只有一个.
task cleanExtra(type: Delete) {
delete 'res-common'
delete 'res-dev'
delete 'res-qa'
delete 'res-sb'
delete 'res-test'
delete 'res-stage'
delete 'res-prod'
}
task setUpSharedResources(type: Copy) {
from 'res'
into 'res-common'
exclude '**/environment.properties'
}
task setUpDevResources(type: Copy ) {
from 'configs/dev/'
into 'res-dev/raw/'
}
task setUpQaResources(type: Copy ) {
from 'configs/qa/'
into 'res-qa/raw/'
}
task setUpSbResources(type: Copy ) {
from 'configs/sb/'
into 'res-sb/raw/'
}
task setUpTestResources(type: Copy ) {
from 'configs/test/'
into 'res-test/raw/'
}
task setUpStageResources(type: Copy ) {
from …Run Code Online (Sandbox Code Playgroud)