是否可以使用AVR编程器器件(支持JTAG并通过USB连接到PC)使用其JTAG接口对MSP430 MCU进行编程?
如果不是,为什么不呢?!?如果是,如何将其与Code Composer Studio 5集成?
尝试将4位数组合在一起,给出正确的小数值,我有一点问题.首先让我从我的代码开始.
long firsttwo, secondtwo, combined;
firsttwo = 0x0C;
secondtwo = 0x6C;
Run Code Online (Sandbox Code Playgroud)
十进制值0C:12
十进制值6C:108
但所有0C6C的十进制值:3180
现在我如何将所有数字放入一个变量才能将其转换为十进制数?因为如果我只是firsttwo自己转换,那么secondtwo我自己就不会获得相同的最终总数.谢谢!
我正在尝试写入PIC18F87J11上的闪存,但我在理解汇编时遇到了问题.我的PIC的数据表只有汇编,我正在使用C编译器.我想知道是否有人可以帮助我将这部分代码翻译成C语言.此代码可在此处找到,第7.5节.
MOVLW CODE_ADDR_UPPER ; Load TBLPTR with the base address
MOVWF TBLPTRU
MOVLW CODE_ADDR_HIGH
MOVWF TBLPTRH
MOVLW CODE_ADDR_LOW
MOVWF TBLPTRL
MOVLW DATA0
MOVWF TABLAT
TBLWT*+
MOVLW DATA1
MOVWF TABLAT
TBLWT*
PROGRAM_MEMORY
BSF EECON1, WPROG ; enable single word write
BSF EECON1, WREN ; enable write to memory
BCF INTCON, GIE ; disable interrupts
MOVLW H'55'
MOVWF EECON2 ; write H'55'
MOVLW H'AA'
MOVWF EECON2 ; write H'AA'
BSF EECON1, WR ; start program (CPU stall)
BSF INTCON, GIE …Run Code Online (Sandbox Code Playgroud) 我是微控制器编程的新手,特别是PIC18F87J11,我使用的是MPLAB C18编译器.我正在阅读各种主题的数据表,例如保存到内存或使用计时器.我注意到这些例子是用汇编语言编写的,但我对它的经验最少.有没有办法在我的项目中一起使用Assembly和C的强大功能?
我不明白汇编那么好,否则我会尝试将代码转换为C,在这种情况下,我只是使用汇编代码,几乎没有变化.
现在有人能告诉我如何在使用MPLAB C18编译器的C程序中使用汇编函数吗?
汇编函数可以像hello world一样简单.我只需要了解在MPLAB上梳理和使用两种不同语言的过程.我试图创建一个快速测试功能,但我不知道在哪里放置汇编代码.汇编代码是否需要包含在项目中的自己的文件?
我希望有人可以通过一个完整的简单例子来启发我,以便能够看到全局.我提前给予帮助,谢谢!
如果我们在PIC单片机中定义一个变量"整数",那么当我在Atmel微控制器中定义相同的"int"变量时,它的大小是否相同?或者它会有不同的尺寸?
这个问题是在嵌入式系统的采访中,答案应该是什么?
我有点困惑!
它取决于微控制器还是编程语言?在所有不同的编程语言中,相同的变量类型如整数是否相同?
这不是同一个问题,因为嵌入式控制器有点不同.
我需要计算GPS co-ordinates计算行进距离之间的距离.我都试过了Haversine和Vincenty算法,做工精细我的台式电脑上,但是当我使用相同的代码MSP430 chip使用CCS IDE,IDE会抛出错误,指出" 计划将不适合可用内存 ".
是否有其他替代方法或代码可以找到两个GPS坐标之间的距离?哪个适合MSP430微控制器的可用内存?
我只想知道它们之间的基本区别.
我在某些地方发现TRAP本质上也被称为软件中断,或类似异常.
另外软件中断和异常之间的基本区别是什么.
软件中断可以由INT指令生成,但TRAP只能通过除零等特定场景生成?是对的吗?
请为此查询提供合适的答案,其中包括s/w中断陷阱和异常.
embedded microcontroller interrupt interrupt-handling interrupted-exception
我正在为我的AVR ATmega32微控制器编写一个"gpio"设备驱动程序.驱动程序具有初始化功能,如下所示.我使用枚举将配置传递给函数.调用此函数的一个示例是
gpio_init_port(MY_PORT_A, INPUT, HIGH);
Run Code Online (Sandbox Code Playgroud)
这会将PORTA设置为输入,默认值为HIGH.我使用switch语句来检查传递的配置,以将相应的端口设置为输入或输出.现在我想在用户输入错误输入的情况下在switch语句的"default"情况下使用#error preprocessor指令,例如
gpio_init_port(5, INPUT, HIGH);
Run Code Online (Sandbox Code Playgroud)
因此编译停止并打印错误消息.但我不知道为什么它没有按照我的预期运作.我所指的代码部分是这样的:
default:
#if (port_number != MY_PORT_A && port_number != MY_PORT_B && port_number != MY_PORT_B && port_number!=MY_PORT_D)
#error "Wrong Input. You have entered invalid port number."
#endif
Run Code Online (Sandbox Code Playgroud)
表达方式
(port_number != MY_PORT_A && port_number != MY_PORT_B && port_number != MY_PORT_B && port_number!=MY_PORT_D)
Run Code Online (Sandbox Code Playgroud)
不评估,并且不打印错误消息.但是当我改变它
#if (1)
#error "Wrong Input. You have entered invalid port number."
#endif
Run Code Online (Sandbox Code Playgroud)
它工作正常.我的另一个问题是当我写一些类似的东西时
gpio_init_port(5, ***OUTPUT***, HIGH);
Run Code Online (Sandbox Code Playgroud)
虽然我这次传递"OUTPUT",但也会打印错误消息,这不应该发生,因为默认情况仅针对"INPUT"情况定义.
gpio.h
______
typedef enum port_number{
MY_PORT_A=0,
MY_PORT_B,
MY_PORT_C,
MY_PORT_D
} port_number_t;
typedef …Run Code Online (Sandbox Code Playgroud) 所以我STM32F103C8T6用C语言编写了一个微控制器程序,使用RTC(实时时钟)和显示模块.
RTC和显示都工作正常,但是当我尝试从RTC中断处理程序内部更新显示时,它不起作用.
当我从内部向显示器写东西时main(),它工作得很好.
中断处理程序也可以工作,所以我认为问题在写入显示的函数中.
此功能使用小延迟来与显示控制器进行通信.
我以前使用SysTick过来生成这样的延迟:
void delay(uint32_t n){
uint32_t start = systick_count;
while (systick_count - start < n);
return;
}
Run Code Online (Sandbox Code Playgroud)
但不知何故,在RTC的中断处理程序中,它不起作用.所以我用这个替换了我的延迟函数,而不是使用SysTick:
for (; i>0; i--) {
for (int j = 0; j < 72; ++j) {
__asm__ __volatile__("nop\n\t":::"memory");
}
}
Run Code Online (Sandbox Code Playgroud)
现在一切正常.
我试图理解,为什么SysTick显然在RTC中断处理程序内不起作用.
我想这可能是由中断优先级引起的,但根据数据表,默认情况下,SysTick Interrupt优先级高于RTC中断优先级.
也许有人可以解释,为什么会这样?
编辑1:好的,所以我已经阅读了更多关于中断优先级的内容,似乎我需要正确配置NVIC_IRQChannelPreemptionPriority.我会尽快尝试这个...
关于中断内部的延迟,我知道这不是正确的方法,但我仍然想了解程序的行为
EDIT2:我刚刚尝试通过以下方式更改中断优先级:
// set RTC interrupt priority to 15 (lowest)
NVIC_SetPriority(RTC_IRQn, 15);
// set interrupt priority of SysTick to 0 (highest)
NVIC_SetPriority(SysTick_IRQn, 0); …Run Code Online (Sandbox Code Playgroud) 我目前正在查看一些用C语言为微控制器编写的代码,而我只是想弄清楚为什么某些变量设置为等于0x0和0x1。有人可以解释一下吗?
这是代码:
// Global variables
static bool volatile radio_busy;
int xx = 0x0;
int yy = 0x0;
int zz = 0x1;
bool flag = 1;
Run Code Online (Sandbox Code Playgroud)