我是C#开发人员,我对MSP430等芯片的嵌入式开发很感兴趣.请提供一些工具和教程.Mono框架非常强大且可定制,单声道特定示例将更有帮助.
我使用的是带有 5.4 版 FreeRTOS 的 MSP430f5438。
我有一个有趣的问题,我无法弄清楚。
基本上,当我将 configTICK_RATE_HZ 设置为不同的值时,LED 闪烁得更快或更慢;它应该保持相同的速率。我将 configTICK_RATE_HZ 设置得越高,它闪烁得越慢,而当我将 TICK_RATE 设置得越低时,它就会闪烁得越快。
vTaskDelayUntil( &xLastFlashTime, xFlashRate ); 无论 configTICK_RATE_HZ 是多少,LED 应该每秒只闪烁一次。我逐步检查了 xFlashRate 以进行确定。它总是 = configTICK_RATE_HZ。代码:
xFlashRate = ledFLASH_RATE_BASE;//my flash base rate is 1000ms
xFlashRate /= portTICK_RATE_MS; //so xFlashrate = whatever configTICK_RATE_HZ equals
/* We need to initialise xLastFlashTime prior to the first call to vTaskDelayUntil().*/
xLastFlashTime = xTaskGetTickCount();
for(;;) {
vTaskDelayUntil( &xLastFlashTime, xFlashRate ); vParTestToggleLED( uxLED );
flashled();//this should happen every 1 second.
}
Run Code Online (Sandbox Code Playgroud)
当我将 configtick_rate_hz 设置为 1000 …
我试图了解这些指令对MSP 430处理器的作用:
(1) MOV.w #0x0055,R5
(2) BIC.w #0xFFEE,R5
(3) BIS.w #0x1144,R5
Run Code Online (Sandbox Code Playgroud)
我无法找到解释汇编指令的内容,并且很想知道每条指令后这些指令的作用以及存储在r5寄存器中的内容.有人能解释一下吗
".bss"命令在MSP430汇编代码中做了什么?例如,".bss beep_cnt,2"对变量beep_cnt2做了什么?
.bss beep_cnt,2 ; beeper flag
.bss delay_cnt,2 ; delay flag
Run Code Online (Sandbox Code Playgroud) float input = whatever;
long output = (long)(0.5f + input);
Run Code Online (Sandbox Code Playgroud)
这对于我在 MSP430 上的应用程序来说是低效的,使用编译器提供的浮点加法支持库。
我在想,这种特殊的“最近整数”舍入可能有一个聪明的“技巧”,避免了简单的浮点加法,也许是通过直接“位旋转”浮点表示,但我还没有找到这样的。任何人都可以建议这样的技巧来舍入 IEEE 754 32 位浮点数吗?
我正在尝试使用 与直接连接到我的 PC 的 z1 mote 进行通信pyserial。我想要做的是写入节点,并在收到命令后,节点应回复当前的温度读数,例如。
Python端可以是这样的(iinm)
import serial
ser = serial.Serial(0)
ser.write("hello") # the mote will receive the message and do something
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在使用 C 的 z1 mote 端接收消息。是否有特殊的方法来接收命令,还是我必须创建自己的方法?
任何提示和提示都将不胜感激。
我从TI的MSP430FR57xx的UART示例代码中找到了这部分。我不明白这__even_in_range(UCA0IV,0x08)是什么意思?
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,0x08))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}
Run Code Online (Sandbox Code Playgroud) 我想在我的 TI MSP430 微控制器的 FRAM 寄存器中存储一些浮点数据并且有一些问题。
我不知道我怎么能做到这一点。
使用普通整数变量没有问题。
普通整数变量:
void main()
{
uint32_t value = 25;
uint32_t framPtr = 0xD000;
FRAMC_write_uint32_t(value, (uint32_t*)framPtr);
}
void FRAMC_write_uint32_t(uint32_t value,
uint32_t *framPtr)
{
*framPtr = value;
}
Run Code Online (Sandbox Code Playgroud)
但是对于浮点值它不起作用。我试图将函数内的值更改为浮动,但没有结果。
这是我的浮动数据:
float value = 1.25;
uint32_t framPtr = 0xD000;
Run Code Online (Sandbox Code Playgroud)
使用此功能不起作用:
void FRAM_write_float(float value,
uint32_t *framPtr)
{
*framPtr++ = (float)value;
}
Run Code Online (Sandbox Code Playgroud)
它在我的记忆库中保存了数据1.40129846e-45 (DEN) (HEX: 0x00000001)。
我希望有人能帮助我解决我的问题。 谢谢!
我正在尝试使 TI MSP430 Launchpad 板上的 LED 闪烁。我有两段代码。一个有效,而另一个则无效。唯一的区别是工作版本中包含 volatile 关键字。为什么程序执行需要这个关键字?
这段代码有效...
void main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
// Configure Port Directions
P1DIR |= 0x01; // 0000 0001
volatile unsigned int i;
for(;;)
{
P1OUT ^= 0x01; // Set P1.0 LED on
for (i = 20000; i > 0; i--); // Delay
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这段代码不...
void main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
// Configure Port Directions
P1DIR |= 0x01; // 0000 …Run Code Online (Sandbox Code Playgroud) 当下面的代码针对像MSP430微控制器这样的16位整数机运行时,s32得到65446.
#include <stdint.h>
uint16_t u16c;
int32_t s32;
int main()
{
u16c = 100U;
s32 = 10 - u16c;
}
Run Code Online (Sandbox Code Playgroud)
我的理解是10 - u16c获取unsigned int的隐式类型提升.数学上10 - u16c等于-90.但是如何将负数表示为unsigned int呢?当-90被提升为unsigned int时,是否意味着忽略了数字的符号?
让我们假设,数字的符号被忽略.
90的二进制表示是00000000 01011010.当这被分配给s3232位宽的有符号整数变量时,转换是如何发生的?
为了s32等于65446,90必须采用2的补码.那就是00000000 10100110.
我不了解s32成为65446 的过程.
在像ARM这样的32位宽整数机器中,s32是-90,这是正确的.
要修复在16位整型机这种情况下,需要的类型转换(int16_t)为u16c.这是如何解决这个问题的?
添加s32了IAR Workbench(右下角)所示的hexa数据表示.它显示s32成为0x0000FFA6.因此,对于MSP430,从无符号16位转换为带符号32位的机器实现,它只是预先设置16 0位.