Список разделов Flyback.org.ru » не HV » Микроконтроллеры и всё, что с ними связано
Тему сейчас просматривают - зарегистрированных: 0, скрытых: 0 и гостей: 1
Зарегестрированные - Нет
Ответить с цитатой

Ivani
 


Баг в компиляторе Ардуино, код сишной либы:
Код:
    uint16_t val_raw = 0;
    тыры пыры
    res = (int32_t)(val_raw >> 3) * 40;

Иногда после компиляции знак есть, иногда проебан, по логике должен быть проебан всегда.


Добавлено: Fri Oct 27, 2023 9:16 am
Ответить с цитатой

Seriyvolk
Бездельник


Ivani писал(а):
Иногда после компиляции знак есть, иногда проебан
О каком знаке речь, если результат всегда будет положительным?

Добавлено: Sat Oct 28, 2023 11:51 am
Ответить с цитатой

Ivani
 


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

Добавлено: Sat Oct 28, 2023 12:12 pm
Ответить с цитатой

Электромонтёр
Экспериментатор


Не проще ли сразу на пять помножить? Или непременно три бита откинуть надо?

Добавлено: Sat Oct 28, 2023 1:06 pm
Ответить с цитатой

Ivani
 


Это чужая либа.

Добавлено: Sat Oct 28, 2023 1:42 pm
Ответить с цитатой

Vcoder
Магистр


Не получается отправить смс через gsm-модем SLM770A.

На команде "AT+CMGS" задумывается на пару минут, после чего выводит приглашение для ввода ">" и сразу в следующей строке "ERROR".

Пробовал две разные симки. Симки модем видит, на команду "AT+CPIN?" отвечает "+CPIN: READY".
Сотовая сеть также присутствует. "AT+CSQ" показывает адекватный уровень сигнала, "AT+COPS" выдает "MTS RUS".

На самый очевидный ответ "проверь есть ли деньги на счёте" сразу скажу, что на одной из симок деньги точно есть, проверяли. Кроме того модем не хочет отправлять смс и в режиме PDU тоже, когда в команде "AT+CMGS" передаётся длина сообщения, а номер получателя и само сообщение - после приглашения на ввод ">". В режиме PDU также после команды "AT+CMGS" задумывается на пару минут и выдаёт одномоментно ">" и "ERROR".

Позвонить с модема, кстати, тоже не получается с теми же симптомами - на команде "ATD" на пару минут задумывается, после чего выдаёт "ERROR". Однако если позвонить на модем, то звонок проходит, команда "ATA" поднимает трубку.

Кто имел дело с gsm модемами? В чём может быть дело? У меня мысли закончились...

Добавлено: Mon Oct 30, 2023 7:03 pm
Ответить с цитатой

Greef
 


думаю лучше покурить форум https://4pda.to/forum на эту тему, если не зареган, могу логин и пароль в личку скинуть

Добавлено: Mon Oct 30, 2023 7:54 pm
Ответить с цитатой

Linkoln
 


1Vcoder писал(а):
Не получается отправить смс через gsm-модем
В самом пакете эти услуги предусмотерены?
При звонке с модема в конце номера ; присутсвует ?
А то оператор может понять что работа CSD ,это есть не в каждом пакете.
Сколько СМС и Voice в пакете?
Может уже все выбрали .На модем СМС приходят ?
Поставить карточку в старый кнопочный и проверить работу СМС итд.
Я конечно жутко извиняюсь а где в описании написано что модем должен СМС отправлять ?

Добавлено: Mon Oct 30, 2023 8:08 pm
Ответить с цитатой

Vcoder
Магистр


Greef писал(а):
думаю лучше покурить форум https://4pda.to/forum на эту тему
Хм. Всегда думал, что 4pda это про гаджеты, а не про embedded. Но погляжу. Логин-пароль не надо, спасибо. Надо будет - сам зарегаюсь.

Добавлено: Mon Oct 30, 2023 9:25 pm
Ответить с цитатой

Linkoln
 


В описании написано VLTE сомневаюсь что будет звонить.
Маш модем для передачи данных.

Добавлено: Mon Oct 30, 2023 9:30 pm
Ответить с цитатой

Greef
 


Vcoder писал(а):
что 4pda это про гаджеты
Там достаточно любителей поковырять роутеры и их прошивки, и про модемы тоже было

Добавлено: Mon Oct 30, 2023 10:04 pm
Ответить с цитатой

Электромонтёр
Экспериментатор


Народ, кто с STM8S ещё работает, как сократить время реакции/возврата из прерывания? Неужто накладные расходы на само прерывание должны жрать 60+ тактов процессора? Может как-то настройки компилятора iar for stm8 ещё есть, кроме степени оптимизации? Сейчас максимальная степень оптимизации по времени, на стандартной средней оптимизации нужно было 320 период делать вместо 256.

В главном цикле делал меандр выводом порта, в начале и конце функции обработки прерывания взводил и сбрасывал бит другого вывода порта и на двухканальном осциллографе смотрел. Пачки импульсов - работа главного цикла, импульс - процедура обработки прерывания.

Добавлено: Tue Oct 31, 2023 8:50 pm
Ответить с цитатой

Доктор Зло
 


Электромонтёр писал(а):
должны жрать 60+
Это на С или ассемблере?
Если на С, то как минимум надо регистры в стек покласть и достать обратно в конце. Вполне.
Маловероятно что компилятор анализирует, что надо в обработчике, всю пачку и сохраняет стандартно.
И статусный регистр с флагами от операций тоже. Конкретно с СТМ8 не работал, но это всех
процов касается. Надо быстро, пишем на ассемблере.

Добавлено: Tue Oct 31, 2023 9:38 pm
Ответить с цитатой

Seriyvolk
Бездельник


Электромонтёр писал(а):
Неужто накладные расходы на само прерывание должны жрать 60+ тактов процессора?
А что даташит по этому поводу сообщает?
А функцию прерывания ты сам определял или силами готовых библиотек?

Добавлено: Tue Oct 31, 2023 9:50 pm
Ответить с цитатой

Электромонтёр
Экспериментатор


Доктор Зло писал(а):
Это на С или ассемблере?
Если на С, то как минимум надо регистры в стек покласть и достать обратно в конце. Вполне.
Маловероятно что компилятор анализирует, что надо в обработчике, всю пачку и сохраняет стандартно.

На С. Там ещё 12 / 16 виртуальных регистров в настройках компилятора. Максимальной оптимизацией удалось выиграть немного машинного времени.
Seriyvolk писал(а):
А что даташит по этому поводу сообщает?
А функцию прерывания ты сам определял или силами готовых библиотек?

Даташит говорит порядка 15 тактов. 30 тактов в сумме с учётом конвейера.
Функция прерывания взята из stm8sxxx.h

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

Добавлено.

Отказом от прерывания и тщательной оптимизацией удалось сократить время выполнения функции с ~320 тактов до ~250 тактов процессора.

Добавлено: Wed Nov 01, 2023 5:14 pm
Ответить с цитатой

Электромонтёр
Экспериментатор


Народ, как в iar скомпилировать отдельно функцию в бинарник и собирать прошивку с указанием на этот бинарник, чтобы он присоединялся к прошивке? Или задать функцию из скомпилированного бинаря массивом с точкой входа? Мне надо кусок кода без подробного исходника сделать, но чтобы собиралось и работало. Не хочу исходник на ноу-хау отдавать. Бинарь - пожалуйста, дизассемблерить и разбирать физику немного желающих будет.

Добавлено: Wed Nov 22, 2023 6:50 pm
Ответить с цитатой

N1X
 


Это называется статическая библиотека. Обычно при создании проекта когда указываешь тип, есть варианты "executable" и "library". Конкретно про иар не скажу, но смысл везде примерно один. Вбей в гугель iar library project...

Добавлено: Wed Nov 22, 2023 7:45 pm
Ответить с цитатой

Электромонтёр
Экспериментатор


Народ, на STM32 использовал такую конструкцию для переименования элементов массива в отдельные переменные

Код:
#define val[0] val0


В кейле этот код работал.

Но IAR for STM8 его не жрёт. Что может быть?


Добавлено: Sun Dec 24, 2023 4:09 pm
Ответить с цитатой

Денис
 


А что, так можно??
Переменная val0 задана выше этого дефайна? вдруг в этом дело

Добавлено: Sun Dec 24, 2023 4:51 pm
Ответить с цитатой

Электромонтёр
Экспериментатор


Денис писал(а):
Переменная val0 задана выше этого дефайна? вдруг в этом дело

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

Денис писал(а):
А что, так можно??

У меня целая библиотека таким макаром написана смех

Добавлено: Sun Dec 24, 2023 5:26 pm
Ответить с цитатой

N1X
 


Непонятно только, зачем эта лютая лють нужна?

Добавлено: Mon Dec 25, 2023 12:16 am
Ответить с цитатой

Электромонтёр
Экспериментатор


N1X писал(а):
Непонятно только, зачем эта лютая лють нужна?

Библиотека написана так, чтобы основная программа "usercode" писалась макросами как можно проще.
Код:
val2 = val0 | ( val1 & ~val2 )

проще, чем
Код:
val[2] = val[0] | ( val[1] & ~val[2] )

а у меня все переменные как часть массивов идут чисто для удобства библиотеки. Короче некоторый закос под "ардуиноскетчи", чтобы "пользовательский" алгоритм для вот этой игрушки писался и отлаживался за минимальное время смех щас только немного облагородить код и наверное всё. Хотя может ещё дополнительный сторожевой таймер задействовать от зависания процессора, хотя и основной работает - проверял на зависание, процессор сбрасывается, если два цикла опроса не обновлять регистры сторожа отлично
Кстати, пардон, переименование сделано таким образом
Код:
#define val0 val[0]


Добавлено: Mon Dec 25, 2023 4:24 am
Ответить с цитатой

N1X
 


Открой для себя структуры тогда уж...

Добавлено: Mon Dec 25, 2023 12:33 pm
Ответить с цитатой

Электромонтёр
Экспериментатор


N1X писал(а):
Открой для себя структуры тогда уж...

Тов. N1X, у меня элементы массива по очереди в цикле обсчитываются, ХЗ как такое с структурами сделать. Чтобы переменной-указателем структуру перебирать. Товарищ один тож про структуры говорил, но у меня массивы как группы переменных и в цикле по одной считаются по надобности. Мне так реально удобнее, программа небольшого размера )

Во всяком случае, библиотека отлажена и можно писать функции макросами.

Добавлено: Mon Dec 25, 2023 12:36 pm
Ответить с цитатой

N1X
 


Ну пока для себя и небольшая, то в принципе как угодно можно...
А вот кому-то другому, либо через пол годика самому в таком что-то понять - тот еще квест... Но это так, мнение, ни на что не претендую...

Добавлено: Mon Dec 25, 2023 2:39 pm
Список разделов Flyback.org.ru » не HV » Микроконтроллеры и всё, что с ними связано
На страницу Пред.  1, 2, 3 ... 150, 151, 152, 153  След.     Просмотр темы целиком



Лицензионное соглашение

(c)Flyback.org.ru
Российское общество любителей высоких напряжений.
Использование материалов с данного сайта и форума возможно только с разрешения администрации.