我最近一直使用GHI Electronics的uALFAT microSD板进行数据记录,但我的可靠性一直存在问题.它的一些函数调用有时需要比我能处理的时间长得多.我目前正在使用MSP430微控制器与uALFAT通信.
我可以使用哪些类似的板而不是希望更可靠的uALFAT?
要么
如果我需要设计自己的接口板来使用MSP430,那么最有利的OEM解决方案是什么?
在IAR C/C++编译器手册中,它声明编写优化友好的源代码:
避免使用&运算符获取局部变量的地址.由于两个主要原因,这是低效的.首先,变量必须放在内存中,因此不能放在处理器寄存器中.这会导致代码越来越大.其次,优化器不能再假设局部变量不受函数调用的影响.
还有哪些方法可以获取局部变量的地址?显然我知道,如果我有一个指向该变量的指针,我可以使用它,如果我有一个数组,我可以使用数组名称,但是我不知道任何其他方法来获取局部变量的地址而不是&运营商.
我用IAR EBW编程msp430.
我的表达式如下:
adres = (uint_fast16_t *) 0x8602 + (0x0200*i);
Run Code Online (Sandbox Code Playgroud)
在for循环中,以便我随着每个循环增加.出于某种原因,它会跳过两个地址中的每一个并给我:
0x8602
0x8A02
0x8E02
Run Code Online (Sandbox Code Playgroud)
等等.因此跳过0x8802,也就是0x8C02等等.
为什么会这样?
////下面是完整代码,请注意我被放置在三个循环中,每个人都给出相同的结果.////还要注意在调试时检查时显示为:1,2,3 ......等
#include "io430.h"
#include <stdint.h>
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
// Inicjalizuj piny GPIO
P3OUT &= ~(BIT4+BIT5); // zeruj warto?ci by zapobiec krótkotrwa?ym impulsom
P3DIR |= BIT4; // ustaw pin3.4 UCA0TXD oraz piny 3.0 CS, 3.1 SIMO, 3.3 CLK jako wyj?cie
P3DIR &= ~(BIT5); // ustaw pin3.5 UCA0RXD oraz …Run Code Online (Sandbox Code Playgroud) 这可能是一个简单的问题所以,我希望你能指出我正确的方向.
我正在用C编写一个简单的IO程序.在我的程序中间,我有一个永不执行的if语句.当我试图在if语句中添加一个断点时,我意识到这一点只是为了让它自动删除并向下推过if语句块.进一步深入研究问题,c编译器不会为我的if语句创建任何汇编代码.以下是我的代码片段和程序集输出.
码:
void sendData(unsigned int val1 ){
P1OUT |= 1;
if ((val1 & 0x8000 ) == 0x8000)
wait(T1H);
else
wait(T1L);
P1OUT &= ~(1);
}
Run Code Online (Sandbox Code Playgroud)
*注意:是的,我确实有另一个叫做wait的函数,可以延迟多个周期.
部件:
13 P1OUT |= 1;
sendData():
c0ae: D3D2 0021 BIS.B #1,&Port_1_2_P1OUT
18 P1OUT &= ~(1);
c0b2: C3D2 0021 BIC.B #1,&Port_1_2_P1OUT
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
我在MSP430中使用了具有高编译器优化的定时器A,但发现我的定时器代码在使用高编译器优化时失败.如果没有使用优化,代码工作正常.
此代码用于实现1 ms计时器滴答.timeOutCNT在中断时增加.
以下是代码,
//Disable interrupt and clear CCR0
TIMER_A_TACTL = TIMER_A_TASSEL | // set the clock source as SMCLK
TIMER_A_ID | // set the divider to 8
TACLR | // clear the timer
MC_1; // continuous mode
TIMER_A_TACTL &= ~TIMER_A_TAIE; // timer interrupt disabled
TIMER_A_TACTL &= 0; // timer interrupt flag disabled
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 500;
TIMER_A_TACTL &= TIMER_A_TAIE; //enable timer interrupt
TIMER_A_TACTL &= TIMER_A_TAIFG; //enable timer interrupt
TACTL = TIMER_A_TASSEL + MC_1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Code Composer Studio为MSP-EXP430G2制作一个教程,使LED闪烁.最初,它有一个无限循环闪烁:
for(;;)
// This empty for-loop will cause the lines of code within to loop infinitely
{
P1OUT ^= 0x01;
// Toggle P1.0 using exclusive-OR operation (^=)
// P1OUT is another register which holds the status of the LED.
// '1' specifies that it's ON or HIGH, while '0' specifies that it's OFF or LOW
// Since our LED is tied to P1.0, we will toggle the 0 bit of the P1OUT register
for(i=0; i< 20000; i++);
// …Run Code Online (Sandbox Code Playgroud) 当有时我的代码将某个值视为已签名时,我会感到非常困惑,有时它会在比较值时将其视为无符号值.代码如何知道值是有符号还是无符号?
我理解它应该是"测试目的地",但究竟是什么意思呢?.w和.b的操作如下:dst + 0FFFFh + 1 dst + 0FFh + 1
我在将字符“c”的 ASCII 值转换为十六进制时遇到了差异。根据我的理解,“c”的 ASCII 值是十进制的 99 和二进制的 01100011。但是,当我将此二进制值转换为十六进制时,我预计会得到 0063,但相反,我得到的是 FF63。

这是错误:
msp430-gcc -mmcu=msp430g2553 -Os -c -o gpio_test.o gpio_test.c
In file included from msp430_lib.h:9:0,
from gpio_test.c:4:
gpio_api.h:20:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘gpio_init’
gpio_api.h:27:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘gpio_ioctl_pull_en’
gpio_api.h:35:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘gpio_write’
make: *** [gpio_test.o] Error 1
Run Code Online (Sandbox Code Playgroud)
这是错误来源的头文件(行号不匹配,因为我从文件中删除了所有注释以缩短它):
/* gpio_api.h - General Purpose Input/Output API
*/
#ifndef MSP_GPIO_API_H
#define MSP_GPIO_API_H
#include <msp430g2553.h>
#define INPUT 0
#define OUTPUT 1
#define DOWN 0
#define UP 1 …Run Code Online (Sandbox Code Playgroud)