标签: microcontroller

C 16位微控制器培训

我的公司正在从汇编编码微控制器转换到C.我们正在考虑Microchip,Atmel,Renasas等.人.用于未来使用C代码的项目.是否有良好的培训资源可以让我们的工程师快速掌握C?研讨会,讲师,课程等.工程师的经验水平从无培训到知识各不相同.

c embedded microcontroller assembly

1
推荐指数
1
解决办法
2114
查看次数

中继控制器和微控制器有什么区别?

中继控制器微控制器有什么区别?

我正在研究Arduino电路板,我刚刚进入电子产品领域,所以我想了解其中的不同之处.

我知道这不是一个编程问题,但我正在开发PHP,并想知道在开始编码之前有什么区别,以确保我走的正确路径.

microcontroller arduino

1
推荐指数
1
解决办法
1041
查看次数

调试微处理器

我们的一个协处理器是一个8位微处理器.它的主要作用是控制处理闪存的硬件.我们怀疑它运行的代码非常低效,因为我们在读/写闪存时测量了低速.问题是,我们只有一个J-TAG端口连接到主CPU,因此调试它不是一个选项.我们所拥有的是一个可从CPU获得的寄存器,其中包含微处理器的程序计数器.坏消息是,微处理器的工作频率与CPU不同,因此监控外部的程序计数器也很困难.测量微处理器内部的时间也非常困难,因为它的寄存器只有8位长.不用说,代码是汇编而且非常复杂.你会如何解决这个问题?

embedded debugging microcontroller jtag

1
推荐指数
1
解决办法
236
查看次数

为什么在STM32编程中需要无限循环?

我用C(gcc)编写STM32F4,它是一个ARM Cortex M4,我看到所有的例子都用无限循环完成了main()函数,即使程序的其余部分都是从中断执行的.如果我尝试从程序中删除循环,则中断也会停止.

为什么我不能删除此循环并退出主线程?

这是集会(我猜它是拇指,但我不能读,即使有文档):

LoopFillZerobss:
ldr  r3, = _ebss
cmp  r2, r3
bcc  FillZerobss

/* Call the clock system intitialization function.*/
bl  SystemInit 
/* Call the application's entry point.*/
bl  main
bx  lr    
.size  Reset_Handler, .-Reset_Handler
Run Code Online (Sandbox Code Playgroud)

c microcontroller arm stm32 cortex-m

1
推荐指数
1
解决办法
4038
查看次数

如何在更少的内存中执行大代码?

我怀疑,在所有微控制器中,闪存更多是ram(例如:atmega16它是16k,但RAM只有1 Kb)..

那么,如何执行代码,CPU是否直接从Flash本身执行,如果是,那么是否使用了给出的那个小RAM.

ram microcontroller avr atmel atmega16

1
推荐指数
1
解决办法
536
查看次数

C语言代码中的重复符号"buf_position"

在这个程序中我得到错误,在C ..\async.obj中复制符号"_buf_position"我已经将buf_position声明为全局变量我不知道这段代码有什么问题,有人可以看看.

//async.h文件

extern uint8_t buffer[10];
extern uint32_t buf_position = 0;
extern uint8_t local_buff[10];
extern uint32_t retVal; 
Run Code Online (Sandbox Code Playgroud)

//async.c文件

#include "async.h"
void Transmit_Data(void)
{ 
.............
...........
}

void Excep_SCI0_RXI0(void)//This is a recive interrupt,when some data is available on serialport
{

  buffer[buf_position++]= SCI0.RDR;
}
Run Code Online (Sandbox Code Playgroud)

// main.c

#include "async.h"

void main(void)
{
    while(buffer[buf_position-1]=='\r')
    {
        memcpy(local_buff,buffer,buf_position-1);
        Display_LCD(LCD_LINE1, local_buff);
        Transmit_Data(); 
        buf_position = 0;
        //memset(buffer,0,sizeof(buffer));
    }
}
Run Code Online (Sandbox Code Playgroud)

c microcontroller

1
推荐指数
1
解决办法
68
查看次数

哪个更好?int8_t vs 32位MCU中的int32_t

假设有

function f(int8_t a, int8_t b) //  a b only need 8 bits
Run Code Online (Sandbox Code Playgroud)

另一种选择是:

function f(int32_t a, int32_t b) // a b only need 8 bits
Run Code Online (Sandbox Code Playgroud)

它运行在32位MCU,如ARM Cortex_M.哪个是关于所需代码大小,数据大小和执行效率的更好选择?

如果在8位MCU如8051,那int8_t应该更好吧?

c microcontroller arm 8051

1
推荐指数
1
解决办法
1049
查看次数

为什么我们在这样的微控制器编程中寻址寄存器

为什么当我们为寄存器写入地址时,我们将偏移量添加到基址?

另外我们为什么要编写如下语法

#define CGPIO  (*((volatile unsigned long*)0x400FE608));
Run Code Online (Sandbox Code Playgroud)

我的意思是指针部分语法

c embedded microcontroller arm

1
推荐指数
1
解决办法
84
查看次数

为什么我的C程序跳过这个if语句?

我有这个C程序,我在代码作曲家工作室写.

#include <msp430.h> 

/*
 * main.c
 */
int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;    // Stop watchdog timer

    int R5_SW=0, R6_LED=0, temp=0;

    P1OUT = 0b00000000;     // mov.b    #00000000b,&P1OUT
    P1DIR = 0b11111111;     // mov.b    #11111111b,&P1DIR
    P2DIR = 0b00000000;     // mov.b    #00000000b,&P2DIR

    while (1)
    {
        // read all switches and save them in R5_SW
    R5_SW = P2IN;

    // check for read mode
        if (R5_SW & BIT0)
          {
            R6_LED = R5_SW & (BIT3 | BIT4 | BIT5); // copy the pattern from …
Run Code Online (Sandbox Code Playgroud)

c microcontroller code-composer

1
推荐指数
1
解决办法
254
查看次数

在ISR结束时使用reti()

我有这个代码不起作用的问题.. ISR正在工作..我在其他代码中测试了它的闪烁..

但是要将x ++放在ISR中并在main()函数中读取X,它永远不会闪烁...

我不熟悉asm我认为这是编译器optomization所以我把变量挥发,但它没有工作..

#define F_CPU 16000000UL

#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>

volatile static uint8_t x = 1;

ISR( TIMER0_OVF_vect )
{
    x++;
    reti();
}

int main(void)
{

    /* Replace with your application code */
    DDRB = DDRB | 0B00100000 ; // pinMode(13,OUTPUT);
    TCCR0A = 0;
    TCCR0B = (1 << CS00 ) | (1 << CS02 ); //1024 prescaler
    TIMSK0 |= 1 << TOIE0 ;
    sei();

    while (1) 
    {

        if (x  >= 61) //never happens ? 
        {
            PORTB …
Run Code Online (Sandbox Code Playgroud)

c microcontroller avr isr atmelstudio

1
推荐指数
1
解决办法
431
查看次数