MagicARM2410,用QT控制跑马灯闪动(QT界面用designer做好了,驱动程序也有,其它的就不知道怎么做了)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MagicARM2410,用QT控制跑马灯闪动(QT界面用designer做好了,驱动程序也有,其它的就不知道怎么做了)相关的知识,希望对你有一定的参考价值。

参考技术A 就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。
总之呢,就是能够优化
关键在于两个地方:
1. 编译器的优化 (请高手帮我看看下面的理解)
在本次线程内, 当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值;
当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致
当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致
当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致
举一个不太准确的例子:
发薪资时,会计每次都把员工叫来登记他们的银行卡号;一次会计为了省事,没有即时登记,用了以前登记的银行卡号;刚好一个员工的银行卡丢了,已挂失该银行卡号;从而造成该员工领不到工资
员工 -- 原始变量地址
银行卡号 -- 原始变量在寄存器的备份
2. 在什么情况下会出现(如1楼所说)
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3). 多线程应用中被几个任务共享的变量

Qt的Q_UNUSED()函数的功能

目录

Qt Assistant(Qt 助手)

函数名直译过来是【不用的;从未用过的】。
碰到陌生的函数不要慌,直接Qt Assistant查一哈。

Q_UNUSED(name)
Indicates to the compiler that the parameter with the specified name is not used in the body of a function. This can be used to suppress compiler warnings while allowing functions to be defined with meaningful parameter names in their signatures.

翻译过来就是

指示编译器在函数体中不使用指定名称的形参。这可以用来抑制编译器警告,同时允许在函数声明中定义有意义的参数名。

其实到这里你就应该明白这个函数的作用了吧。

构建场景

未使用函数的参数,编译期正常来说会抛出警告(warring),而在部分场景下,我们这么做可能是为了扩展等等。那么又不想看到这么多warring。

那么在Qt中就可以通过Q_UNUSAED(a);表示让编译期忽略a变量的未使用情况。

其他一些平替方法

1、在函数声明中只写类型不写变量名;
2、 使用C语言的预处理指令。#pragma warning(disable: 4189)

参考

1、Qt Assistant(Qt 助手)

以上是关于MagicARM2410,用QT控制跑马灯闪动(QT界面用designer做好了,驱动程序也有,其它的就不知道怎么做了)的主要内容,如果未能解决你的问题,请参考以下文章

Qt程序调试之Q_ASSERT断言(条件为真则跳过,否则直接异常+崩溃)

android怎样实现跑马灯效果

用React实现上下跑马灯

clearTimeout消除闪动

C4D搭配椭圆动态及闪动控制动画效果

Qt之Q_PROPERTY宏理解