Обсуждаем контроллеры компании Atmel.
Ответить

Re: CodeVision AVR в вопросах и ответах

Чт окт 10, 2019 13:55:14

спасибо Oxford.

вот тут собственно изначальный архив с рабочей моделью протеуса:
https://drive.google.com/open?id=1UsX8r ... _E2kVJ9fbb

тут готовый проэкт для codevision с кучами ошибок (только в место main.c переименовал в menu_01.c).
https://drive.google.com/open?id=1Of-MS ... u9nvFrqGg8

тут со всеми что сумел "напортачить". думаю в "исправленных ошибок или несогласиях" которых я проделал будут кучи моих ошибок, потому лучше чтобы опытные пользователи началибы портирование с хотабы с предыдущего архива :) например с ругания компилятора о том чтобы "This library requires AVR-GCC 3.3 or later, update to newer AVR-GCC compiler !" я просто закоментировал. потом еше codevision выдавал ошибку ссылавшего на файл pgmspace.h, в место него воткнул в папку AVR-GCC-овский файл pgmspace и назвал его avr_pgmspace и т.д.
https://drive.google.com/open?id=1CEmjv ... OEhwjAKlHg

Re: CodeVision AVR в вопросах и ответах

Чт окт 17, 2019 14:57:53

упростил вопросс, убрал все лишнее (может не все), остались 2 ошибки на данный момент. зачем ругается компилятор ?

Error: D:\C prog\cvavreval\MY PROJ\tests\test_328_2\generator.c(86): a value of type 'flash pchar flash *' can't be used to initialize an entity of type 'f_get_txt'
Error: D:\C prog\cvavreval\MY PROJ\tests\test_328_2\generator.c(126): incompatible return expression of type 'unsigned char [16]', expect a 'flash pchar'

вот собственно код:


#include <mega328.h>
#include <delay.h>
#include <string.h>
#include <stdlib.h>
#ifndef NULL
#define NULL (void*)(0)
#endif
#define PSTR(str) (str)

#define item_sim(t, v) { \
.id = M_SUBMENU + v, \
.item.smi.text = t, \
.item.smi.sub_cnt = 0, \
.item.smi.subm = NULL}

#define item_opt(f, d, o) { \
.id = M_OPTMENU, \
.item.omi.get_text = f, \
.item.omi.data = d, \
.item.omi.optid = o}

static char tr[16];
typedef char flash *pchar;
typedef enum{
EV_NONE = 0,
EV_PREV = 1,
EV_NEXT = 2,
EV_ENTER = 3,
EV_ESCAPE = 4
} EVENT;

static pchar ed_uint(void* data, unsigned char v, unsigned char ch);

flash char mmm1[] = "ONE LINE";
flash char mmm2[] = "MULTI LINE";
#define menu_one 1
#define menu_multi 2
static unsigned int number1 = 100;
typedef char prog_char;
typedef char* (*f_get_txt)(void*, unsigned char , unsigned char);
unsigned int edit_uint (unsigned char y, prog_char *msg, unsigned int val, unsigned int min, unsigned int max);
typedef struct Node* tag_menu;
typedef unsigned char byte;
typedef struct {
int a;
char b[5];
} struct_type;

typedef enum {
M_SUBMENU = 0x00,
M_OPTMENU = 0x80
} MENU_ITEM_TYPE;

typedef struct {
pchar text;
unsigned char sub_cnt;
tag_menu subm;
} MENU_SUB_ITEM;


typedef struct {
f_get_txt get_text;
void* data;
unsigned char optid;
} MENU_OPT_ITEM;

typedef union{
MENU_SUB_ITEM smi;
MENU_OPT_ITEM omi;
} MENU_ITEM;

typedef struct Node{
MENU_ITEM_TYPE id;
MENU_ITEM item;
} t_menu;



flash t_menu m_mode[] = {
item_sim(mmm1,menu_one),
item_sim(mmm2,menu_multi)
};

flash t_menu m_edit[] = {
item_opt(ed_uint, &number1, 0)
};

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif


// Global enable interrupts
#asm("sei")

while (1)
{
// Place your code here
PORTC.0 = 1;
#asm("nop")
#asm("nop")

PORTC.0 = 0;
}
}

static pchar ed_uint(void* data, unsigned char v, unsigned char ch){
char ts[6];
if(ch){

*(unsigned int*)data = edit_uint(0,PSTR("Unsigned: "),*(unsigned int*)data,50,20000);
}

strcpyf(tr,PSTR("UINT EDIT "));
ltoa((unsigned int)(*(unsigned int*)data),ts);
strcat(tr,ts);
return tr;
}

unsigned int edit_uint(unsigned char y, prog_char *msg, unsigned int val, unsigned int min, unsigned int max)
{
return 1;
}

Re: CodeVision AVR в вопросах и ответах

Пн окт 28, 2019 13:46:43

Делал свою систему распределения времени подзадач вот что у меня вышло...(пример для опроса DS18b20)
при развертывании дефайнов код разворачивается в обычный свитч-кейс...
_____
я уже выкладывал эту идею на обозрение на этом форуме - меня попросили избавиться от ГОТО (я избавился) и предложили идею как узнавать текущий программ каунтер - через стек (он сохраняется в стеке при вызове подпрограммы) - пошел по этому пути, т.к. считаю, что на подзадачах код будет более компактным (а для тини это важно)
но у меня ничего не вышло...
_____
пробовал через указатели - не получается в указатель загрузить данные из регистра SP... пишет про несоответствие типов
пробовал через ассемблерные вставки - не получается вставке передать метку (из С кода) и как параметр метку тоже применить не получилось (чтобы взять адрес из неё)
пишу здесь, т.к. работаю в КВАВР и если возможно, предпочел бы (но не обязательно) получить подсказку по нюансам именно этого компилятора ...
может есть у кого какие наработки или мысли... :cry:

Re: CodeVision AVR в вопросах и ответах

Чт окт 31, 2019 12:06:34

Сделал на подпрограммах - вроде всё понял... и квавр уже не ругается и 100 слов кода сэкономилось... но... ничего не работает и не понятно почему... :dont_know:
весь код остался прежним, изменилось содержимое дефайнов:
описание подпрограмм:
Set_PC(х) - получает параметр и записывает его в ячейку памяти, по которой осуществится переход при завершении подпрограммы (аналог JMP но по переменной, а не по метке)
Get_PC() - возвращает значение PC точки, откуда был вызван
StartDelay(x,t) - проверяет вышло ли время ожидания, и если вышло - переходит по сохраненному адресу, если нет переходит к концу программного блока
Delay(num,te,x,t) - записывает время в переменную ожидания, адрес в переменную возврата и выходит из блока...
(num теперь не нужна, но пока осталась для совместимости со старым кодом)
EndDelay(te,x,t) - обозначает конец программного блока (метка), + добавлена задержка следующего запуска блока кода
Последний раз редактировалось Ivanoff-iv Чт окт 31, 2019 13:03:20, всего редактировалось 1 раз.

Re: CodeVision AVR в вопросах и ответах

Чт окт 31, 2019 12:57:33

Ivanoff-iv, Вы изобретаете велик.
Любая ОС делает всё это более экономней, и код получается прозрачней.

Re: CodeVision AVR в вопросах и ответах

Чт окт 31, 2019 13:00:10

Да, я знаю, что любая ОС это делает, но не любая ОС влезет в тини, чтобы ещё и место полезное осталось...

Re: CodeVision AVR в вопросах и ответах

Чт окт 31, 2019 13:05:09

А у Вас цель - впихнуть невпихуемое ? Задача в целом какая ?

PS: Ёжики плакали, рыдали, но продолжали есть кактусы...

Re: CodeVision AVR в вопросах и ответах

Чт окт 31, 2019 13:17:19

Почему невпихуемое? уже несколько проектов шустро крутятся на тини 2313... например термостат, на DS18b20 и семисегментнике, с настройкой уставок, коррекции измерения датчика, и плавным изменением яркости индикатора, с высоким приоритетом пользовательского интерфейса (нет ни малейшего подмаргивания экрана, четкие измерения длительности нажатия клавиш... хотел ещё в меню вывести направление регулирования, но флеш предательски закончился... если я заведу свой новый код - влезет и он и ещё место останется...), неужели ради простого термостата или таймера обязательно мегу или стм покупать?

Re: CodeVision AVR в вопросах и ответах

Чт окт 31, 2019 13:29:18

Ivanoff-iv писал(а):Почему невпихуемое?
потому, что
Ivanoff-iv писал(а):флеш предательски закончился...

И Вы пытаетесь что-то изобретать, дабы впихнуть невпихуемое :)

Вы хотите сделать красивый линейный код, изобретая обёртки, которые разворачиваются в ужасные switch-case'ы.
Подглядите, как это делают в элементарных кооперативных ОС. Откроете для себя кое-что новенькое :)

Re: CodeVision AVR в вопросах и ответах

Чт окт 31, 2019 13:36:32

обёртки, которые разворачиваются в ужасные switch-case'ы.
ну... уже не разворачиваются...
Подглядите, как это делают в элементарных кооперативных ОС...
Если порекомендуете, куда глянуть, буду благодарен... :beer:

Re: CodeVision AVR в вопросах и ответах

Чт окт 31, 2019 13:48:34

OSA

Re: CodeVision AVR в вопросах и ответах

Чт окт 31, 2019 20:35:27

Аlex писал(а):Подглядите, как это делают в элементарных кооперативных ОС
в OSA "разворачивается" все намного страшнее... там даже для сборки не так все просто организовано. имхо, с точки зрения красоты кода OSA далеко не лучший пример. я очень в ней разочаровался, а от внутренней "механике" вообще в ужасе.
имхо.

Re: CodeVision AVR в вопросах и ответах

Чт окт 31, 2019 22:27:11

Каждому своё...
Много лет уже ей пользуюсь и ни разу в ней не разочаровался...
На сколько помню, ты был слишком требователен к искомой ОСи. Не забывай, OSA - простая и кооперативная ОСь !

Да и разговор был не совсем об операционках и их качествах. А о том, что человек делает планировщик, только через одно место. В то время, когда уже давно придумали другой способ реализации подобных алгоритмов.

Re: CodeVision AVR в вопросах и ответах

Пт ноя 01, 2019 11:32:26

OSA - штука интересная, но для тини немного крупновата... (почитал доки, пошарил коды, поставить пока не вышло...)
_____
Мой код не заработал... я нашел и убрал свои косяки... но, если задержек больше одной, то оптимизатор код так закручивает, что функции Гет и Сет РС оказываются на разных уровнях вложенности и перескок из одной в другую оказывается невозможен... :(

Re: CodeVision AVR в вопросах и ответах

Вт ноя 05, 2019 08:02:31

Как в CVAVR выключить оптимизатор кода ?

Re: CodeVision AVR в вопросах и ответах

Вт ноя 05, 2019 08:17:06

#pragma optsize-
или в настройках проекта

Re: CodeVision AVR в вопросах и ответах

Вт ноя 05, 2019 08:23:28

или в настройках проекта
искал в настройках, но не нашел отключения. Только способ оптимизации и уровень оптимизации.

Re: CodeVision AVR в вопросах и ответах

Сб ноя 09, 2019 17:35:25

Здравствуйте профессионалы,помогите пожалуйста новичку,только начал изучать программирование,начал с камня атмега 16,попробовал зажечь светодиод,потом как и все,попробовал зажечь светодиод через кнопку,все получилось,только вот беда,контролер запитан у меня через программатор усбас,при подаче питания на микроконтроллер сразу без нажатия кнопки загорается светодиод и тухнет-это из за чего такое?


Добавлено after 7 minutes 33 seconds:
Еще подскажите пожалуйста,также начал осваивать протеус,по началу светодиоды мигали,а потом перестали,может я что-то натыкал,как это исправить?
Вложения
1111111111111111.jpg
Схема в протеусе
(43.66 KiB) Скачиваний: 138

Re: CodeVision AVR в вопросах и ответах

Пн ноя 11, 2019 10:09:41

Товарищи, помогите не сойти с ума.
Имею простенький проект на аттини25, тактируюсь PWM.



Пытаюсь по сигналу на PB4 бегать по разным веткам

, но что-то идет не так. как будто всегда висит ноль на входе (в железе уровень меняется).
Что я делаю не так? Помогите

Вопрос снят, разобрался. Предшественник выключил цифровой буфер на входе.

Re: CodeVision AVR в вопросах и ответах

Пн ноя 25, 2019 11:59:45

Здравствуйте! Задумался над тем, как авторы часов на ВЛИ и ГРИ реализуют различные спец эффекты, к примеру скроллинг цифр в разные стороны, затухание и подобные. Могли бы рассказать как все это работает, особенно сочетание с динамической индикацией... Думал думал и никак не соображу, очень хочется сделать это в своих часах. Изучал исходники, но мало что понял, свой код то писать сложно, а уж понять чужой.

Единственная мысль которая возникла, это массив с набором параметров каких то, но до конца мысль сформировать не могу. Буду благодарен за помощь. В первую очередь интересно не готовое решение, а сам принцип. Хочу понять досконально как оно работает.

Спасибо!
Ответить