标签: microcontroller

二进制int加倍没有类型转换

我做一些微控制器的编程中C.我来自各种传感器的4个字节,代表任一读取float,intunsigned int.目前,我将它们以unsigned int格式存储在微控制器中,即使数据可能是float微控制器,它们只是字节.然后将该数据传输到PC.我希望PC将二进制数据解释为a float或an int或者unsigned int我希望的时候.有没有办法做到这一点?

防爆.

unsigned int value = 0x40040000; // This is 2.0625 in double
double result = convert_binary_to_double(value); // result = 2.0625
Run Code Online (Sandbox Code Playgroud)

谢谢.

PS:我尝试了类型转换,但这不起作用.

c binary microcontroller casting

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

这个Arduino代码有什么作用?

但我知道大部分内容都在做什么

    if (digitalRead(miso)) {      d |= 1;    }
Run Code Online (Sandbox Code Playgroud)

是一条我不明白的路线.这些代码来自Adafruit MAX31855库,用于Arduino板.我想在c中将代码移植到我的C8051F020 MCU.该代码从热电偶读取,MAX31855是MCU的数字接口.这是该文件的完整代码.我不熟悉digitalRead().上面发布的if语句是我无法解释的地方.这个if语句在uint32_t Adafruit_MAX31855::spiread32(void)函数中.

        /*************************************************** 
  This is a library for the Adafruit Thermocouple Sensor w/MAX31855K

  Designed specifically to work with the Adafruit Thermocouple Sensor
  ----> https://www.adafruit.com/products/269

  These displays use SPI to communicate, 3 pins are required to  
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, …
Run Code Online (Sandbox Code Playgroud)

c++ microcontroller arduino

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

Timer1 RD16位在PIC18单片机上的作用是什么?

我真的很困惑.手册说:

RD16: 16-bit Read/Write Mode Enable bit
1= Enables register Read/Write of Timer1 in one 16-bit operation
0= Enables register Read/Write of Timer1 in two 8-bit operations
Run Code Online (Sandbox Code Playgroud)

但是,实际上似乎没有任何方法可以通过一个16位操作进行R/W!从数据表后面的内容以及我在网上看到的内容来看,16位值仍必须读作:

foo = TMR1L;
bar = TMR1H;
Run Code Online (Sandbox Code Playgroud)

写作:

TMR1H = bar;
TMR1L = foo;
Run Code Online (Sandbox Code Playgroud)

除非我没有看到它,否则RD16没有显示在Timer1框图中,似乎对任何事情都没有影响!

我知道这不可能是真的,所以我在这里问:Timer1 RD16位对PIC18单片机有什么作用?

microcontroller timer microchip pic pic18

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

为什么将结构地址转换为int指针,解除引用,并将其用作语句中的LVALUE会使我的微控制器崩溃?

以下代码在运行时崩溃了我的微处理器.

struct dummytype dummy;
struct crummytype crummy;
*(unsigned int*)&dummy = *(unsigned int*)&crummy;
Run Code Online (Sandbox Code Playgroud)

假设两个结构都是相同的大小,这个代码是否有一些无效的C?它的有效性是否取决于任何特定的?

c microcontroller pointers structure dereference

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

什么是C中的vuint,为什么它在我的微控制器中?

我正在翻阅微控制器的一些C头文件,我一直看到寄存器地址初始化为vuint.我之前没有遇到过这种数据类型,所以我做了一些搜索,没有真正的结果.我得到的最接近的是/sf/answers/899919261/,它告诉我v代表"volatile".所以,我有挥发无符号的整数,持有硬件寄存器地址.就像在,我有一个数据类型明确指出"这个地址可能会发生变化",代表硬连线的寄存器,并且不能像以前那样改变.我对vuint的理解不正确吗?如果没有,为什么我们这样代表地址?

c microcontroller types volatile memory-address

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

液晶显示屏显示不同的浮点数

我正在开发将在LCD上显示输出的系统。

我将变量数据类型声明为float,但是LCD显示屏显示0.00而不初始化,因为我用0.0声明了它,所以

我希望LCD显示屏显示0.000,但是无论我如何尝试更改初始化值,LCD显示屏始终显示0.00 因此,如何使LCD显示屏显示0.000,

这是图像的链接,
下面是我的代码:

#include <LiquidCrystal.h>

volatile int NbTopsFan;
float flowrate = 0.0;
float volume = 0.0;
int hallSensor = 2;


LiquidCrystal lcd (12, 11, 9, 8, 7, 6);
void rpm() {
  NbTopsFan++;
}

void setup(){
  pinMode(3, OUTPUT);
  pinMode (hallSensor, INPUT);
  Serial.begin (9600);
  attachInterrupt (0, rpm, RISING);

  lcd.begin (16, 2);
  lcd.clear ();
}
void loop (){
  digitalWrite(3, HIGH);
  NbTopsFan=0;
  sei();
  delay(1000);
  cli();
  flowrate = NbTopsFan / 7.5;
  volume += (flowrate …
Run Code Online (Sandbox Code Playgroud)

floating-point microcontroller lcd arduino arduino-uno

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

如何连接到我的LaunchPad TM4C123G

我花了一些时间尝试TM4C123G使用我的macbook上的mspdebug工具链连接到我的LaunchPad (10.10),但没有运气.

在尝试跑步的时候,$ mspdebug rf2500我得到了

usbutil: unable to find a device matching 0451:f432
Run Code Online (Sandbox Code Playgroud)

我做了一些谷歌搜索,在我看来,mspdebug工具包可能不适合我的LaunchPad版本.这可能吗?

检查后$ system_profiler SPUSBDataType我得到以下内容:

      Product ID: 0x00fd
      Vendor ID: 0x1cbe  (Texas Instruments - Stellaris)
      Version: 1.00
      Serial Number: 0E205EE1
      Speed: Up to 12 Mb/sec
      Manufacturer: Texas Instruments
      Location ID: 0x14100000 / 14
      Current Available (mA): 500
      Current Required (mA): 250
Run Code Online (Sandbox Code Playgroud)

这向我表明至少操作系统能够识别设备,对吧?如果是这样,我可以用什么其他工具链连接到设备.

embedded microcontroller texas-instruments

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

如何创建一个链接器只链接我的程序使用的函数的库?

我正在编译一个8位AVR微控制器(AVR-GCC)的应用程序.为了减少微控制器中的闪存使用,链接器必须仅链接应用程序代码使用的函数.我正在编写自己的库,我发现了以下声明.

"为每个代码模块编写一个函数.这将编译为每个对象模块一个函数" - 来源:http://nongnu.org/avr-libc/user-manual/library.html

这是什么意思?如何为每个函数创建单独的目标文件?现在我的库中只有一个.h文件和一个.c文件.

c microcontroller gcc avr avr-gcc

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

STM32F4 I2C无库

我必须使用I2C为STM32F4发现和pcf8574连接代码.

我不能使用任何库函数.我尝试了一些我没做过的事.我在init代码后写了.

我的初始化代码

RCC->APB1ENR|=RCC_APB1ENR_I2C1EN ; // enable APB1 peripheral clock for I2C1
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOBEN; // enable clock for SCL and SDA pins

//SCL on PB6 and SDA on PB7 
GPIOB->MODER|=GPIO_MODER_MODER6; // set pin to alternate function
GPIOB->MODER|=GPIO_MODER_MODER7; // set pin to alternate function

GPIOB->OSPEEDR |=GPIO_OSPEEDER_OSPEEDR6; //set GPIO speed
GPIOB->OSPEEDR |=GPIO_OSPEEDER_OSPEEDR7; //set GPIO speed

GPIOB-> OTYPER |= GPIO_OTYPER_OT_6; // set output to open drain --> the line has to be only pulled low, not driven high
GPIOB-> OTYPER |= GPIO_OTYPER_OT_7; // set …
Run Code Online (Sandbox Code Playgroud)

c microcontroller stm32 i2c

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

内存地址如何放置在二进制文件中?

我在了解如何将elf文件中的节加载到内存以及如何选择地址时遇到麻烦?嵌入式系统通常为代码分配特定的地址,但是该地址放在哪里?

基本上,各节中将如何以及何时放置地址,以及如何在OS中以及嵌入式系统中的ROM或RAM中加载地址。

c memory embedded microcontroller assembly

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