在某些时候,我和一位同事从网上抓起了一个"示例"makefile,用于构建xmega芯片的嵌入式代码.我们发现这种体验非常令人沮丧.我们俩都不是专家,也不是新手.我们偶尔进行调整/调整.我们花了几个小时阅读制作手册和投掷飞镖试图做更严重的变化.
通常在我们建造的时候,我们总是从干净的一切开始.因为自动依赖生成似乎不能可靠地工作,我们刚刚了解到它更安全.由于它是一个嵌入式项目,在小型处理器上,编译实际上很快.这是在眨眼间完成的,这引出了我真正的问题:
如果我没有使用make来进行任何类型的依赖管理并利用增量构建,那么使用它而不是简单的shell脚本是否真的有意义?
我更有信心编写C代码,python和优秀的bash脚本.今天最近的挫败感,是试图将一些与FreeRTOS相关的源文件移到子目录中.make对我们来说唯一真正的优势是它是在OSX上安装的库存,而vi和QtCreator和XCode有一些能力与我们的makefile集成(但我可以创建一个非常小的makefile,在这里桥接).
我一直在研究Matt Nueberg的编程iOS 7书,并且正在努力理解与约束方向有关的东西.在本书的第28页,在本multiplier, constant
节中,作者说:
第一个属性设置为结果.
所以我读这个的方式是,当存在两个项目约束时,项目1是基于项目2的值导出或依赖的.
所以我有一个视图和一个子视图(按钮),我想水平居中按钮.所以我安排了我的视图和按钮,然后从按钮控制拖动到父视图:
并选择Center Horizontally
:
然后,如果我选择该约束,我会在右侧的属性检查器中看到以下内容:
这将超级视图显示为项目1,将按钮显示为项目2.这是否意味着它会尝试调整超视图的中心以匹配按钮的中心?那不是我想要的.或者我误解了第1项和第2项的含义?或者它是否意味着我做了控制 - 向后拖动,你应该从依赖拖到依赖,而不是像我那样依赖依赖到依赖?
我认为订单确实很重要,也就是说,它是第1项,也是第2项.因为有一个菜单选项来交换这两个.如果它只是一个对调整后的内容没有偏好的解算器,那就没有必要了.
我正在尝试将使用Facebook的KVOController的objc应用程序移植到Swift.我被鼓励将RC3看成是一种替代的,更加迅捷的方法.我已经阅读了一些博客,我很鼓励尝试一下.但是很多文档和博客似乎都集中在套接字和定时器上作为例子.所以我现在有两个简单的问题:
1)给出一个objc
片段,如:
[self.KVOController observe: self.site keyPath: @"programs" options: NSKeyValueObservingOptionInitial block:^(id observer, id object, NSDictionary *change) {
[self.tableView reloadData];
}];
Run Code Online (Sandbox Code Playgroud)
用RC3 API重写这个的简单方法是什么?self.KVOController unobserve: self.site
当视图卸载时,RC3等效于什么?
2)建议我使用Carthage来获取RC3代码.我可以混用一个Cartfile
安全与使用可可豆荚已经为项目Alamofire
和SwiftyJSON
?
key-value-observing reactive-cocoa swift carthage reactive-cocoa-3
我发现Swift
并NSData
成为一种沮丧的邪恶婚姻.我发现每次处理这件事情时,我觉得所有新发现的Swift安全都会消失.崩溃的数量(没有帮助的痕迹)没有帮助.
所以,我已经了解到,我可以UnsafeMutablePointer
通过执行以下操作来避免可怕的事情:
var bytes = [UInt8](count: 15, repeatedValue: 0)
anNSData.getBytes(&bytes, length=15)
Run Code Online (Sandbox Code Playgroud)
我还发现,我可以直接提取到奇异值:
var u32:UInt32 = 0
anNSData.getBytes(&u32, length=4)
Run Code Online (Sandbox Code Playgroud)
这导致两个中间问题:
1)我可以使用哪些东西比那里的硬编码常量更可靠.如果这是C,我只是用sizeof
.但我觉得我读,也许我应该使用strideof
代替sizeof
?这不会起作用[UInt8]
,不是吗?
2)文档(对于Swift)说这个参数应该是_ buffer: UnsafeMutablePointer<Void>
.那么这是如何工作的呢?我刚刚幸运吗?为什么我要这样做而不是更原生/托管[Uint8]构造?我想知道是否UnsafeMutablePointer
是一个协议,但它是一个结构.
大胆地直接读取值(而不是数组),我想也许我可以尝试另一种结构.我有一个6字节的结构,看起来像:
struct TreeDescription : Hashable {
var id:UInt32 = 0x00000000
var channel:UInt8 = 0x00
var rssi:UInt8 = 0x00
var hashValue:Int {
return Int(self.id)
}
}
Run Code Online (Sandbox Code Playgroud)
哪个实际上有效(在认为它没有,但最终做了一个干净,使一些崩溃消失)!
var tree = TreeDescription()
anNSData.getBytes(&newTree, length: 6)
Run Code Online (Sandbox Code Playgroud)
但这让我担心结构包装细节?为什么这样做?这件事我应该担心什么?
这一切对我来说都很有趣.我认为Swift从C中取出了ObjectiveC.
有几个类似的问题,但我认为应该有使用Swift3的iOS 10的最新答案,它不使用私有API,并且不依赖于您将图标限制为unicode表情符号.
我现在有三个动作的表行:
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let rename = UITableViewRowAction(style: .normal, title: "Rename") { (_, indexPath) in
self.renameEntry(indexPath)
}
let locate = UITableViewRowAction(style: .normal, title: "Locate") { (_, indexPath) in
self.locateEntry(indexPath)
}
locate.backgroundEffect = UIVisualEffect()
let delete = UITableViewRowAction(style: .default, title: "Forget") { (_, indexPath) in
self.deleteEntry(indexPath)
}
return [delete, locate, rename]
}
Run Code Online (Sandbox Code Playgroud)
但是,我想要的不是我所选择的大小和样式的居中文字的颜色方块,而是:
我尝试使用backgroundColor,但只是将图像平铺在按钮上,并没有改变文本的位置或颜色.所以它必须不仅仅是
theAction.backgroundColor = UIColor(patternImage: UIImage(named: "renameImage")!)
Run Code Online (Sandbox Code Playgroud)
有这样做的好方法吗?
我向一位学习同事展示了如何使用函数指针以及如何使用它们的数组.我放下以下代码,以便他可以进行索引调度:
typedef void (*VoidFunction)();
VoidFunction functions[] =
{editProgramName,
editProgramLength,
editProgramCycles,
editProgramNumberOfSets,
editProgramEditSets,
editProgramSave,
editProgramCancel};
// now dispatch
functions[scroll.arrayFocusIndex]();
Run Code Online (Sandbox Code Playgroud)
然后他问道......"如果没有typedef怎么办呢?" 在尝试了似乎可能有用的各种事情后,我发现了这些,我没有做任何线索.我发现的所有谷歌点击总是似乎使用typedef.有没有办法在没有函数指针的typedef的情况下进行内联?
我正在尝试参数化我的makefile目标.目前,它有一个
TARGET = main
Run Code Online (Sandbox Code Playgroud)
靠近顶部的声明.它从中获取SRC
列表以及执行许多其他操作.
我已经改变了我的C代码,因此我有多个不同的顶级.c文件,基本上可以获得变体版本.所以我想要做的就是做
make target1
Run Code Online (Sandbox Code Playgroud)
要么
make target2
Run Code Online (Sandbox Code Playgroud)
并改变TARGET
makefile中设置的内容.我很困惑如何实现这一目标.我想我可能会添加类似的东西
target1: all
TARGET=target1
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有太好用.是否有人这样做的一般模式?
我知道在python3中,你可以这样做:
>>> '{0} {1} {0}'.format(13, 42)
'13 42 13'
Run Code Online (Sandbox Code Playgroud)
所以你多次使用相同的参数.我想做相反的事情.我有一系列数字.我想以某种方式使用单个格式说明符打印它们,但是我没有看到一种方法来向format
语法指示给定标识符应该使用下一个N个参数.我可以使用减少
>>> reduce(lambda out,x: out + '{:02X}'.format(x), b'\x60\x0d\x1a\xdd', '')
'600D1ADD'
Run Code Online (Sandbox Code Playgroud)
但是我希望能有一个单一的格式调用,因为我想要放置一些其他格式的字符串.
我很好奇是否有一些更高级别的理论/方法/算法来解决我遇到的这个问题.
我正在研究网络路由问题(专有无线电网络).举例来说,我有一个由5个设备组成的网络.对于每个设备,我可以测量它能听到其他设备的程度.第0个根节点仅作为源使用.所以在表格形式中,我可能会得到类似的结果:
_0_ _1_ _2_ _3_ _4_
1 | 21 - 42 55 0
2 | 0 63 - 18 20
3 | 20 0 0 - 0
4 | 0 0 13 0 -
Run Code Online (Sandbox Code Playgroud)
每行表示该设备可以听到其他5个源的情况.我想要做的是对它们进行排序,以便每个设备从前面的元素中获得最佳的和信号.因此对于这个简单的情况,可能是排序1, 3, 2, 4
.但它也可以3, 1, 2, 4
.事实上,这第二个会更好,因为1可以听到0和3 3, 2, 1, 4
都可以.
我正在尝试确定我可以使用哪种算法来订购这些算法.有一些旅行推销员,我不需要"最好的".只是一个非常好的排序.我需要扩展到9个具有10个源的设备.
任何想法,帮助,推动,提示,提示赞赏.
我有一些字节数据想要被解析为流,因为序列中较早的字节控制下游字节的解释.所以BytesIO看起来像我想要的东西.但我也想使用struct模块提供的功能.但是struct的接口不是流式的.是否有一种聪明/惯用的方式来嫁给这两个人?
举例来说,这是一个示例数据块:
b'\n\x00\x02\x90\x10\x00\n\x00\x02`\x10\x00\n\x00\x02\x80\x10\x00'
Run Code Online (Sandbox Code Playgroud)
我想将前4个字节拉为无符号大端int(例如struct.unpack(fmt='>I'
).因为下一个字节是0x10,我知道应该再多一个字节,结果是0x00.然后重新开始,读取下一个4(0x0A000290),清洗,冲洗,重复.紧接在每个4字节id之后的字节触发各种下游读取(一些字节,一些短路).
我可以做的事情
stream = b'\n\x00\x02\x90\x10\x00\n\x00\x02`\x10\x00\n\x00\x02\x80\x10\x00'
while stream:
id = struct.unpack('>I', stream[:4])
stream = stream[4:]
...
Run Code Online (Sandbox Code Playgroud)
但这似乎不够优雅.