Добавлено after 4 hours 33 minutes 13 seconds:
Ещё поигрался, копирую рабочий проект, заменяю основной файл и перестаёт работать. Уже тупо скопировал текст и заменил некоторые заголовочные файлы и опять перестало работать. Мистика((
Чудесно.Shumaher писал(а):просто копирую текст в исходники и трындец. Даже не компилируется
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
typedef struct{
volatile uint8_t * port;
uint8_t and;
uint8_t or;
} seg_pin_t;
#define pn(p,b) {&PORT ## p, ~_BV(b), _BV(b)}
#define A _BV(0)
#define B _BV(1)
#define C _BV(2)
#define D _BV(3)
#define E _BV(4)
#define F _BV(5)
#define G _BV(6)
#define H _BV(7)
#define DIG0 (A+B+C+D+E+F)
#define DIG1 (B+C)
#define DIG2 (A+B+G+E+D)
#define DIG3 (A+B+C+D+G)
#define DIG4 (B+F+G+C)
#define DIG5 (A+F+G+C+D)
#define DIG6 (A+C+D+E+F+G)
#define DIG7 (A+B+C)
#define DIG8 (A+B+C+D+E+F+G)
#define DIG9 (A+B+C+D+F+G)
const __flash seg_pin_t pins[8] = {
pn(B,0),
pn(C,0),
pn(D,0),
pn(B,2),
pn(C,2),
pn(D,2),
pn(B,4),
pn(C,4)
};
const __flash seg_pin_t commons[4] = {
pn(D,1),
pn(D,4),
pn(B,1),
pn(C,1)
};
uint8_t scr[4] = {DIG5,DIG2,DIG3,DIG4};
ISR(TIMER0_OVF_vect){
static uint8_t com;
const __flash seg_pin_t *p = commons+com;
*p->port &= p->and;
if(++com >= 4) com = 0;
uint8_t d = scr[com];
d = ~d;
p = pins;
for(uint8_t i=0; i<8; i++, d>>=1){
*p->port = (*p->port & p->and) | (d & 1 ? p->or : 0);
p++;
}
p = commons+com;
*p->port |= p->or;
}
int main(void){
DDRB = 255;
DDRC = 255;
DDRD = 0x7F;
PORTD = 0x80;
TCCR0 = 4;
TIMSK = _BV(TOIE0);
sei();
while(1);
}
Код: Выделить всё
AVR Memory Usage
----------------
Device: atmega16
Program: 432 bytes (2.6% Full)
(.text + .data + .bootloader)
Data: 5 bytes (0.5% Full)
(.data + .bss + .noinit)Код: Выделить всё
#include <mega16.h>
// Declare your global variables here
#define uint8_t unsigned char
typedef struct {
volatile uint8_t * port;
uint8_t and;
uint8_t or;
} seg_pin_t;
#define pn(p,b) {&PORT ## p, ~_BV(b), _BV(b)}
#define _BV(bit) (1 << (bit))
#define A _BV(0)
#define B _BV(1)
#define C _BV(2)
#define D _BV(3)
#define E _BV(4)
#define F _BV(5)
#define G _BV(6)
#define H _BV(7)
#define DIG0 (A+B+C+D+E+F)
#define DIG1 (B+C)
#define DIG2 (A+B+G+E+D)
#define DIG3 (A+B+C+D+G)
#define DIG4 (B+F+G+C)
#define DIG5 (A+F+G+C+D)
#define DIG6 (A+C+D+E+F+G)
#define DIG7 (A+B+C)
#define DIG8 (A+B+C+D+E+F+G)
#define DIG9 (A+B+C+D+F+G)
flash const seg_pin_t pins[8] = {
pn(B,0),
pn(C,0),
pn(D,0),
pn(B,2),
pn(C,2),
pn(D,2),
pn(B,4),
pn(C,4)
};
flash const seg_pin_t commons[4] = {
pn(D,1),
pn(D,4),
pn(B,1),
pn(C,1)
};
uint8_t scr[4] = {DIG5,DIG2,DIG3,DIG4};
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{ uint8_t d; uint8_t i;
static uint8_t com;
flash const seg_pin_t *p = commons+com;
*p->port &= p->and;
if(++com >= 4) com = 0;
d = scr[com];
d = ~d;
p = pins;
for(i=0; i<8; i++, d>>=1){
*p->port = (*p->port & p->and) | (d & 1 ? p->or : 0);
p++;
}
p = commons+com;
*p->port |= p->or;
}
void main(void)
{
DDRB = 255;
DDRC = 255;
DDRD = 0x7F;
PORTD = 0x80;
TCCR0 = 4;
TIMSK = _BV(TOIE0);
#asm("sei")
while(1);
}Код: Выделить всё
Program size: 254 words (508 bytes), 3,1% of FLASH
11 words (22 bytes), 4,2% reduced by Code CompressionНет, необязательным.Shumaher писал(а):То есть что, это считается обязательным?
Ерунду не несите.BOB51 писал(а):Только вот в этом случае саму программу и прошивку надо делать также по правилам CodeVisionAVR через ISP да предварительно удалив штатный бутлоадер ардуинки,