小编gre*_*ggo的帖子

TCL的常规字符串引用

我正在编写一个实用程序(恰好在python中),它以TCL脚本的形式生成输出.给定python中的一些任意字符串变量(不是unicode),我想生成一个类似的TCL行

set s something
Run Code Online (Sandbox Code Playgroud)

...将TCL变量' s'设置为该精确字符串,无论其中包含什么奇怪的字符.没有变得太奇怪,我不想让输出比需要的更麻烦.我相信一个体面的方法

  1. 如果字符串不是空的并且只包含字母数字,而某些字符.-_(但绝对不是$"{}\)那么它可以原样使用;

  2. 如果它只包含可打印字符而没有双引号或花括号(并且不以反斜杠结尾),那么只需将{}它放在一边;

  3. 否则,""在使用\转义后放置它" { } \ $ [ ] ,并\nnn转义为非打印字符.

问题:是否需要在双引号内转义的完整字符集?我在文档中找不到这个.我是否错过了一些东西(我几乎错过了(2)的字符串不能以\结尾).

我知道还有许多其他字符串可以引用 {},但似乎很难轻易识别它们.此外,看起来非打印字符(特别是换行符)可以使用(2)如果您不介意它们确实存在于TCL输出中.

tcl quoting

17
推荐指数
2
解决办法
3万
查看次数

ARM strex 和 ldrex 中的原子操作 - 它们可以在 I/O 寄存器上工作吗?

假设我正在修改内存映射 I/O 寄存器中的一些位,并且另一个进程或 ISR 可能正在修改同一寄存器中的其他位。

ldrex 和 strex 可以用来防止这种情况吗?我的意思是,他们原则上可以,因为您可以 ldrex,然后更改位,然后将其 strex 回来,如果 strex 失败,则意味着另一个操作可能已更改 reg,您必须重新开始。但是strex/ldrex机制可以用在不可缓存的区域吗?

我在树莓派上尝试过这个,将 I/O 寄存器映射到用户空间,并且 ldrex 操作给我一个总线错误。如果我将 ldrex/strex 更改为简单的 ldr/str 它可以正常工作(但不再是原子的......)此外,ldrex/strex 例程在普通 RAM 上也可以正常工作。指针是 32 位对齐的。

那么这是 strex/ldrex 机制的限制吗?或者 BCM2708 实现有问题,或者内核设置它的方式有问题?(或者其他东西——也许我映射错了)?

arm atomic thread-safety

6
推荐指数
2
解决办法
1万
查看次数

标签 统计

arm ×1

atomic ×1

quoting ×1

tcl ×1

thread-safety ×1