我是一名软件开发人员.我已经用高级语言编程了几年.
我想知道,如何迈出编程硬件的第一步.不是疯狂复杂的东西,但也许是一些普通的CE设备?假设我不需要将PCB与各种组件放在一起,而只是为了编写微小的CPU?
我有多低级别?ASM?C?操纵寄存器?或者开发工具包现在相当高水平?Java甚至在图片中吗?硬件中的OO编码,甚至是梦想还是现实?需要现实检查.
我也倾向于使用以教程格式编写的书籍或网站更好地学习.能指引我从简单到复杂的东西的东西.有什么建议?也许会介绍我今天流行的硬件(微处理器/微控制器)的东西?
非常感谢,谢谢大家.
我最近开始使用MPLAB,但对于使用Eclipse和VS IDE的人来说,它非常有限.您知道任何免费的IDE或如何配置Ecplise或Netbeans到PIC开发吗?
谢谢大家
我正在进入微控制器编程并且听到了截然不同的观点.微控制器编程在业界最常用的语言是什么?这是你在自己的工作中使用的吗?如果没有,为什么不呢?
PS:我希望答案不是汇编语言.
volatile uint16_t r;
unsigned char poly = 0x07;
unsigned char c = 0;
r = (c << 8) ^ poly;
Run Code Online (Sandbox Code Playgroud)
当在Linux上用gcc编译代码时,r是7.
当Microchip C18编译相同的代码时,r是0.
为什么?
如果我将其更改为:
volatile uint16_t r;
uint16_t poly = 0x07;
uint16_t c = 0;
r = (c << 8) ^ poly;
Run Code Online (Sandbox Code Playgroud)
r也变成7了C18.
C18手册中有关于整数提升的部分,但我认为这与我的问题无关.无论如何,这里是:
ISO要求所有算术都以int精度或更高精度执行.默认情况下,MPLAB C18将以最大操作数的大小执行算术运算,即使两个操作数都小于int.可以通过-Oi命令行选项来设置ISO强制行为.
我听说人们使用光传感器,盖革计数器和其他物理传感器来生成随机数,但我持怀疑态度.有没有办法通过测量物理世界(使用Arduino或任何其他微控制器)生成随机数?如果是这样,这些数字是否真的是随机的?
澄清:问题是关于使用微控制器收集的数据生成随机数的可行性,这些随机数可以合理地应用于密码学 - 是依赖设备熵的替代方案.
我正在开发一个涉及编程32位 ARM微控制器的项目.与许多嵌入式软件编码工作一样,设置和清除位是必不可少且非常重复的任务.当使用微型而不是32位来设置和清除位时,屏蔽策略很有用.但是当使用32位微控制器时,每次我们需要设置/清除单个位时写入掩码并不实际.
编写函数来处理这个可能是一个解决方案; 但是有一个功能占用的内存在我的情况下是不理想的.
使用32位微处理器时,有没有更好的替代方法来处理位设置/清除?
我正在尝试使用STM32F405的内部闪存来存储一堆用户可设置的字节,这些字节在重新启动后仍然存在.
我正在使用:
uint8_t userConfig[64] __attribute__((at(0x0800C000)));
Run Code Online (Sandbox Code Playgroud)
为我想要存储的数据分配内存.
当程序启动时,我检查第一个字节是否设置为0x42,如果没有,我使用以下方法设置:
HAL_FLASH_Unlock();
HAL_FLASH_Program(TYPEPROGRAM_BYTE, &userConfig[0], 0x42);
HAL_FLASH_Lock();
Run Code Online (Sandbox Code Playgroud)
之后,我检查了价值userConfig[0],我看到0x42......太棒了!
然而,当我点击重置时,再次查看该位置,它0x42不再是......
知道我哪里错了吗?我也尝试过:
#pragma location = 0x0800C00
volatile const uint8_t userConfig[64]
Run Code Online (Sandbox Code Playgroud)
但我得到了相同的结果..
我已经看过堆栈溢出问题使用SPI接口初始化microSD卡并没有看到任何与我的问题匹配的答案(也就是我尚未尝试过的事情).
我有类似的问题,我试图通过微控制器的SPI接口(特别是HC908)访问SD卡.我已经尝试遵循物理层简化规范v2.00中的流程图,它似乎在Transcend 1 GB和2 GB以及AE&C 1 GB卡上正确初始化.但是我在我的相机上使用的旧卡片藏有其他三张随机卡片时遇到了问题.
我的代码都是HC908汇编程序.我确定了SPI时钟线,并且在初始化期间它运行大约350 kHz(HC908在我的低MCU时钟速度下提供的唯一速度倍增器,在100 - 400 kHz窗口内).
以下是未完成初始化例程的三张卡的结果(所有这些都是连续完成而不更改任何代码或时序参数):
Canon 16Meg card (labeled as SD):
Set card select high
Send 80 SPI clock cycles (done by writing 0xFF 10 times)
Set card select low
Send CMD0 [0x400000000095] and Loop up to 8 times waiting for high bit on response to go low
R1 = 0x01 (indicates idle)
Send CMD8 [0x48000001AA87] and Loop up to 8 times waiting for high bit on response …Run Code Online (Sandbox Code Playgroud) [更新]我正在为此提供奖金.坦率地说,我不关心使用哪种加密方法.最好像XTEA,RC4,BlowFish这样的东西...但你选择了.
我想要最小的努力,最好只是将文件放入我的项目并构建.
理想情况下,您应该已经使用代码在Delphi和C中对文件进行加密/解密(我想在Atmel UC3微处理器(C编码)和Windows PC(Delphi编码)之间交换文件. -de-crypt两个方向).
我非常喜欢单个.PAS单元和单个.C/.H文件.我不想使用DLL或支持几十种加密算法的库,只需要一个(我当然不希望安装程序有任何东西).
我希望我在这里听起来不太挑剔,但我一直在谷歌搜索和尝试代码超过一个星期仍然找不到两个匹配的实现.我怀疑只有已经做过这件事的人可以帮助我......
提前致谢.
作为我上一篇文章的后续内容,我仍然在寻找一些非常简单的代码,为什么我可以 - 用最少的努力 - 加密文件并在PC上的Delphi和Atmel UC3 u-processor上的C之间进行交换.
这在理论上听起来很简单,但在实践中这是一场噩梦.有很多可能的候选人,我花了几天谷歌搜索并试用它们 - 无济于事.
有些是humonous库,支持许多加密算法,我想要一些轻量级的东西(特别是在C/u处理器端).
有些看起来很好,但是一组源只提供块操作,其他字符串(我更喜欢整个文件en/de-crypt).
大多数文档似乎记录很差,没有无意义的参数名称,也没有调用函数的示例代码.
在过去的周末(再加上几天),我已经烧掉了大量的XTEA,XXTEA和BlowFish实现,但是虽然我可以加密,但我无法逆转这个过程.
现在我在看AES-256.有谁知道C中的实现是一个AES.C文件?(当然还有AES.H)
坦率地说,我将采取任何可以在Delphi和C之间进行整个文件加/解的方法,但除非任何人自己实际完成此操作,否则我希望只听到"符合标准的任何实现都应该这样做" - 这是一个不错的选择理论但只是没有为我工作:-(
C中有任何简单的AES-256吗?我有一些看起来很合理的Delphi代码,但在我一起尝试之前不会确定.
提前致谢 ...