标签: embedded

是否存在LibC操作系统?

我记得听说过一个基本上只是libc的可嵌入操作系统(可能它支持c ++).它没有内核,管道或你期望从os获得的任何其他东西.我尝试在维基百科中查找它,但我没有看到它列出.

这样的OS存在吗?是否有支持终端或C/C++ +(tcp)套接字的操作系统在VM外部进行通信?这对我来说很有用.

c c++ embedded operating-system osdev

31
推荐指数
4
解决办法
1427
查看次数

编译器按位不运算的优化

我有一个简单的函数测试,如果两个数组彼此相反。它们似乎是相同的,只是tmp变量不同。一个有效,另一个无效。我一辈子都无法弄清楚为什么编译器会对此进行优化-如果确实存在优化问题(我的编译器是IAR Workbench v4.30.1)。这是我的代码:

// this works as expected
uint8 verifyInverseBuffer(uint8 *buf, uint8 *bufi, uint32 len)
{
  uint8 tmp;
  for (uint32 i = 0; i < len; i++)
  {
    tmp = ~bufi[i];
    if (buf[i] != tmp)
    {
      return 0;
    }
  }
  return 1;  
}

// this does NOT work as expected (I only removed the tmp!)
uint8 verifyInverseBuffer(uint8 *buf, uint8 *bufi, uint32 len)
{
  for (uint32 i = 0; i < len; i++)
  {
    if (buf[i] != (~bufi[i]))
    { …
Run Code Online (Sandbox Code Playgroud)

c c++ embedded iar

31
推荐指数
3
解决办法
1180
查看次数

双问题处理器究竟是什么?

我遇到了几个关于双问题处理器概念的引用(我希望这句话在一个句子中有意义).我无法找到究竟是什么双重问题的任何解释.Google为我提供了微控制器规范的链接,但这个概念在任何地方都没有解释.这是这种参考的一个例子.我在找错了地方吗?关于它是什么的简短段落将非常有帮助.

embedded arm pipeline cpu-architecture

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

你如何使用'target remote'在gdb中重新开始运行程序?

当您在同一台计算机上的可执行文件上执行常规gdb会话时,您可以提供运行命令,它将再次启动该程序.

当您在嵌入式系统上运行gdb时,与命令target localhost:3210'一样,如何在不退出并重新启动gdb会话的情况下重新启动程序?

embedded debugging gdb

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

"实时"如何是Linux 2.6?

我正在考虑将我的产品从RTOS迁移到嵌入式Linux.我没有很多实时要求,我所拥有的少量RT要求大约为10毫秒.

有人可以给我一个参考,告诉我当前版本的Linux是如何实时的吗?

从商业RTOS迁移到Linux还有其他问题吗?

linux embedded real-time

29
推荐指数
2
解决办法
8098
查看次数

堆栈大小估计

在多线程嵌入式软件(用C或C++编写)中,必须为线程提供足够的堆栈空间,以使其能够完成其操作而不会溢出.在某些实时嵌入式环境中,正确调整堆栈大小至关重要,因为(至少在我使用过的某些系统中),操作系统不会为您检测到这一点.

通常,在创建线程时(即在pthread_create()等的参数中)指定新线程(除主线程之外)的堆栈大小.通常,这些堆栈大小被硬编码为在最初编写或测试代码时已知良好的值.

但是,对代码的未来更改通常会破坏硬编码堆栈大小所基于的假设,并且在一个重要的日子里,您的线程进入其调用图的更深层分支之一并溢出堆栈 - 从而导致整个系统崩溃或者默默地腐蚀记忆.

在线程中执行的代码在堆栈上声明struct实例的情况下,我个人已经看到了这个问题.当结构体被扩充以容纳额外数据时,堆栈大小相应地膨胀,可能允许堆栈溢出发生.我想这对于已建立的代码库来说可能是一个巨大的问题,其中无法立即知道向结构添加字段的全部效果(太多的线程/函数来查找使用该结构的所有位置).

由于对"堆栈大小"问题的通常响应是"它们不可移植",因此我们假设编译器,操作系统和处理器都是此调查的已知数量.我们也假设没有使用递归,所以我们没有处理"无限递归"场景的可能性.

有哪些可靠的方法来估计线程所需的堆栈大小?我更喜欢离线(静态分析)和自动方法,但欢迎所有想法.

c c++ embedded stack static-analysis

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

为什么我会考虑将RTOS用于我的嵌入式项目?

首先是我的问题的背景,具体细节如下:

我在平台上工作的公司目前是使用MPLAB IDE作为开发环境的Microchip PIC32系列.此前,我们还为同一应用编写了Microchip dsPIC和TI MSP系列的固件.固件非常简单,因为代码分为三个主要模块:设备控制,数据采样和用户通信(通常是用户PC).器件控制是通过GPIO总线和至少一部分需要SPI或I2C控制的部分组合实现的.使用定时器模块中断数据采样以保持采样频率,使用更多SPI/I2C和GPIO总线来控制采样硬件(即ADC).用户通信目前通过USB使用Microchip App Framework实现.


那么现在的问题是:鉴于我上面所描述的内容,我会考虑在什么时候为我的项目使用RTOS?目前我正在考虑将这些可能的触发点作为使用RTOS的理由:

  • 代码复杂性? 代码库架构/组织仍然足够小,我可以保留所有细节.
  • 多任务/多线程? 通过中断对模块执行进行时间分片就足以实现多任务处理.
  • 测试? 目前,我们没有通过硬件烟雾测试进行太多正式测试或验证(我希望在不久的将来能够纠正).
  • 通讯? 我们目前使用自定义数据包格式和协议,该协议几乎只执行START,STOP,SEND DATA命令,数据是二进制blob.
  • 项目范围? 在不久的将来,我们有可能获得一个项目,将我们的设备集成到一个更大的系统中,目标是将该系统用于大规模生产.目前我们所有的项目都是实验原型,快速周转约一个月,一次生产一个或两个单位.

您认为我应该考虑哪些其他方面?根据您的经验,您认为(或强迫)您考虑使用RTOS而不是仅仅在基本运行时运行代码?关于为RTOS设计/编程的其他资源的指针也非常受欢迎.

embedded rtos firmware

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

Beagleboard裸机编程

我刚拿到了BeagleBoard-Xm,我想知道是否有关于如何在硬件上运行非常简单的裸机软件的详细分步教程?

我问的原因是我想深入了解硬件架构如何工作,从引导程序,链接器,中断,异常,MMU等等.我认为最好的方法是在beagleboard xm上执行一个简单的hello world程序而不用操作系统.没有任何进展,只需启动电路板并在屏幕上获得"hello world"输出.而已!

下一步将是运行一个小型操作系统,可以安排一些非常简单的任务.无需文件系统,只需了解操作系统的基础知识即可.

任何帮助赞赏!

最好的祝福

吉古先生

embedded arm beagleboard

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

在嵌入式环境中使用html渲染器

我正在开发一个项目,我将为嵌入式设备设计一个GUI,并且很乐意为此使用HTML.我希望你们能帮我找到一个适合我需要的渲染引擎.

要求:

  • 必须将Web页面呈现到内存缓冲区中.然后我将内存缓冲区传输到显示器.

  • 我必须通过回调或事件通知渲染引擎需要获取新项目.HTML页面,图像等.原因是我必须获取资源并将其提供给渲染引擎(原因是设备在所有配置中都没有TCP/IP,然后需要获取项目串行线,并且为了安全,我需要验证是否允许请求).

  • 我必须能够将鼠标和键盘事件注入渲染引擎.

  • 只有C和/或C++

  • 必须易于移植,并且缺少对仅存在于win/linux/mac的库的依赖性.我运行的设备运行自定义操作系统...

  • 占用空间小,内存消耗小,在渲染过程中,我可能会占用10MB的占用空间和5-10 MB的内存.但不多.

  • 欢迎开源和商业解决方案

  • 我不需要完整的HTML5和CSS3支持,我的意思是如果我可以使用"基本HTML和一些CSS"我非常高兴.

我看过一些WebKit,铬,壁虎,berkelium和awesomium,但并没有真正发现它们符合我的需求.

那里有什么东西接近我需要的东西吗?或者我应该放弃这个想法并以其他方式构建GUI?我感谢任何帮助!

html c++ embedded user-interface rendering

29
推荐指数
2
解决办法
8767
查看次数

是否可以#include .c源文件以获得嵌入式C代码的可维护性?

我不是专业的C程序员,我知道包括.c来自另一个的源文件被认为是不好的做法,但我认为它有助于可维护性.

我有一个包含大量元素的大结构,我#define用来保存索引.

#define TOTO_IND 0 
#define TITI_IND 1 
…
#define TATA_IND 50

static const MyElements elems [] = {
    {"TOTO", 18, "French"},
    {"TITI", 27, "English"},
    ...,
    {"TATA", 45, "Spanish"}
}
Run Code Online (Sandbox Code Playgroud)

因为我需要从索引访问结构,所以我需要保持#define和结构声明同步.这意味着我必须在正确的位置插入新元素并相应地更新#define.

它容易出错,我不喜欢它(但出于性能考虑,我找不到更好的解决方案).

无论如何,这个文件还包含很多处理这个结构的函数.我还希望保持代码分离并避免全局变量.

为了使事情变得"更容易",我正在考虑将这个"容易出错的定义"转移到.c仅包含此结构的单个源文件中.这个文件将是"危险的小心文件",并将其包含在我的实际"正常功能"文件中.

你怎么看待这件事?包含.c源文件是否有效?还有另一种更好的方法来处理我的结构吗?

c embedded maintainability performance stm32

29
推荐指数
4
解决办法
4266
查看次数