小编Cla*_*dio的帖子

静态全局变量和静态volatile变量之间有什么区别?

我在文件范围中使用了静态全局变量和静态volatile变量,

两者都由ISR和主循环更新,主循环检查变量的值.

在优化期间,全局变量和volatile变量都不会被优化.因此,全局变量不是使用volatile变量来解决问题.

那么使用全局变量而不是volatile是否合适呢?

使用静态volatile的任何具体原因??

任何示例程序都是可观的.

提前致谢..

c static global interrupt volatile

28
推荐指数
3
解决办法
9万
查看次数

如果存在多个存储库而且两者都不是默认存储库,如何在Trac中创建git变更集的链接?

在使用一个关联的存储库时,我习惯使用changeset关键字和commit的SHA1哈希来引用我的Trac票证中的更改集,如下所示:

[changeset:af54b6d]
Run Code Online (Sandbox Code Playgroud)

这会给我一个指向相应变更集的超链接.

现在我正在开发一个项目,其中相同的Trac环境(版本0.12)有多个与之关联的git存储库,没有人 - 也不应该 - 是默认值,因此上述语法不再起作用.

任何人都可以帮我弄清楚如何在特定的存储库中引用变更集?

谢谢!

git trac hyperlink changeset

18
推荐指数
1
解决办法
3473
查看次数

如何将编译标志传递给cmake初始编译器测试?

我正在尝试使用CMake构建一个项目,该项目使用MSPGCC交叉编译器来实现MSP430微控制器.要使用它成功编译任何简单程序,我们需要传递一个指示目标处理器的编译标志,否则它会像这样失败:

$ msp430-gcc -o test test.c
In file included from test.c:1:0:
/usr/local/lib/gcc/msp430/4.6.3/../../../../msp430/include/msp430.h:813:2: warning: #warning Unable to identify and include MCU header, use -mmcu=MCU [-Wcpp]
/usr/local/lib/gcc/msp430/4.6.3/../../../../msp430/bin/ld: cannot open linker script file memory.x: No such file or directory
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

因此,如果我使用-mmcu开关指示处理器,它可以正常工作.问题是,虽然我已经在我的CMakeLists.txt文件中指定了这个:

cmake_minimum_required (VERSION 2.6)

project (test-project C)

set (SOURCES
  test.c
  )

add_executable (test-project ${SOURCES})
set (CPU_FLAG "-mmcu=msp430f148")

set (CMAKE_C_FLAGS ${CPU_FLAG})
set (CMAKE_EXE_LINKER_FLAGS ${CPU_FLAG})
Run Code Online (Sandbox Code Playgroud)

CMake的抱怨编译器测试失败编译一个简单的程序,我敢打赌,因为它可能是发生未使用-mmcu开关(注意有关无法打开链接脚本文件memory.x消息):

$ cd ~/git/test-project
$ …
Run Code Online (Sandbox Code Playgroud)

cmake cross-compiling msp430

9
推荐指数
1
解决办法
7570
查看次数

GCC,ARMboot - 创建没有任何库和任何操作系统的独立应用程序

我有一个嵌入式硬件系统,其中包含一个基于ARMboot的引导加载程序(与Uboot和PPCboot非常相似).

此引导加载程序通常用于从闪存加载uClinux映像.但是,现在我正在尝试使用此引导加载程序来运行独立的helloworld应用程序,它不需要任何链接库.实际上,它只包含while(1){}main函数中的代码.

我的问题是我无法找出我应该使用哪些GCC设置来构建一个独立的格式正确的二进制文件.

我使用以下构建命令:

cr16-elf-gcc -o helloworld helloworld.c -nostdlib
Run Code Online (Sandbox Code Playgroud)

产生警告信息:
警告:找不到条目符号_start; 默认为00000004

此后,在引导加载程序中,我上传生成的应用程序并在某个地址启动它:

tftpboot 0xa00000 helloworld
go 0xa00004
Run Code Online (Sandbox Code Playgroud)

但它不起作用:(系统重新启动.

通常它应该挂起(因为while(1)).

c embedded gcc arm bootloader

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

glibc中的哪个函数调用main函数

我试图了解Linux如何启动程序.我在某处读到glibc中的某些函数调用main函数.使用callgrind进行分析并查看Kcachegrind中的调用图,我看到below main哪些调用main.但是我不明白这个,一个函数不能这样命名.所以我的问题是glibc中的哪个函数实际上启动了main函数.

c linux gcc glibc

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

使用新式语法连接重载的PyQT信号

我正在设计一个自定义小部件,它基本上是一个包含可配置数量的QCheckBox按钮的QGroupBox,其中每个按钮都应该控制由QBitArray表示的位掩码中的特定位.为此,我将QCheckBox实例添加到QButtonGroup,每个按钮都给出一个整数ID:

    def populate(self, num_bits, parent = None):
        """
        Adds check boxes to the GroupBox according to the bitmask size
        """
        self.bitArray.resize(num_bits)
        layout = QHBoxLayout()

        for i in range(num_bits):
            cb = QCheckBox()
            cb.setText(QString.number(i))
            self.buttonGroup.addButton(cb, i)
            layout.addWidget(cb)
        self.setLayout(layout)
Run Code Online (Sandbox Code Playgroud)

然后,每次用户单击self.buttonGroup中包含的复选框时,我都希望通知self.bitArray,以便相应地设置/取消设置数组中的相应位.为此,我打算将QButtonGroup的 buttonClicked(int)信号连接到QBitArray的 toggleBit(int)方法,并且尽可能使用pythonic,我想使用新式信号语法,所以我尝试了这个:

self.buttonGroup.buttonClicked.connect(self.bitArray.toggleBit)
Run Code Online (Sandbox Code Playgroud)

问题是buttonClicked是一个重载信号,因此还有buttonClicked(QAbstractButton*)签名.事实上,当程序执行时,我单击一个复选框时出现此错误:

The debugged program raised the exception unhandled TypeError
"QBitArray.toggleBit(int): argument 1 has unexpected …
Run Code Online (Sandbox Code Playgroud)

python signals-slots pyqt4

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

不能执行二进制文件

我有一个二进制可执行文件,它是我下载的学术软件包的一部分.我似乎无法让它运行,我无法访问源代码.我尝试过以下的事情.有什么想法吗?

非常感谢.

$ chmod +x random_cell
$ ./random_cell
-bash: ./random_cell: cannot execute binary file
$ file random_cell
random_cell: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped
$ ldd random_cell
random_cell: is not an object file
$ uname -m
x86_64
Run Code Online (Sandbox Code Playgroud)

binary executable ldd

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

使用git filter-branch删除不需要的文件的正确方法,而没有git rm失败

我有一个SNMP代理项目,其中相关的MIB文件(*.smiv2文件)与它一起开发,但现在我想要它们在一个单独的git存储库中.

为了不丢失任何MIB文件历史,因为它们不是在现在的同一目录中启动,我不能只使用--subdirectory-filterfilter-branch,所以我尝试了--filter-index基于这个问题的方法.这个想法是删除所有没有结束的文件.smiv2(显然是在原始项目的新克隆上,在过程结束时将其推送到我的新MIBs回购).

为了简单起见,我选择使用ls-filesover ls-tree,而不是:

git filter-branch --prune-empty --index-filter 'git ls-tree -r --name-only \
--full-tree $GIT_COMMIT | grep -v ".smiv2$" | xargs git rm --cached \
--ignore-unmatch -r'
Run Code Online (Sandbox Code Playgroud)

我用过这个:

git filter-branch --prune-empty --index-filter 'git ls-files | \
grep -v ".smiv2$" | xargs git rm --cached --ignore-unmatch'
Run Code Online (Sandbox Code Playgroud)

但是在第一次提交中任何一个都失败了,因为它看起来git rm根本没有提供任何参数(--ignore-unmatch如果找不到提供的参数,我认为会正常工作,但是在没有提供参数的情况下不会这样做):

$ git filter-branch --prune-empty --index-filter 'git ls-files | \
>     grep -v ".smiv2$" | xargs git rm --cached …
Run Code Online (Sandbox Code Playgroud)

git git-filter-branch

5
推荐指数
2
解决办法
5853
查看次数

如何从BroadcastReceiver类引发警报对话框?

我在Activity课堂上使用过计时器方法.在那个方法中,我有一个从Activity类到BroadcastReceiver类的意图.

BroadcastReceiver课程将使用后台每15分钟拨打一次AlarmManager.

当我打电话给BroadcastReceiver课时,我想提出一个AlertDialog.

public void timerMethod(){
    Intent intent = new Intent(Activity.this,
      BroadcastReceiverClass.class
    );

    PendingIntent sender = PendingIntent.getBroadcast(
      QualityCallActivity.this,0, intent, 0
    );

    // We want the alarm to go off 30 seconds from now.
    long firstTime = SystemClock.elapsedRealtime();

    AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
    firstTime, 60*1000, sender);
}
Run Code Online (Sandbox Code Playgroud)

BroadcastReceiverClass.java

public void onReceive(Context context, Intent intent)
{
    dialogMethod();
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能提高一个AlertDialogBroadcastReceiver类从后台进程?

android broadcastreceiver

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

如何从git获取特定的内核版本到extraversion数字

我有一些适用于特定平台的补丁,应该适用于内核版本2.6.32.3.现在我正在使用git,我已经有了正式内核树的克隆,我想有一个私有分支来维护这个补丁.当我要求标签列表时,git tag -l我得到了2.6.32系列的标签:

v2.6.32
v2.6.32-rc1
v2.6.32-rc2
v2.6.32-rc3
v2.6.32-rc4
v2.6.32-rc5
v2.6.32-rc6
v2.6.32-rc7
v2.6.32-rc8
Run Code Online (Sandbox Code Playgroud)

kernel.org的HTTP存储库中,可以将所有特定的完整源代码和补丁程序包压缩到外部数字(在我的例子中,最后是.3),那么我们如何通过git直接获得相同的内容呢?为什么列出的标签只显示"-rcX"用于外向?

我在网上搜索过,找到了同样麻烦的人,但他们也没有得到答复.

git linux-kernel

4
推荐指数
1
解决办法
4186
查看次数