标签: embedded

开始编写除计算机之外的其他东西的最佳方法?

开始在计算机外编程的最佳方法是什么?

我不是指像API这样的手机这样的主流产品.

请假设有C/C++的工作知识

c embedded microcontroller device

24
推荐指数
4
解决办法
2704
查看次数

是否需要在退出前关闭文件描述符?

当然,大多数情况下的直接答案是"是",我坚信一个进程应该正确清理它已经分配的任何资源,但我在我的情况下拥有的是一个长期运行的系统守护进程,它打开一个固定的启动时的文件描述符数量,并在退出前将它们全部关闭.

这是一个嵌入式平台,我正在努力使代码尽可能紧凑,同时不引入任何不良风格.但是,由于文件描述符无论如何都会在退出之前关闭,这个文件描述符清理代码是否可以用于任何目的?你总是关闭所有文件描述符吗?

c embedded file-descriptor

24
推荐指数
4
解决办法
1万
查看次数

微控制器C代码的单元测试模式

虽然有很多单元测试框架支持C,但我对如何为微控制器代码编写单元测试感到有点困难(在我的情况下是PIC,但我认为问题比这更普遍).

为微控制器编写的大部分代码都围绕将配置和数据值写入寄存器,从寄存器读取输入数据以及响应中断事件.我想知道是否有人可以提供一些最有效的方法指针.

c embedded microcontroller unit-testing

24
推荐指数
1
解决办法
6889
查看次数

仅限C++前端编译器(将C++转换为C)

我目前正在管理从单个源代码树(Win32,Linux,Verifone CC终端,MBED甚至Nintendo GBA/DS)在多个平台上运行的一些C++代码.但是,我需要构建一个针对没有C++编译器(仅限C)的嵌入式平台的应用程序.我重申许多早期的C++编译器只是在现有C编译器(例如Glockenspiel使用MSC)上的前端.是否有任何今天使用的"前端"C++编译器将生成C代码.

                      Tools            Platform
                      -----------      ------------

                ______Visual C++ _____ WIN32
               /
              /_______MBED (ARM)_______MBED (ARM dev board).
             /
            /_________GCC (x86)________Linux
           /
Source____/___________GCC (ARM)________GBA/DS
          \
           \__________SDA______________Verifone Verix CC Terminals
            \
             \________ARM SDT__________Verifine VerixV CC terminals
              \
               \______????_____________Renases M8/16/32.
                \
                 \____????_____________Z8 family.
Run Code Online (Sandbox Code Playgroud)

最后两个平台我有很好的C编译器,但没有C++.

正如您所看到的,我支持各种各样的平台,并且我共享大量的库代码(以及一些应用程序代码).

c c++ embedded cross-platform

24
推荐指数
3
解决办法
9633
查看次数

浮点线性插值

要在两个变量之间进行线性插值ab给出一个分数f,我目前正在使用此代码:

float lerp(float a, float b, float f) 
{
    return (a * (1.0 - f)) + (b * f);
}
Run Code Online (Sandbox Code Playgroud)

我认为这可能是一种更有效的方法.我正在使用没有FPU的微控制器,因此浮点运算是在软件中完成的.它们相当快,但它仍然可以添加或增加100个周期.

有什么建议?

为了清楚起见,在上面的代码中,我们可以省略指定1.0为显式浮点文字.

c embedded algorithm interpolation linear-interpolation

24
推荐指数
4
解决办法
5万
查看次数

将Python移植到嵌入式系统

我正在使用ARM Cortex M3,我需要在其上移植Python(没有操作系统).什么是我最好的方法?我只需要核心Python和基本I/O.

python embedded

24
推荐指数
4
解决办法
7171
查看次数

如何强制在C中使用未被优化的未使用内存?

微控制器通常需要读取寄存器以清除某些状态条件.在C中是否有可移植的方式来确保在不使用数据的情况下不优化读取?指向内存映射寄存器的指针是否足以声明为volatile?换句话说,以下是否始终适用于标准兼容编译器?

void func(void)
{
   volatile unsigned int *REGISTER = (volatile unsigned int *) 0x12345678;

   *REGISTER;
}
Run Code Online (Sandbox Code Playgroud)

我知道处理这样的功能会遇到编译器相关的问题.所以,在这种情况下,我对便携式设备的定义有点松散.我只是说它会尽可能广泛地使用最流行的工具链.

c embedded microcontroller volatile cpu-registers

24
推荐指数
2
解决办法
4179
查看次数

一行中的多个赋值

我刚刚看到嵌入式c语句(dsPIC33)

sample1 = sample2 = 0;
Run Code Online (Sandbox Code Playgroud)

这意味着什么

sample1 = 0;

sample2 = 0;
Run Code Online (Sandbox Code Playgroud)

他们为什么这样输入?这是好还是坏编码?

c embedded

24
推荐指数
3
解决办法
3万
查看次数

C和C++中的易失性数组

在C中使用volatile关键字来防止编译器对变量执行某些优化以及其他细微更改.

例如;

volatile int my_int = 0;
Run Code Online (Sandbox Code Playgroud)

创建一个整数.在某些情况下,它可能会阻止以下优化:

while(my_int == 0); // Loop until my_int != 0
Run Code Online (Sandbox Code Playgroud)

优化到:

while(1); // Loop infinity.
Run Code Online (Sandbox Code Playgroud)

这对于包括嵌入式系统中经常遇到的情况很有用,例如可以通过中断函数调用对变量进行修改的情况.还有许多其他这种技术有用的例子.my_int可以是由这种功能修改的标志.(这只是一个玩具模型.)

但是,请考虑函数修改的数据是数组的情况.数据可以由指针指向.

unsigned char* my_data = new unsigned char[256];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,考虑到是my_data在这个问题上的该特定情况的全局变量[1],volatile关键字冗余的,或者它仍需要?

[1]可能无关紧要.

如果答案是需要volatile关键字,那么使用正确的语法是什么?

例如,volatile unsigned char* my_data假设声明指针本身是易失性的,而不是它指向的数据.

最后,C和C++的使用有区别吗?

c c++ arrays embedded volatile

24
推荐指数
1
解决办法
9015
查看次数

代码库的哪些部分使二进制文件变大?

我已经为模拟器构建了一些代码,现在我正在尝试使用TI的免费工具链来交叉编译到64kb的nvram目标.编译器声称我的代码大约是ROM以外的34kb:

(...) msp430-elf/bin/ld: region `ROM' overflowed by 33716 bytes
Run Code Online (Sandbox Code Playgroud)

另一条线说它不适合.text场地进入其分配的空间.我无法相信我的总数增加了34kb,更不用说使二进制文件溢出这个数量了.

  • 我的代码添加到项目中的.o文件只占项目总数的一小部分(1.9MB),我已经取出了项目中的大量组件.
  • 我已经在编译器中传递了-Os -s标志.
  • 新代码有大约100个字符的字符串文字.
  • 我的代码使用了很多math.h函数(实际上它是唯一进行浮点运算的部分),调用strtod和调用sprintf

是否有任何工具或方法来分解导致二进制文件如此庞大的原因?

c embedded microcontroller cross-compiling

24
推荐指数
2
解决办法
2325
查看次数