我在微处理器类中,我们在飞思卡尔CodeWarrior中使用汇编语言来编程68HCS12微控制器.本周我们的任务是反转一个字节,所以如果字节是00000001,输出将是10000000,或者是00101011到11010100.我们必须使用汇编语言,并被告知我们可以使用旋转和移位(但不限于! )完成这项任务.我真的不知道应该从哪里开始.
我正在尝试为MC9S12VR微控制器编写嵌入式应用程序.这是一个16位微控制器,但我处理的一些值是32位宽,而在调试时我捕获了一些似乎是由于读取错误导致的异常值.
我正在为C89中的这个微处理器编写固件,并通过飞思卡尔HC12编译器运行它,我想知道是否有人建议如何在这个特定的微控制器上阻止它们,假设情况就是这样.
我的部分应用涉及驱动电机并根据编码器产生的脉冲估算其位置和速度(在电机的每次完整旋转时都会产生脉冲).
为此,我需要配置一个MCU定时器,以便跟踪脉冲之间经过的时间.但是,定时器的时钟频率为3 MHz(预分频后),定时器计数器寄存器仅为16位,因此计数器每隔~22ms溢出一次.为了补偿,我设置了一个中断处理程序,它在定时器计数器溢出时触发,并将"溢出"变量递增1:
// TEMP
static volatile unsigned long _timerOverflowsNoReset;
// ...
#ifndef __INTELLISENSE__
__interrupt VectorNumber_Vtimovf
#endif
void timovf_isr(void)
{
// Clear the interrupt.
TFLG2_TOF = 1;
// TEMP
_timerOverflowsNoReset++;
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后我可以计算出当前时间:
// TEMP
unsigned long MOTOR_GetCurrentTime(void)
{
const unsigned long ticksPerCycle = 0xFFFF;
const unsigned long ticksPerMicrosecond = 3; // 24 MHZ / 8 (prescaler)
const unsigned long ticks = _timerOverflowsNoReset * ticksPerCycle + TCNT;
const unsigned long microseconds …
Run Code Online (Sandbox Code Playgroud) 我正在使用名为 HC12 的旧版 C 编译器编写固件。目前我使用 GNU Make 作为构建系统。我希望开始使用 CMake,但遇到了一个问题:编译器不支持某些标准 C 编译器语法,即“-o”标志。
我制作了一个自定义工具链文件并添加了所有 c 标志,但 CMake 似乎在生成的 GNU Makefile 中隐式添加了“-o”来编译源文件。
HC12 编译器允许我使用 -objn="name_of_file" 来指定输出文件名。
我的问题:有没有办法让 CMake 停止放置隐式“-o”,以便我可以使用这个编译器?
我知道该处理器有一个 GCC 端口,但目前无法选择更改编译器。
我被要求增强MCU的固件安装程序(特别是飞思卡尔MC9S12E64 - 虽然我不知道这是否重要).
增强安装的目的是限制固件的安装次数.看起来最好的方法是在固件安装过程中唯一识别使用中的特定MCU,以便在中央数据库中跟踪.
如果MCU有MAC地址,这似乎是可行的.不幸的是,这些MCU没有网络接口,因此没有MAC地址.通过上面提到的MCU手册,我找不到MCU的唯一标识符的指示.
我的问题是:MCU通常是否具有与它们相关联的唯一标识符 - 类似于MAC地址 - 可以通过软件获取,因为固件被刻录到这些设备中?