标签: embedded

ARM程序集和x86程序集之间的差异

我现在要学习ARM Assembly,为我的Windows Mobile 5 iPAQ开发,但我有一些问题:

  • ARM组件和x86组件之间的主要区别是什么?
    • 中断是否存在差异(新类型)?
      • 他们是谁,他们的意义是什么?
    • 编译的最佳汇编程序以及从何处获得它?
  • 哪里可以找到一些好的资源?

embedded x86 assembly arm

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

Pimpl成语不使用动态内存分配

我们想在项目的某些部分使用pimpl习语.项目的这些部分也恰好是禁止动态内存分配的部分,这个决定不在我们的控制范围内.

所以我要问的是,在没有动态内存分配的情况下,有没有一种干净又好的方法来实现pimpl习语?

编辑
以下是一些其他限制:嵌入式平台,标准C++ 98,没有外部库,没有模板.

c++ embedded pimpl-idiom dynamic-memory-allocation

28
推荐指数
2
解决办法
5554
查看次数

通过/ dev/mem驱动Beaglebone GPIO

我正在尝试编写一个用于在Beaglebone上闪烁LED的C程序.我知道我可以使用sysfs方式......但是我想看看是否可以使用/ dev/mem获得与物理地址空间映射相同的结果.

我有一个头文件,beaglebone_gpio.h,内容如下:

#ifndef _BEAGLEBONE_GPIO_H_
#define _BEAGLEBONE_GPIO_H_

#define GPIO1_START_ADDR 0x4804C000
#define GPIO1_END_ADDR 0x4804DFFF
#define GPIO1_SIZE (GPIO1_END_ADDR - GPIO1_START_ADDR)
#define GPIO_OE 0x134
#define GPIO_SETDATAOUT 0x194
#define GPIO_CLEARDATAOUT 0x190

#define USR0_LED (1<<21)
#define USR1_LED (1<<22)
#define USR2_LED (1<<23)
#define USR3_LED (1<<24)

#endif
Run Code Online (Sandbox Code Playgroud)

然后我有我的C程序,gpiotest.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h> 
#include "beaglebone_gpio.h"

int main(int argc, char *argv[]) {
    volatile void *gpio_addr = NULL;
    volatile unsigned int *gpio_oe_addr = NULL;
    volatile unsigned int *gpio_setdataout_addr = NULL;
    volatile unsigned int *gpio_cleardataout_addr …
Run Code Online (Sandbox Code Playgroud)

embedded mmap embedded-linux gpio

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

在不使用标准功能的情况下在C中生成正弦信号

我想在不使用标准函数sin()的情况下在C中生成正弦信号,以触发LED亮度的正弦形状变化.我的基本想法是使用具有40个点和插值的查找表.

这是我的第一个方法:

const int sine_table[40] = {0, 5125, 10125, 14876, 19260, 23170, 26509, 29196,
31163, 32364, 32767,  32364, 31163, 29196, 26509, 23170, 19260, 14876, 10125,
5125, 0, -5126, -10126,-14877, -19261, -23171, -26510, -29197, -31164, -32365,
-32768, -32365, -31164, -29197, -26510, -23171, -19261, -14877, -10126, -5126};

int i = 0;
int x1 = 0;
int x2 = 0;
float y = 0;

float sin1(float phase)
{
    x1 = (int) phase % 41;
    x2 = x1 + 1;
    y = (sine_table[x2] - …
Run Code Online (Sandbox Code Playgroud)

c embedded cortex-m

28
推荐指数
8
解决办法
6292
查看次数

在Windows上用软件关闭USB设备

我想通过Windows上的软件重启USB设备.

我正在开发一个小型USB功率微控制器.该芯片将在电源循环中恢复原生行为并允许代码下载.由于我的代码会在出现问题时使设备崩溃 - 使其忽略所有USB命令 - 我必须从系统中物理拔出设备.

我想远程进行开发,而不必亲自到场.

到目前为止,我已尝试使用"devcon"来禁用部分USB堆栈.虽然这会将集线器带入D3(应该关闭电源!),但仍然会为设备供电.

是否有任何预先存在的解决方案或SetupAPI技巧可能会有所帮助?

windows embedded usb microcontroller winapi

27
推荐指数
2
解决办法
5万
查看次数

单元测试设备驱动程序

我有一种情况需要为嵌入式硬件的某些设备驱动程序编写一些单元测试.代码很老很大,很遗憾没有很多测试.现在,唯一可能的测试是完全编译操作系统,将其加载到设备上,在现实场景中使用它并说"它有效".没有办法测试单个组件.

我在这里遇到了一个很好的线程,它讨论了嵌入式设备的单元测试,我从中获得了大量信息.我想更具体一点,并询问是否有人在这种情况下测试设备驱动程序是否有任何"最佳实践".我不希望能够模拟有问题的电路板正在与之交谈的任何设备,因此可能必须在实际硬件本身上测试它们.

通过这样做,我希望能够获得驱动程序的单元测试覆盖率数据,并诱使开发人员编写测试以增加其驱动程序的覆盖范围.

我遇到的一件事是编写在操作系统上运行的嵌入式应用程序并运行驱动程序代码,然后将结果传回测试工具.该设备有几个接口,我可以使用它来从我的测试PC驱动应用程序,以便我可以运用代码.

任何其他建议或见解将非常感谢.


更新:虽然它可能不是确切的术语,但当我说单元测试时,我的意思是能够测试/练习代码而无需编译整个OS +驱动程序并将其加载到设备上.如果我必须这样做,我会称之为集成/系统测试.

问题是我们所拥有的硬件是有限的,开发人员经常使用它们来修复错误等.要保持一个专用的并连接到CI服务器和自动化测试的机器可能是不可能的这个阶段.这就是为什么我正在寻找测试驱动程序的方法,而无需实际构建整个程序并将其上传到设备上.


摘要

基于下面的优秀答案,我认为解决问题的合理方法是使用IOCTL公开驱动程序功能,然后在嵌入式设备的应用程序空间中编写测试以实际运行驱动程序代码.

让一个小程序驻留在设备的应用程序空间中也是有意义的,它暴露了一个可以通过串行或USB运行驱动程序的API,这样单元测试的内容就可以写在PC上了,它将与PC通信.硬件并运行测试.

如果项目刚刚启动,我认为我们可以更好地控制组件的隔离方式,以便主要在PC级别进行测试.鉴于编码已经完成并且我们正在尝试将测试工具和案例改装到系统上,我认为上述方法更实用.

谢谢大家的回答.

embedded unit-testing drivers

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

从C代码设置ALSA主卷

我一直在寻找一个简单的C代码示例来设置ALSA混音器的主音量,但是对于这个所谓的常见操作却找不到任何简单的东西.

我对ALSA完全不熟悉,所以制作我自己的最小例子需要时间.如果有人能提供,我会很高兴.

c linux embedded mixer alsa

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

在Nintendo DS上编程

我之前正在阅读这个答案,这让我有兴趣购买Nintendo DS Lite来学习编程嵌入式设备.在我出去挥霍DS之前,我有几个问题:

  1. 您可以编程的是否有任何限制?我之前表示的帖子似乎说没有,但澄清会很好.

  2. 我会更好地购买arduino(或类似的)并走这条路吗?我喜欢DS,因为它已经内置了很多硬件.

  3. 我正在考虑购买CycloDS Evo卡,自制软件有更好的选择吗?

  4. 有关DS开发的最佳资源有哪些?

感谢您的时间,如果您有DS和程序,我会爱你听到你的意见,或者如果你有更好的想法,我也想听听它.

谢谢=]

c embedded homebrew nintendo-ds

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

在嵌入式C中使用带有sprintf()的浮点数

大家好,我想知道float变量是否可以在sprintf()函数中使用.

就像,如果我们写:

sprintf(str,"adc_read = %d \n",adc_read);
Run Code Online (Sandbox Code Playgroud)

where adc_read是整数变量,它将存储字符串

"adc_read = 1023 \n"

str(假设 adc_read = 1023)

如何使用float变量代替整数?

c embedded floating-point printf

26
推荐指数
2
解决办法
13万
查看次数

用于微控制器的GUI库

我想为微控制器(Atmel XMEGA)创建一个GUI驱动的应用程序,该应用程序连接到128x64点图形LCD(EA DOGL128-6)和4个导航按钮.

控制显示器本身(例如绘制像素和字符)是没有问题的,但是为了防止我重新发明轮子,我在google搜索用C语言编写的GUI-Library/-Toolkit,包括它的源代码,将运行在32 MHz 8位微控制器,至少提供以下控制:

  • 面板(对组元素)
  • 菜单(可滚动)
  • 图标
  • 标签
  • 按键
  • 线图(可选)

但我没有找到任何有用的东西.有没有人知道(或更好地使用)这样的库(最好是免费的)?

c embedded user-interface frameworks atmel

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