小编Epi*_*Adv的帖子

使用ARM Cortex-M4和gcc编译器进行定点数学运算

我正在使用飞思卡尔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指令更有意义,但这并没有做任何不同的事情.

gcc codewarrior arm cortex-m3

8
推荐指数
1
解决办法
4985
查看次数

Python警告我或阻止我使用全局变量

我现在已经陷入困境几次,无意中(无意中)在函数或方法定义中引用了全局变量.

我的问题是:有没有办法禁止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工作流程,也许有人有建议.

python ipython

7
推荐指数
1
解决办法
1416
查看次数

32位pyodbc读取64位访问(accdb)

我在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文件?

python ms-access odbc

4
推荐指数
2
解决办法
8660
查看次数

Python使用read停止读取文件

我正在尝试读取二进制文件,结果令人困惑.

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'肯定在那里.

python

3
推荐指数
1
解决办法
3215
查看次数

在Eclipse android项目中看不到项目资源管理器中的文件

我正在开发一个Android项目.我的Eclipse项目发生了一些事情,我无法再"看到"项目资源管理器中的任何源文件.项目浏览器仅显示:

src(单击并尝试打开不产生任何东西 - 我可以右键单击并在新窗口中打开并看到更多,但仍然无法下降目录并查看文件)

的android.jar

usb.jar

maps.jar

我的java文件仍然在目录中.

看起来项目以某种方式被破坏了?我已经尝试删除.metadata/.plugins/org.eclipse.core.resources我发现的一些建议中的所有内容,但似乎没有解决它.我创建了一个新的测试项目,昨晚我创建它时看起来不错,虽然现在它显示了与上面相同的行为.我正在使用eclipse indigo服务版本1.见下图:

截图

java eclipse android

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

标签 统计

python ×3

android ×1

arm ×1

codewarrior ×1

cortex-m3 ×1

eclipse ×1

gcc ×1

ipython ×1

java ×1

ms-access ×1

odbc ×1