Questions tagged «firmware»

固件是指在嵌入式系统或微控制器上运行以直接控制硬件的软件。

9
是固件代码还是数据?
当有人说他们将固件“刷新”到设备上时,我很好奇这实际上意味着什么。 固件是否只是存储在内存中并且可以由设备的CPU解释的本机二进制文件(就像计算机上的任何其他EXE一样)?还是固件只是作为不可变程序输入的数据已经硬编码/连接到设备上? 如果后一个示例不是固件,您将如何称呼它?例如,假设设备上有一些二进制(someapp.exe),则您无法删除或修改此二进制。二进制文件在运行时从存储芯片获取输入。您可以将数据“刷新”到该芯片,从而影响该芯片的输入/配置,someapp.exe在下次运行时会受到影响。如果不是固件,将其称为什么?
29 flash  firmware 

2
AVR和PIC控制器上的固件保护
有人可以提取在我提供的微控制器中刻录的HEX文件吗? 如果可能的话,某人如何确保其代码在嵌入式系统中得到保护?对于PIC和AVR微控制器,如何保护其固件不被复制?
23 pic  avr  embedded  firmware 

4
恢复出厂设置如何工作?
所有嵌入式设备都包含“恢复出厂设置”选项,如果出现问题,用户可以使用该选项重置其设备。 我正在STM32板上开发固件。该固件包括一个引导加载程序,该加载程序允许通过UART升级应用程序(通过发送包含新映像的二进制文件),我想添加另一个功能:恢复出厂设置。当用户选择此选项时,电路板应加载原始图像。 什么是出厂重置?是将整个二进制文件再次加载到内存中,还是只是调用一个函数来重新初始化最终用户修改的变量? 最佳做法是什么? 原始FW存放在哪里?是内置闪光灯还是外接闪光灯?

2
是否应该始终定义所有陷阱?
我现在在dsPIC 30F4013中看到过两种情况,由于未定义陷阱,控制器正在复位。为什么首先要提出这些陷阱仍然是一个谜,但这不是我的直接问题。我开始认为始终定义所有陷阱是一个好的编程习惯,即使永远不要出现陷阱,因此我至少会得到一条清晰的错误消息,而不是随机重置。这是我不知道的标准做法吗?我应该考虑这种做法是否有弊端?

6
在嵌入式系统中使用全局变量
我开始为产品编写固件,我是这里的新手。我浏览了许多关于不使用全局变量或函数的文章。在8位系统中使用全局变量是否有任何限制,还是完整的“否”。如何在系统中使用全局变量,或者应该完全避免使用全局变量? 我想就此主题向大家提出宝贵的建议,以使我的固件更紧凑。
17 c  embedded  firmware 

5
在C中为模块化固件设计分配内存的可能性
模块化方法通常非常方便(便携式且简洁),因此我尝试将模块编程为尽可能独立于其他模块。我的大多数方法都是基于描述模块本身的结构。初始化函数设置主要参数,然后将处理程序(目标字符串的指针)传递给模块内部调用的任何函数。 现在,我想知道为模块描述结构的最佳分配内存方法是什么。如果可能,我想要以下内容: 不透明的结构,因此只能通过使用提供的接口功能来更改结构 多个实例 链接器分配的内存 我看到以下可能性,所有这些都与我的目标之一冲突: 全球宣言 多个实例,由链接器分配,但是struct不是不透明的 (#includes) module_struct module; void main(){ module_init(&module); } 分配 不透明的结构,多个实例,但在堆上分配 在module.h中: typedef module_struct Module; 在module.c初始化函数中,malloc并返回指向已分配内存的指针 module_mem = malloc(sizeof(module_struct )); /* initialize values here */ return module_mem; 在main.c中 (#includes) Module *module; void main(){ module = module_init(); } 模块中的声明 链接器分配的不透明结构,仅预定义数量的实例 将整个结构和内存保留在模块内部,并且永远不要公开处理程序或结构。 (#includes) void main(){ module_init(_no_param_or_index_if_multiple_instances_possible_); …
16 c  design  firmware 

4
单片机确定正在运行哪个硬件版本的好方法是什么?
我正在研究一种新产品,在产品的整个生命周期中,可能会有大小不同的硬件更改/修复。为了将来在现场进行固件更新,我需要一种确定硬件版本的方法。什么是好的策略? 我目前正在使用外部电阻上下拉两个备用引脚,并检查模式。这仅允许进行4种硬件修订,但对于实际用途而言可能已足够。如果将来的硬件版本中我需要这些引脚中的一个或两个,可能会成为一个问题。 我猜更经济的方法可能是将一个电阻分压器连接到ADC引脚。每个硬件版本可能具有不同的阻值电阻。不幸的是,我目前的设计中没有备用ADC。 我想另一种方法可能是在生产过程中在EEPROM或MCU闪存中编码硬件版本号?(我们目前没有该设施。) 我想我正在寻找一种灵活而强大的方法的建议。 [编辑] 回覆。@ trav1s的建议:我本身没有地址总线,但I2C总线上有24LCxx EEPROM。从地址的低3位是硬连线的。我想我可以在启动过程中更改地址位并搜索EEPROM。


6
在C上使用Verilog或VHDL的动机是什么?
我来自编程背景,对硬件或固件(最多是电子产品和Arduino)的了解不多。 在像C或某些Assembly这样的编程语言上使用Verilog和VHDL等硬件描述语言(HDL)的动机是什么? 这是一个选择问题吗? 我读到它的固件写在HDL中的硬件在并行运行指令方面具有明显的优势。但是,令我惊讶的是,有讨论使人们怀疑是否要用C或Assembly编写固件(如果您不一定要有CPU,如何使用Assembly?),我感到很惊讶,但我得出结论,这也是一个选择。 因此,我有几个问题(不要犹豫,解释一下): 固件真的可以用HDL或软件编程语言编写,还是执行相同任务的另一种方式?我喜欢真实的例子。每个选项产生什么约束? 我知道固件在软件上的普遍用法是在硬件加速器(例如GPU,网络适配器,SSL加速器等)中。据我了解,这种加速并非总是必要的,而只是推荐的(例如,在SSL和复杂算法加速的情况下)。在所有情况下都可以在固件和软件之间进行选择吗?如果不是这样,我很乐意使用固件清晰明确的方式。 我读过,固件大部分刻录在ROM或闪存上。它在其中如何表示?像软件一样?如果是这样,有什么深远的区别?如果是固件,是否可以使用自适应电路? 我想我在某些假设下到处都是错误,请原谅。谢谢!

3
使用PROGMEM有什么含义?
对于大量的文本变量,我发现有必要使用PROGMEM将它们存储在闪存中。在Arduino上将大变量存储在Flash中(使用PROGMEM),SRAM和EEPROM有什么正面和负面影响?


6
固件中程序如何执行?
我听说在固件领域工作的人们没有操作系统控制固件(例如USB驱动器中的固件)。在while循环中只有一个线程正在运行,等待外部命令,这是发生中断的起点,然后是ISR和控制,一直流到硬件。但是从根本上说,执行固件代码的那部分硬件是什么?只要设备加电,就会触发CPU还是基于ASIC的代码。我无法理解从基于常规CPU-OS的系统到固件的模式转变。
9 cpu  asic  firmware 

2
无线升级ARM
我们将创建一个带有GSM调制解调器的ARM板。 我们希望能够通过无线方式升级ARM固件。 有没有好的,可靠的开源解决方案? 如果没有,是否有带有此功能的付费OS?

4
如何在不使用arduino IDE的情况下将十六进制文件固件上传到目标板?
我是否可以创建一种运行安装程序的安装程序,该安装程序运行Shell脚本以将固件更新上传到不涉及使用IDE的arduino?我做的一件事情有时需要固件更新,而有时将应用固件更新的人将无法从IDE应用更新。我猜这与avrdude有关,但是请尝试尝试学习方法,我只是没有运气。 我可以处理“创建运行Shell脚本的安装程序”部分。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.