Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 17.02.2018, 12:06   #26
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,175
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

Greg
почему от ума? или это сарказм?
я бы предположил, что как раз не от ума.

hfmscan
просто использую FSRx - найдите в проекте все куски с использованием, оцените что там происходит или выложите сюда.

Наверняка Вам помогут перепаковать Ваши наборы команд в наборы без использования FSRx.
besogon на форуме   Ответить с цитированием
Старый 17.02.2018, 12:43   #27
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,887
Вес репутации: 5611/171
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

Цитата:
Сообщение от besogon Посмотреть сообщение
Greg
почему от ума? или это сарказм?
я бы предположил, что как раз не от ума.
тут прям детектив. у человека проект на Си, асм он не знает вообще. от слова совсем. Но услышал (прочитал), что именно в его процессоре есть регистры с такими именами, с помощью которых можно делать индексную адресацию. И он начала в них что-то писать. Это - от ума.
Зачем было вообще узнавать имена каких-то регистров, если пишешь на с...
поправьте если я не прав
Цитата:
Сообщение от besogon Посмотреть сообщение
hfmscan
Наверняка Вам помогут перепаковать Ваши наборы команд в наборы без использования FSRx.
почему бы таким помощником не сделать компилятор...

Последний раз редактировалось Greg; 17.02.2018 в 12:50.
Greg вне форума   Ответить с цитированием
Старый 17.02.2018, 13:26   #28
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 44
Сообщений: 415
Вес репутации: 243/31
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

так помогать перепаковавать не нужно.
раньше все была написано через обращения массив[индекс],
я конечно могу потрать полдня, опять все вренуть назад, получить прибавку к размеру кода, а толку от этого будет 0...
или вы серьезно считаете что моя проблема с глюком когда портится массив (из которого просто читают) связана с тем что я сижу на FSR ?
раньше меня тут пинали за статик переменные, которые мне кучу места в коде сэкономили.... теперь за FSR....
может я чего то не понимаю, скажите - что я выиграю если перепишу все на обычный код С ? что проиграю в месте и скорости я знаю. а вот что я выиграю кроме читабельности?????
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 17.02.2018, 14:14   #29
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,175
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

hfmscan
я не работал плотно с С18. не знаю, насколько для него вот это вот все критично. в целом С18 проблемный и уже давно не поддерживается.

обращения массив[индекс] - пробовали через указатели?

что я выиграю кроме читабельности????? - читабельность есть дополнительная возможность избежать серьезных логических промахов.
а может у Вас и так все хорошо.
мы же не знаем, что у Вас там в итоге происходит - даже по сути Ваши массивы и код с fsr не видели.
besogon на форуме   Ответить с цитированием
Старый 17.02.2018, 14:28   #30
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 44
Сообщений: 415
Вес репутации: 243/31
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

по поводу FSR и указателей, вот старая тема после которой я все переписал на FSR и получил выгоду (и в размере и в скорости)...

насчет логических промахов - когда всегда пишешь так то это уже как родное... промахнуться можно и в простых вещах и даже без использования регистров

ну вот например простая функция, где бегаю по массиву через регистры
Код:
// поместить в конец массива query байт в HEX виде
void query_add_hex(static uchar value) {
    static char c;

    FSR2 = (int) query;
// поиск конца строки
    while ( INDF2 ) c = POSTINC2;
// добавление
    char2hex_FSR2(value);
    POSTINC2 = ' ';
    POSTINC2 = 0;
}

void char2hex_FSR2(static char a) {
    static uchar ch;

    ch = 0;
    ch = a >> 4;
    if (ch < 0x0A)
        ch += 0x30;
    else
        ch += 0x37;
    POSTINC2 = ch;

    ch = a & 0x0F;
    if (ch < 0x0A)
        ch += 0x30;
    else
        ch += 0x37;
    POSTINC2 = ch;
    INDF2 = 0;
}
простая очистка массива
Код:
#define ClearBuffer(a,b) FSR0=(int)a; ClearBuffer_Idx=b; do { POSTINC0 = 0; } while (--ClearBuffer_Idx);
Код:
// Поиск параметра по его ID
// 0xFF если не найден
// Если вместо ID передать 0xFF то найдет первый свободный
// каждый параметр занимает 4 байта массива HFMparams,
// ID (1 байт), адрес параметра в ЭБУ (2 байта), код пересчета (1 байт)
uchar HFMparams_Find_PRM(static uchar ID) {
    static uchar i;
    static uchar cnt;

    cnt = sizeof (HFMparams) >> 2;
    i = 0;
    FSR2 = (int) HFMparams;
    do {
        if (INDF2 == ID) return i;
        FSR2 += 4;
        i += 4;
    } while (--cnt);
    return 0xFF;

}
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 17.02.2018, 14:31   #31
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 46
Сообщений: 1,685
Вес репутации: 2423/83
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

Цитата:
Сообщение от hfmscan Посмотреть сообщение
по поводу FSR и указателей, вот старая тема после которой я все переписал на FSR и получил выгоду (и в размере и в скорости)...
То просто компилятор гуано, на вменяемом компиляторе - не получил бы, с включенной оптимизицией.
DimaS вне форума   Ответить с цитированием
Старый 17.02.2018, 14:34   #32
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 44
Сообщений: 415
Вес репутации: 243/31
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

возможно и гумно, но предлагали кто-то пересесть на GCC или как-то так - не смог, так же предлагали XC8 - прогимороился неделю - ничего не получилось...
когда свой же проект перенес под STM32, то там все завелось хорошо и размер был около того же (но конечно и контроллеры разные)
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 17.02.2018, 14:59   #33
siargy
Senior Member
 
Аватар для siargy
 
Регистрация: 03.07.2007
Адрес: Минск
Возраст: 40
Сообщений: 901
Вес репутации: 1351/68
siargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud of
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

Цитата:
Сообщение от hfmscan Посмотреть сообщение
простая функция
Код:
// поместить в конец массива query байт в HEX виде
void query_add_hex(static uchar value) {
    static char c;

    FSR2 = (int) query;
// поиск конца строки
    while ( INDF2 ) c = POSTINC2;
// добавление
    char2hex_FSR2(value);
    POSTINC2 = ' ';
    POSTINC2 = 0;
}
мне кажется тут скобочек {} нехватает
__________________
Построил тепличку, посеял литопсы, вырастил кактусы
siargy вне форума   Ответить с цитированием
Старый 17.02.2018, 15:06   #34
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 44
Сообщений: 415
Вес репутации: 243/31
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

насколько я помню когда один оператор то не нужны они...
там другой баг я сейчас увидел:
POSTINC2 = ' ';
INDEF2 = 0; // так должно быть
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 17.02.2018, 15:08   #35
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,175
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

hfmscan
Код:
#define ClearBuffer(a,b) FSR0=(int)a; ClearBuffer_Idx=b; do { POSTINC0 = 0; } while (--ClearBuffer_Idx);
вряд-ли имеет смысл это инлайнить, впрочем всякое бывает.
в с18 я бы в функцию загнал. там и без этого проблем вагон.

если сделать как-нибудь так, то будет сильно хуже?
Код:
int buff[BUFF_SIZE];
...
int* dst;
int cnt;
...
dst = buff;
cnt = BUFF_SIZE;
for(; cnt; --cnt){
    *dst++ = 0;
}
...
void char2hex_FSR2(static char a) - единственный допустимый квалификатор класса хранения для аргументов это register. и, снова же, с с18 я бы не рисковал и не использовал квалификаторы классов хранения при передаче аргументов.

вообще лучше без такого обходиться.
наверное лучше б как-нибудь так.
u16 ascii_bin8_to_ascii16(u8 data) ...
besogon на форуме   Ответить с цитированием
Старый 17.02.2018, 15:14   #36
siargy
Senior Member
 
Аватар для siargy
 
Регистрация: 03.07.2007
Адрес: Минск
Возраст: 40
Сообщений: 901
Вес репутации: 1351/68
siargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud of
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

Цитата:
Сообщение от hfmscan Посмотреть сообщение
INDEF2 = 0; // так должно быть
да без разницы, функция то закончилась
__________________
Построил тепличку, посеял литопсы, вырастил кактусы
siargy вне форума   Ответить с цитированием
Старый 17.02.2018, 15:16   #37
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,175
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

Код:
uchar HFMparams_Find_PRM(static uchar ID) {
    static uchar i;
    static uchar cnt;

    cnt = sizeof (HFMparams) >> 2;
    i = 0;
    FSR2 = (int) HFMparams;
    do {
        if (INDF2 == ID) return i;
        FSR2 += 4;
        i += 4;
    } while (--cnt);
    return 0xFF;

}
когда Вы декларируете статические аргументы внутри функции, Вы должны явным образом указывать, что функция не reentrant

иначе это благодатнейшая почва для сложноотлавливаемых ошибок в случае глубоко многопоточного приложения.

снова же, почему не попробовать сделать просто через указатели?
почему не использовать поле структуры в ясном виде?
besogon на форуме   Ответить с цитированием
Старый 17.02.2018, 15:26   #38
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 44
Сообщений: 415
Вес репутации: 243/31
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

reentrant что это? погуглю
опасность статических внутри функций - нельзя рекурсивно вызывать, но у меня и нет ее (нет необходимости).
через указатели - я же давал ссылку, где в том числе и через указатели было, но код кривой был и длинный
структуры - ну когда я на паскале программлю, то так и делаю, а тут я и по синтаксису плаваю и вообще.. но главное что особо смысла то нет (ну кроме читабельности), потом это опять же нужно смотреть как компилятор массив структур преобразует - может мне не понравится )
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Старый 17.02.2018, 15:38   #39
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,175
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

hfmscan
забыл язык.
https://ru.wikipedia.org/wiki/%D0%A0...81%D1%82%D1%8C
опасность статических внутри функций - нельзя рекурсивно вызывать - если статические константы - то можно.
вопрос глубже.

в целом не знаю. поработав с софтовыми решениями microchip я стараюсь использовать софтовые решения microchip в последнюю очередь.
потому что каждый блин раз это какой то фокус. какой-то эксперимент на людях.

если у Вас какой то pic16(контроллеры pic18xx), то можете попробовать sdcc.

с другой стороны, если вагон и маленькая тележка специфичного кода для С18, я слабо представляю что я бы делал на Вашем месте.

Какой бы Вы решение не приняли - удачи.
besogon на форуме   Ответить с цитированием
Старый 17.02.2018, 15:53   #40
hfmscan
Senior Member
 
Аватар для hfmscan
 
Регистрация: 17.01.2013
Адрес: Москва
Возраст: 44
Сообщений: 415
Вес репутации: 243/31
hfmscan has a spectacular aura abouthfmscan has a spectacular aura abouthfmscan has a spectacular aura about
Отправить сообщение для hfmscan с помощью ICQ
По умолчанию Re: Может испортиться FSR0 или FSR2 из-за прерываний?

первую часть я так и не понял - нужно мне еще как-то объявлять все свои функции или нет - мне кажется нет, ибо и так все работает?!

SDCC - ну вот видимо мне это и советовали, или GCC - не помню точно, суть в том что там нужно было код менять, но это не главное - то ли я поставить его не смог. то ли еще что - не помню, несколько лет прошло...
а вот с XC8 и еще один компилер пробовал - не понравилось
__________________
STM32F042
PIC18F25k80
hfmscan вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многофункциональные часы. Н.Заяц.Книга 4. samko Вопросы начинающих 11 12.06.2012 09:26
Имитатор DS18B20 Filya44 Вопросы начинающих 14 12.03.2012 17:39


Часовой пояс GMT +3, время: 11:39.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot