我正在使用飞思卡尔Kinetis K60并使用CodeWarrior IDE(我认为它使用GCC作为编译器).
我想将两个32位数相乘(这导致64位数)并且只保留高32位.
我认为ARM Cortex-M4的正确汇编指令是SMMUL指令.我更喜欢从C代码而不是汇编访问此指令.我该怎么做呢?
我想代码理想情况下是这样的:
int a,b,c;
a = 1073741824; // 0x40000000 = 0.5 as a D0 fixed point number
b = 1073741824; // 0x40000000 = 0.5 as a D0 fixed point number
c = ((long long)a*b) >> 31; // 31 because there are two sign bits after the multiplication
// so I can throw away the most significant bit
Run Code Online (Sandbox Code Playgroud)
当我在CodeWarrior中尝试这个时,我得到c的正确结果(536870912 = 0.25作为D0 FP号).我没有看到任何地方的SMMUL指令,乘法是3条指令(UMULL,MLA和MLA - 我不明白它为什么使用无符号乘法,但这是另一个问题).我也尝试过32的右移,因为这可能对SMMUL指令更有意义,但这并没有做任何不同的事情.
我现在已经陷入困境几次,无意中(无意中)在函数或方法定义中引用了全局变量.
我的问题是:有没有办法禁止python让我引用一个全局变量?或者至少警告我,我正在引用一个全局变量?
x = 123
def myfunc() :
print x # throw a warning or something!!!
Run Code Online (Sandbox Code Playgroud)
让我补充说,这对我来说典型的情况是使用IPython作为交互式shell.我使用'execfile'来执行定义类的脚本.在解释器中,我直接访问类变量来做一些有用的事情,然后决定我想在我的类中添加它作为一个方法.当我在解释器中时,我正在引用类变量.但是,当它成为一种方法时,它需要引用"自我".这是一个例子.
class MyClass :
a = 1
b = 2
def add(self) :
return a+b
m = MyClass()
Run Code Online (Sandbox Code Playgroud)
现在在我的解释器中运行脚本'execfile('script.py')',我正在检查我的类并输入:'ma*mb'并决定,这将是一个有用的方法.所以我修改我的代码,非故意复制/粘贴错误:
class MyClass :
a = 1
b = 2
def add(self) :
return a+b
def mult(self) :
return m.a * m.b # I really meant this to be self.a * self.b
Run Code Online (Sandbox Code Playgroud)
这当然仍然在IPython中执行,但它真的让我很困惑,因为它现在引用了先前定义的全局变量!
根据我的典型IPython工作流程,也许有人有建议.
我在Windows 8.1 64位计算机上运行python 2.7 32位.
我有Access 2013和我试图从python和pyodbc访问的.accdb文件.
我可以在64位ODBC管理器中创建64位DSN.但是,当我尝试从python连接到它时,我收到错误:
错误:(u'IM002',u'[IM002] [Microsoft] [ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序')
据推测,python只是在寻找32位DSN,并没有找到我创建的64位DSN.
当我尝试在32位ODBC管理器中创建32位DSN时,没有accdb文件的驱动程序(只是.mdb).
我想我需要一个32位ODBC驱动程序用于Access 2013文件(.accdb),但一直无法找到.
有可能做我想做的事吗? - 32位python访问Access 2013 .accdb文件?
我正在尝试读取二进制文件,结果令人困惑.
f = open('foo.dat','r')
data = f.read()
print len(data), f.tell()
Run Code Online (Sandbox Code Playgroud)
输出是:
61, 600
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?只读取前61个字节,但文件对象告诉我我在文件的末尾(文件长度为600字节).文件的其余部分发生了什么?
我只是尝试在Matlab中阅读它并且它读得很好所以我很确定数据文件没问题.
该文档提到了阻塞的一些内容:"请注意,在非阻塞模式下,即使没有给出大小参数,也可能返回的数据少于请求的数据." 我是否处于非阻塞模式?这似乎对文件无关紧要.如何切换到阻止模式?
更新 @John Machin - 是的!谢谢!看起来确实是这样.这是输出:
600, 600
'm\x1aN\x16\x8d\x1e\x96\x10h\x1a'
Run Code Online (Sandbox Code Playgroud)
'\ x1a'肯定在那里.
我正在开发一个Android项目.我的Eclipse项目发生了一些事情,我无法再"看到"项目资源管理器中的任何源文件.项目浏览器仅显示:
src(单击并尝试打开不产生任何东西 - 我可以右键单击并在新窗口中打开并看到更多,但仍然无法下降目录并查看文件)
根
的android.jar
usb.jar
maps.jar
我的java文件仍然在目录中.
看起来项目以某种方式被破坏了?我已经尝试删除.metadata/.plugins/org.eclipse.core.resources我发现的一些建议中的所有内容,但似乎没有解决它.我创建了一个新的测试项目,昨晚我创建它时看起来不错,虽然现在它显示了与上面相同的行为.我正在使用eclipse indigo服务版本1.见下图:
