标签: embedded

这段代码中的 else 部分是什么意思?

我正在浏览一些嵌入式编程链接 http://www.micromouseonline.com/2016/02/02/systick-configuration-made-easy-on-the-stm32/

【注意上面链接的代码作者已经更新了代码,delay_ms()文章中的实现不再使用下图所示的解决方案。】

并最终得到以下代码。这是针对 ARM 架构的,但基本上这是一个函数,它会导致作为参数传递的某些毫秒的延迟。所以我可以理解 if 条件,但为什么这里需要 else 条件?有人可以向我解释一下吗?

void delay_ms (uint32_t t)
{
  uint32_t start, end;
  start = millis();//This millis function will return the system clock in 
                   //milliseconds
  end = start + t;
  if (start < end) {
     while ((millis() >= start) && (millis() < end))
     { // do nothing } 
  }
 else{
     while ((millis() >= start) || (millis() < end)) 
     {
      // do nothing
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

c embedded arm

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

用 C 语言计算什么更快?(x==0) 还是 (0==x)?

我想知道用C语言计算什么更好:

if (x==0) 
{
    // Some code ...
}
Run Code Online (Sandbox Code Playgroud)

if (0==x) 
{
    // Some code ...
}
Run Code Online (Sandbox Code Playgroud)

我知道最后一个更好,以防程序员忘记第二个“=”并写“0 = x”而不是“0 == x”,因为编译器会抛出错误。

但我的问题是:

  1. 从处理器的角度来看,在计算时间内。
  2. 一般来说(不仅适用于 AMD/Intel CPU,也适用于具有不同处理器的嵌入式组件。

我认为这与“左值”和“右值”有关,并且我尝试在我的电脑中进行模拟,但没有任何重要的见解。

c embedded rvalue lvalue compiler-optimization

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

可能是16位机器上的32位整数吗?

只是想知道是否可能.如果是,除编译器仿真层之外还有其他方法吗?

谢谢

c compiler-construction embedded

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

将Char []与C"嵌入式"中的字符串进行比较

我尝试创建两个函数来分割字符串成为2部分,第一个函数我想得到字符串"模式1",从串口RX_IN_CHR_UART 变量时,填充数据如"模式1 34",第二个函数我想得到"34"

此函数获取字符串"模式1"

    #define GET_MODE_X 6
    #define GET_VALUE 4
    const char RX_IN_CHR_UART[];
        char* pod(char buf_Rx[])
            {
              int i=0;
              char spn[GET_MODE_X]; // 7
              for(i=0;i<GET_MODE_X;i++)
              {
                spn[i] = buf_Rx[i];
              }
              return Get_mode_x = spn;
            }
Run Code Online (Sandbox Code Playgroud)

并且此函数获取字符串"34"

char* dop(char buf_Rx_val[])
{
   int k=0; 
   char datasip[GET_VALUE]; //2       
   for(k=0;k<GET_VALUE;k++)
   {
     datasip[k] = buf_Rx_val[GET_MODE_X+k+1];
   }
   return (Get_val_mod = datasip);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试比较功能dop()使用if(dop(RX_IN_CHR_UART)=="34")它不起作用.

 if(!strcmp(mode1,pod(RX_IN_CHR_UART))) // compare "Mode 1"
   {
      Send_teks("Mode 1 ->:"); // send to serial port
      Send_teks(pod(RX_IN_CHR_UART));
      Send_Char('\n');
      Send_teks("Data …
Run Code Online (Sandbox Code Playgroud)

c string embedded 8051 keil

-3
推荐指数
2
解决办法
2554
查看次数

比if-else更好的解决方案呢?

我必须根据像83025(大于65535)这样的大数字的值来做一些事情.为此,我不能使用switch-case,因为它只使用最大值为255的整数参数.(或者至少这是我所知道的.但是我仍然尝试过编译但是switch-case不能正常工作. )

所以我想我会if-else if像下面这样制作一个梯子,但它看起来并不太优雅.

if      ((refnum == 32120) ||  
         (refnum == 32075))   {

else if  (refnum == 51036)    {

else if ((refnum == 61024) ||  
         (refnum == 61060))   {

else if ((refnum == 71030) ||  
         (refnum == 71048))   {

else if ((refnum == 72012) ||  
         (refnum == 72024) ||  
         (refnum == 72048))   {

else if ((refnum == 81025) ||  
         (refnum == 81050) ||  
         (refnum == 81100))   {

else if ((refnum == 82012) ||  
         (refnum == 82024) ||  
         (refnum …
Run Code Online (Sandbox Code Playgroud)

c embedded

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

设置一个双字节数组

什么是在字节数组中分配一个double到8个字节的快速方法?

我有一个大约4k字节的字节数组,我试图从中取出8个字节并将其复制到一个double中.我试图避免memmove和memcpy出于速度原因,因为分配变量要快得多.我在嵌入式世界工作,任何其他快速实现都受到赞赏.

void foo(double *pdest)
{
   // Try 1: I am using 1 element in the array, it won't work
   *pdest = (double)p->stk[stkpos];

   // Try 2: I am attempting to loose the single element element
   *pdest = (double)((double*)&p->stk[stkpos]);
}
Run Code Online (Sandbox Code Playgroud)

这两种解决方案都没有对我有用,我不确定如何实现这一目标.

c embedded double variable-assignment

-3
推荐指数
2
解决办法
97
查看次数

GoogleTest强制#undef进行特定测试

我使用GoogleTest,我想用#ifndef里面测试一些函数.

档案交流

bool myFunction() {
#ifndef FOO
   return true;
#else   
   return false;
#endif
}
Run Code Online (Sandbox Code Playgroud)

是否可以在特定测试期间强制#undef?就像我可以在2个统计数据中测试函数(使用define和不使用).

c embedded googletest

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

我如何在嵌入式程序中进行多线程处理?

嗨,我是嵌入式程序员。最近我们遇到一个项目,我们被迫使用多线程。我已经在 java 中使用了相同的代码,但我无法实现它我的 8051 嵌入式代码。任何人都可以帮助我吗?

embedded multithreading 8051

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

将ASM转换为C

我不知道是否有一个程序可以将ASM转换为C.我检查了谷歌,我已经读过IDA Pro可以做到但我不知道如何做.无论如何,你能帮我把这个用ASM编写的代码转换成C吗?我不擅长集会,所以我希望你能帮助我.谢谢 :)

这是代码:

#define CALIBRATIONTIME     .10 ;Number Of Times To Measure Signal During Calibration

;**********************************************************************************************
;Calibrate() - Measures A Period From The Input(GP0) Reference Signal
;            - Updates Osccal Value
;            - Updates E^2 
;**********************************************************************************************
CALIBRATE
    movlw   CALIBRATIONTIME
    movwf   COUNTER     ;Calibration Counter

LOW0
    btfsc   INPUT0      ;Wait To Sample Low Edge #0 (Makes Sure We Are Synchronized First Time Through)
    goto    LOW0        

HIGH1
    btfss   INPUT0      ;Wait To Sample High Edge #1
    goto    HIGH1   
    clrf    TMR0        ;Start Timer  (Timer Will Be …
Run Code Online (Sandbox Code Playgroud)

c embedded assembly microchip pic

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