头像-163731

xukejing

  • 13204
  • 单片机
  • 航空航天

个人成就

获得 501 次赞

帮助过660人

【参与有礼】吐槽一下程序遇到问题时的复杂心情

遇到问题,像我这种脑洞大的肯定能用第六感猜出可能的多条出路,然后摸着石头过河般探索一下会不会翻船,最后披荆斩棘般碾平一路障碍,逃出生天。

ARM和DSP到底有什么区别

ARM是微处理器(CPU)或微控制器(MCU)。Ti比较比较擅长把DSP与CPU或MCU组合。比如TI AM5708芯片,集成了ARM Cortex-A15、ARM Cortex-M4和C66x DSP。A15核心用于通用的计算和控制,M4核心作为协处理器用于实时控制,C66x DSP核心作为协处理器用于各种计算,相互取长补短。如果计算量不大,但是对实时性要求很高,就需要把程序放在Cortex-M核心(MCU)上来跑。如果计算量大,内存拷贝的微小延迟就不那么明显了,这时候可以考虑GPU或DSP这些协处理器。​相对来说,DSP核心的计算速度是要比差不多级别的GPU或CPU都快一些的,计算能力上甚至可以替代GPU,(但是与x86桌面平台的CPU和GPU比还是慢了一些),所以它非常适合弥补ARM CPU的计算性能不足。我做过一个测试,单核C66x DSP核心与四核ARM Mali GPU核心的计算性能比较,结果DSP完胜。可以参考这篇文章《ARM Mali T860 GPU核心与C66x DSP核心的OpenCL计算性能对比测试​》 https://www.icxbk.com/article/detail/512.html

关于画板子耗时的问题

我也是初学者,10厘米的板子,一般也是差不多需要两三天才能画好。原理图比较快,PCB布局时候,如果不熟练,就需要一些灵感。

stm32 hal能对GPIO端口整体操作吗?

不能,只能一个管脚一个管脚地配置

PC电源遇到AC输入电压低时会有什么表现?

电脑的电源都是宽电压设计,不会遇到问题。比如常见的航嘉,大部分产品都可以在80V到280V范围内工作,无影响。金河田有几款低端产品,只支持220V,也可以200V~240V范围工作。

定时器中断服务函数中全局变量的值没法修改

__IO 举个例子 uint32_t需要改为如下 __IO uint32_t “两个下划线IO”在Cortex_M中是定义为volatile类型的。一般来说,计时中断里的关键变量都需要加“两个下划线IO”符号, 即定义为volatie,以防止程序因为优化提高访问速度而从cache中读取不是最新的数据。你的情况,应该就是变量的值虽然已经被修改,但程序依然读取cache中的老的值。建议把你操作的那个全局变量定义为volatie类型,保证程序每次都从该变量的地址读取最新的数据,这一点很重要。

EEPROM 和SPI flash的区别

eeprom的容量一般以kb为单位,比如我们经常用到的arduino电子积木模块DS3231时钟模块,上面同时集成了一片AT24C32芯片。AT24C32芯片就是eeprom芯片,容量32Kbit(4KB)接口为iic。外置eeprom芯片一般是作为MCU芯片内部eeprom的补充,用于存储设置参数。SPI Flash的容量就大很多了,常见的32Mbit(4MB),我们已经在ESP8266等模块上使用过了。容量更高的甚至可以达到256Mbit(32MB)。SPI Flash可以同时存储单片机固件和用户数据。