标签: avr

错误:从'const prog_uchar*'转换为'byte'会失去精度?

错误在这一行:

dataArray[iLedMatrix][iRow] |=  (byte)(bufferPattern[iRow]) & (1<<7);
Run Code Online (Sandbox Code Playgroud)

dataArray是:byte dataArray [NUMBER_LED_MATRIX] [NUMBER_ROW_PER_MATRIX];

bufferPattern是:const patternp*bufferPattern;

patternp是类型的typedef:typedef prog_uchar patternp [NUM_ROWS];

我在参考文献中可以看到prog_uchar是1个字节(0到255).所以我不明白失去精度的错误?任何的想法?

c c++ avr

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

使用字符数组作为长整数数组

在我的AVR上,我有一个字符数组,它以{R,G,B,x,R,G,B,x,...}的形式保存颜色强度信息(x是未使用的字节).有没有简单的方法来写一个long int(32位),char myArray[4*LIGHTS]所以我可以轻松写一个0x00BBGGRR数字?

我的类型转换是粗糙的,我不知道如何写它.我猜测只是制作一个指向long int类型的指针并将其设置为等于myArray,但后来我不知道如何随意告诉它将group x设置为myColor.

uint8_t myLights[4*LIGHTS];
uint32_t *myRGBGroups = myLights; // ?

*myRGBGroups = WHITE; // sets the first 4 bytes to WHITE
                      // ...but how to set the 10th group?
Run Code Online (Sandbox Code Playgroud)

编辑:我不确定类型转换是否是正确的术语,因为我认为如果它只是将32位数字截断为8位?

c arrays avr avr-gcc unions

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

AVR上的多任务RTOS

我有一个AT90USB162 AVR芯片,我想运行多任务RTOS,所以我正在评估可能的RTOS与我的AVR芯片一起使用.AVR支持哪些多任务RTOS?也许是QNX?(是否可以在AVR微芯片上运行QNX内核?).

提前致谢.

avr real-time rtos qnx avr-gcc

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

AVR:如果声明

我是AVR编程的新手.uint8_t received_msg如果它等于,我想控制一个变量()0xFF.这样做是否正确:

if (!(received_msg ^ 0xFF))
Run Code Online (Sandbox Code Playgroud)

或者我需要逐点比较

    uint8_t test = 0;
    test = received_msg ^ 0xFF 
    for (i =0; i<8; i++){
     test = 0 & (1<<received_msg)
    }
    if(test==0)
Run Code Online (Sandbox Code Playgroud)

c avr

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

加速AVR函数指针

我有一个avr程序,我想使用指向方法的指针.但为什么使用函数指针超过正常调用几乎慢4倍?我该如何加快速度呢?

我有:

void simple_call(){ PORTB |= _BV(1); }

void (*simple)() = &simple_call; 
Run Code Online (Sandbox Code Playgroud)

然后如果我用-O3编译并调用:

simple_call() 
Run Code Online (Sandbox Code Playgroud)

完成需要250ns.如果我改为打电话:

simple()
Run Code Online (Sandbox Code Playgroud)

完成需要960ns!

我怎样才能让它更快?

avr atmega arduino

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

代码中AVR的C语言代码无效?

在下面,您可以看到我用Codevision(C语言)编写的整个程序.当我想编译它时,我收到一些Switch块的错误!我很确定我的块的形式是正确的!你能看一下吗?

*******************************************************
This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : 
Version : 
Date    : 12/17/2014
Author  : 
Company : 
Comments: 


Chip type               : ATmega32
Program type            : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 512
*******************************************************/

#include <mega32.h>

// Standard Input/Output functions
#include <stdio.h>

#include <delay.h>

#include <stdint.h>


// Declare …
Run Code Online (Sandbox Code Playgroud)

c avr

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

考虑到有限的RAM空间,如何在C中声明和使用大小为[16] [256]的二维int数组.

我使用的是avr-8位MCU.它的RAM大小为2K.我必须声明并使用大小为[16] [256]的int变量.这台机器上的int是2个字节.该阵列将消耗2*16*256 = 8k.这个尺寸是不可接受的,因为我只有2K RAM.

我必须使用这个二维数组来存储正在写入的闪存页面的状态.此数组将采用1或0值.1表示写入闪存中的页面,0表示不写入闪存中的页面.

我正在寻找如何存储此状态的解决方案.不确定位字段是否有用.

c avr bit-manipulation multidimensional-array avr-gcc

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

向右移动负数

#include <avr/io.h>
#include <avr/interrupt.h>
int main()
{           
  DDRB|=0x82;
  DDRC=0x00;
  DDRD=0xFF;
  TCNT1H=(-640)>>8;
  TCNT1L=(-640);
  TCCR1A=0X00;
  TCCR1B=0X01;
  TIMSK=(1<<TOIE0)|(1<<TOIE1)
  sei();
  PORTD=PINC;
}

ISR(TIMER1_OVF_vect)
{
  TCNT1H=(-640)>>8;
  TCNT1L=(-640);
  PORTB^=0X80;
}
Run Code Online (Sandbox Code Playgroud)

请帮我解决TCNT1H=(-640)>>8; TCNT1L=(-640);代码....因为我一直在使用0-256的值,所以真的很混乱....

c avr bit-shift avr-gcc twos-complement

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

AVR C - const限定符在查找表声明中的行为如何?

我在论坛中发现了以下代码,我想知道const限定符在其中的表现如何?

const uint8_t data[] = { 15, 3, 41, 76, 2, 9, 5 };

val = data[5];
Run Code Online (Sandbox Code Playgroud)

现在,据我所知,const限定符使变量成为data[]只读,因此,在此示例中,无法修改数组的内容.令我困惑的是,限定符被应用于数组,这是一个指针,因此可以修改数组的内容,但指针本身不能.

我是对的吗?或者数组的内容是只读的?

c avr

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

vTaskDelay和_delay_ms之间的行为差​​异是什么?

1.简介

我似乎无法找到有关FreeRTOS任务中以下函数之间行为差异的信息或详细解释:

  • vTaskDelay
  • _delay_ms

2.代码

假设您有以下代码:

IdleHook +任务创建

Long value = 0;

void vApplicationIdleHook( void ) {
    while(1)
    {
        // empty
    }
}

int main(void)
{
     xTaskCreate(TaskIncrement, (const portCHAR *)"up" , 256, NULL, 2, NULL );
     xTaskCreate(TaskDecrement, (const portCHAR *)"down" , 256, NULL, 1, NULL );

     vTaskStartScheduler();
}
Run Code Online (Sandbox Code Playgroud)

vTaskDelay的任务

static void TaskDecrement(void *param)
{
    while(1)
    {
        for(unsigned long i=0; i < 123; i++) {
            //semaphore take
            value--;
            //semaphore give
        }
        vTaskDelay(100);
    }
}

static void TaskIncrement(void *param)
{
    while(1)
    { …
Run Code Online (Sandbox Code Playgroud)

c multithreading avr scheduling freertos

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