小编Lun*_*din的帖子

使用 <stdatomic.h> 在 C11 GCC 中使数据读/写原子化?

我从此处此处的 SO 线程等了解到,假设多线程应用程序中的数据读/写在操作系统/硬件级别是原子的是不安全的,并且可能会导致数据损坏。我想知道在 Linux 上使用 C11 库和 GCC 编译器来实现int变量原子读写的最简单方法。<stdatomic.h>

如果我当前int在线程中有一个分配:messageBox[i] = 2,如何使该分配原子化?同样适用于阅读测试,例如if (messageBox[i] == 2).

c multithreading atomic c11

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

C中的变量定义忽略

码:

int main()  
{
  int a=1;
  switch(a)
  {
    int b=20;

    case 1:
    printf("b is %d\n",b);
    break;

    default:
    printf("b is %d\n",b);
    break;
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:当b的声明发生在这里时,它为b打印一些垃圾值为什么b在这里没有用20初始化?

c variables

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

按钮控件中的嵌入代码(<%=%>)

我正在开发一个项目,我正在使用它<%= getString("key")%>来动态获取相应的文本.

当我在简单的p标签中使用它时,这很有用,但是我找不到使用Button/Label等控件的方法.

有什么办法,除了打电话

Mybutton.Text = getstring("key");
Run Code Online (Sandbox Code Playgroud)

动态添加文字?

我们的想法是getString检索af语言代码,并根据该代码获取适当语言的字符串.

我一直在环顾四周,但我遇到的只是在aspx页面中直接使用嵌入式代码标签,而不会将其剪切为buttontext.

c# asp.net

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

在C中寻址

#include<stdio.h>
#include<stdlib.h>   
int main(int argc, char *argv[])
{
    int x = 2;
    int *pointer2 = &x;
    int number = &x;
    printf("%x\n",number );
    printf("%x\n",number+1 );
    printf("%x\n",pointer2 );
    printf("%x\n",pointer2+1);

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我从gcc得到一个警告,"初始化从指针生成整数,没有强制转换[默认情况下启用]",但是当我编译时,得到以下输出:

5da24540
5da24541
5da24540
5da24544
Run Code Online (Sandbox Code Playgroud)

很明显,上面的事情没有发生,因为我们可以在输出的前两行看到地址只增加1而第二种情况下增加4.请解释并返回可以分配给其他变量的地址,如int或它是一个自我指针,只能指定给指针类型.

c

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

模拟输入引脚PA8,PA11和PA12在STM32F103RB上不工作

处理一个简单的ADC项目,从多个通道上的分压器读取电压.我在商用和制作精良的PCB上使用STM32f103rb.我正在读PORTA上的引脚,以下引脚工作并返回电压:

PA0,PA1,PA4,PA5,PA6,PA7.

但是,以下引脚不起作用并返回大约2000-2700的原始值:

PA8,PA11和PA12.

该项目的性质以及PCB具有固定设计的事实意味着我们坚持使用这些引脚选择.数据表非常具体,可以将这些引脚用作AIN.所有设置和配置均按照标准STM32进行,取自基本示例代码并根据我们的目的进行修改.包含的代码是我们制作的调试版本,试图找到原因但无济于事.

已经测量了引脚上的电压,并且对于分压器的类型是正确的.

任何帮助将不胜感激.

    /* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stdio.h"
#include "stdlib.h"

// Standard STM peripheral config functions
void RCC_Configuration(void);
void GPIO_Configuration(void);

// ADC config - STM example code
void NEW_ADC_Configuration(void);

// Function to read ADC channel and output value
u16 NEW_readADC1(u8 channel);


// Variables
double voltage_su;          // Variable to store supply voltage
double voltage7;
double voltage8;

//*****************************************************************************
// Main program
int main(void)
{
    // Initialise peripheral modules
    RCC_Configuration();
    GPIO_Configuration();
    NEW_ADC_Configuration();

    // Infinate loop
    while (1) …
Run Code Online (Sandbox Code Playgroud)

c embedded stm32 adc

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

如何在画布中绘制线条

我想以下面的方式在画布上的圆圈内绘制一些线条.

我不知道如何绘制如下所示的线条.但我掌握了在画布上绘制线条和弧线的基本知识.如何进行?

在此输入图像描述

javascript jquery html5 canvas html5-canvas

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

使用memcpy时重叠的含义

我试图理解memcpy()C库中定义的函数<string.h>

句法: void *memcpy(void*dst,const void*src,size_t n);

我知道这个函数用于将指针指向的内存的内容复制到指针指向src的位置,dst并返回指针指向的地址dst.

我无法理解以下重要声明memcpy():

  • 使用时memcpy(),内存地址不应重叠,如果重叠,memcpy()则未定义.

另一个查询是:传递给函数的第三个参数的size_t n值是否总是一个整数值?

c overlap memcpy

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

如何写一个memcpy函数完全MISRA:2012兼容?

我写了这个memcpy函数,但我仍然需要禁用规则11.5和11.8.是否有完整的MISRA:2012兼容解决方案?

#pragma cstat_suppress="MISRAC2012-Rule-21.6" // Uses of stdio.h were found.
#include <stdio.h>

#include <stdint.h>
#include <string.h>
#include <stdlib.h>

extern int main(void);

static int_least8_t _memcpy(void *dst, const void *src, const size_t length)
{
    #pragma cstat_disable="MISRAC2012-Rule-11.5" // A conversion from a pointer to void into a pointer to object was found.
    int_least8_t* destination = (int_least8_t*)dst;
    #pragma cstat_disable="MISRAC2012-Rule-11.8" // A cast that removes a const or volatile qualification was found.
    const int_least8_t* source = (int_least8_t*)src;
    #pragma cstat_restore="MISRAC2012-Rule-11.5","MISRAC2012-Rule-11.8"

    for (size_t i = 0; …
Run Code Online (Sandbox Code Playgroud)

c qualifiers misra void-pointers

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

替代printf参数有限吗?

Misra 2004有以下规则:

Rule 16.1: Functions shall not be defined with variable numbers of arguments
Run Code Online (Sandbox Code Playgroud)

因此,类似的功能printf不能与规则16.1一起使用.

uint32_t debug_print(char *format, ...)
{
   int int_ret_val=0;

   uint32_t ret_val = ERR_NO_ERROR;
   va_list arguments;
   va_start(arguments, format);

   ret_val = vprintf(format, arguments);

   va_end(arguments);

   return ret_val;
}
Run Code Online (Sandbox Code Playgroud)

我寻找替代方案,但没有找到任何.

用于记录字符串格式化消息(" %d,%f,..")的所有c系列命令是否都使用变量列表?

c printf misra variadic-functions

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

.c文件是否应包含.h文件已包含的内容?

以下是#include来自Google的C++风格指南的部分:

如果您依赖bar.h中的符号,请不要指望您包含foo.h这个(当前)包含bar.h:自己包含bar.h,除非foo.h明确表明其意图为您提供bar.h的符号.

但是,相关头中存在的任何包含不需要再次包含在相关的cc中(即,foo.cc可以依赖于foo.h的包含).

当我读到这篇文章时,这些​​句子似乎是矛盾的.他们对我说:

  1. 如果foo.cc需要的东西bar.h,它必须包括bar.h.
  2. 如果foo.cc需要填充bar.h,foo.cc包含foo.hfoo.h包含bar.h,则foo.cc不需要包含bar.h.

为什么这些句子不相矛盾?

c++ header-files

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