几乎一周后我运行了我的android项目,我收到了这条消息:
插件太旧,请更新到更新版本,或将ANDROID_DAILY_OVERRIDE环境变量设置为"a8faa180fc282060c9b8ec88f9bdcc9072121284"
如何更新我的插件?我正在使用android Studio 2.0.这是我的build.gradle项目文件
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0-alpha1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud) plugins dependencies android android-studio android-gradle-plugin
当我们创建一个共享内存时,我们使用shm_open()和ftruncate()运行.根据我的信息shm_open()创建一个共享内存区域.然后我们使用ftruncate()函数来配置共享内存区域的大小.
那么shm_open()当它还不知道尺寸时,如何首先创建内存区域?如果情况并非如此,我完全错了,请告诉我目的,shm_open()并ftruncate().提前致谢!
我无法将USART_1与蓝牙hc-05连接.微控制器是STM32F103RB.这是代码(我没有使用任何库)
#define APB2_FREQ 72000000
void USART1_Send(char* data)
{
unsigned int length = 0;
while(data[length] != '\0')
++length;
int i = 0;
while(i < length)
{
while((USART1_SR & 0x00000080) == 0); // wait if transmit data register is not empty
USART1_DR = data[i];
++i;
}
}
char USART1_Receive()
{
while((USART1_SR & 0x00000020) == 0); //wait for data to arrive
return USART1_DR;
}
void USART1_Init(int baudrate, short parity, short stop)
{
RCC_APB2ENR |= 0x00004004; // enable Port A, enable usart1 clock
GPIOA_CRH …Run Code Online (Sandbox Code Playgroud) 我想访问在内联手臂汇编中用C声明的局部变量。我怎么做?
可以这样访问全局变量,
int temp = 0;
Function(){
__asm(
".global temp\n\t"
"LDR R2, =temp\n\t"
"LDR R2, [R2, #0]\n\t"
);
}
Run Code Online (Sandbox Code Playgroud)
但是,如何访问局部变量?我尝试将局部变量的“ .global”更改为“ .local”,但是会产生错误(未定义对“ temp”的引用)。我正在使用的IDE是KEIL。
有什么想法吗?提前致谢。
我想使用 Nucleo STM32F103RB 在 master 中将 NSS 引脚设置为软件模式。但我有一些问题?
在参考手册中,他们说,
在 NSS 软件模式下,设置 SPI_CR1 寄存器中的 SSM 和 SSI 位。如果在输出模式下需要 NSS 引脚,则只应设置 SSOE 位。
现在,
为什么我们需要用 SSM 设置 SSI 位?
SSOE 位的目的是什么?
假设我们有以下继承类.
class A
{
public:
void virtual show()
{
cout << "I am A\n";
}
};
class B:public A
{
public:
void show()
{
cout << "I am B\n";
}
};
class C:public B
{
public:
void show()
{
cout << "I am C\n";
}
};
int main()
{
A *obj = new C();
obj->show();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在不创建任何其他对象的情况下,如何调用B类的show()函数?
我知道的一种方法是修改C类中的show(),
void show()
{
B::show();
cout << "I am c\n";
}
Run Code Online (Sandbox Code Playgroud)
这将首先调用B的show函数然后它将打印"我是C".但我不希望C中的show()完全执行.我希望B的show()能够直接执行.
它甚至可能吗?我们可以使用铸造或其他东西吗?
记住我不允许创建除已经创建的对象之外的任何其他对象,即main()中的C. 我今天在接受采访时被问到这个问题.
谢谢!
我刚刚开始了一个操作系统课程.所以我要问的问题可能是一个幼稚的问题,但没关系.我目前正在学习多线程.这是我的问题:每当我们使用pthread_create()创建一个线程时,为什么我们需要传递我们希望我们的线程在void*类型中运行的函数的参数?
例如,请考虑以下代码.
void *test(void* data)
{
...
}
int main()
{
int temp;
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_create(&tid, &attr, test, (void*)&temp);
}
Run Code Online (Sandbox Code Playgroud)
所以,在这里,
pthread_create(&tid, &attr, test, (void*)&temp);
Run Code Online (Sandbox Code Playgroud)
为什么我们需要将整数类型转换为void*.为什么不直接传递整数?同样地,而不是
void* test(void* data);
Run Code Online (Sandbox Code Playgroud)
为什么不这样,
void* test(int data);
Run Code Online (Sandbox Code Playgroud) 当我从main()调用包含无限循环的C函数时,它会在执行该函数之前在堆栈上推送一些寄存器.由于该函数包含无限循环,因此这些寄存器永远不会被弹出.
这是一个例子,
void My_Func (void)
{
int flag_1 = 1;
while(1)
{
if(counter > 5 && flag_1)
{
flag_1 = 0;
}
else if(counter > 550 && flag_1)
{
flag_1 = 0;
}
}
}
int main(void)
{
My_Func();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里的计数器是一个全局变量.
当我调用My_Func()时,它会在执行函数之前推送R4,R5,R6.反汇编看起来像这样,
0x080004BC B470 PUSH {r4-r6}
Run Code Online (Sandbox Code Playgroud)
然后功能执行开始.但由于函数内部存在无限循环,寄存器永远不会弹出.
有没有办法阻止KEIL IDE在执行函数之前推送寄存器,而不修改函数定义?
是否可以通过引用传递单个数组元素(以便传入的参数被修改)?例如,假设这是一个主要部分:
int ar[5] = {1,2,3,4,5};
test(&ar[2]);
Run Code Online (Sandbox Code Playgroud)
现在这是函数定义:
void test(int &p)
{
p = p + 10;
return;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码导致编译错误.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
const int SIZE = 100;
char input[SIZE];
while(1)
{
fgets (input, SIZE - 2, stdin); // input
printf("%d", strcmp(input, "exit")); //returining 10 instead of 0
if(strcmp(input, "exit") == 0)
{
printf("SHELL Terminated\n");
exit(0);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正面临一个问题.如果我在变量中输入exitinput,则函数strcmp()返回10,但它应该返回0并退出程序,因为exit等于exit.但事实并非如此.
我找不到问题.
我在一篇文章中读到,编译器更改了函数(具有相同名称)的名称(名称修改),以避免名称冲突.
考虑以下示例.
void fun(int x)
{
cout<<x<<endl;
}
void fun(float x)
{
cout<<x<<endl;
}
int main()
{
fun(10);
fun(10.5f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面是函数重载的一个非常简单的例子.在编译代码时,编译器将更改函数名称,以便链接器可以在两个不同的调用之间进行链接.
问题:修剪需要什么?
由于参数具有不同的数据类型,因此可能足以与正确的函数链接.为什么那么,编译器执行Name Mangling?
c ×4
c++ ×4
keil ×3
arm ×2
stm32 ×2
android ×1
assembly ×1
dependencies ×1
hc-05 ×1
inheritance ×1
linux ×1
master-slave ×1
naming ×1
overloading ×1
plugins ×1
polymorphism ×1
spi ×1
stm32f1 ×1
strcmp ×1
uart ×1