Да нет, это предупреждение должно возникать еще на уровне парсинга, а не кодогенерации. Вот сейчас я его подставлял в функцию, которая еще не используется - и получал предупреждения задолго до того, как получал предупреждение, что функция не используется и никакого кода для неё не сгенерено.
И собственно, уже понятно, что при выполнении c = (c << 1) - c преобразуется в int и выскакивает предупреждение. Устранить его можно кастингом, как в вами упомянутой теме и предложили: c = (unsigned char)(c << 1). Скорее вопрос, почему не выскакивает при (c <<= 1).
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Хотел бы спросить еще непонятку (хоть к данной теме относится косвенно, но все же рискну спросить сдесь) - домучал код до двухканального вольтметра (во вложении). При проверке в протеусе - протеус работает, все показывает но выводит восклицательный знак с ошибкой: [PIC12 ADC] PC=0x02EA. ADC conversion clock period (5e-07) is possibly invalid for device clock frequency. [U1] Ошибка исчезает, если выставить в протеусе частоту м/к 1.25МГц и ниже. (А мне надо 4МГц) - Вопрос - что сделать, чтобы не было этой ошибки? Все значения делителя от 2-х до 64 и внутренн генерат 500КГц A/D Clock Source (TAD) я перепробовал, значение задержки после включения АЦП пробовал от 10 до 1000 мкс. Может быть это фишка протеуса? Он на мой м/к pic 16f676 пишет PIC12.
Вложения:
Комментарий к файлу: Файл протеуса vm_lcd.zip [7.25 KiB]
Скачиваний: 285
Комментарий к файлу: Файл си vm_lcd.c [5.46 KiB]
Скачиваний: 654
[PIC12 ADC] PC=0x02EA. ADC conversion clock period (5e-07) is possibly invalid for device clock frequency. [U1]
Я не знаю СИ. В программе не увидел настройки регистра ADCON0, а точнее битов 7-6, которые выбираются в зависимости от тактовой частоты. Для этого нужно обратится к таблице 11-1:
И прочитать раздел 11.1, или просто поставить задержку в 20мкс
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Не совсем понял - в PIC16f676 временная настройка делается не в ADCON0, а в ADCON1 - 4, 5, 6 битом. 6, 7 бит ADCON0 отвечают за: 7: Формат сохранения 10-разрядного результата 1=правое выравнивание 0=левое выравнивание 6: Выбор источника опорного напряжения 1=вывод VREF 0=напряжение питания VDD Я пользовался вот этой таблицей: Для 4МГц время должно быть 2 или 4 мкс, а делитель соответственно на 8 или на 16 - код 001 или 101 - я перепробовал все 7 вариантов из таблицы - все та же ошибка. Про время задержки я писал - перепробовал от 10 до 1000мкс - ошибка не уходит. Видимо дело в протеусе - попробую в железе. Файл прошивки hex во вложении. В коде настройки регистров такие: ADCON0 = 0b11000001; ADCON1 = 0b01010000; У меня версия протеуса 8.5 SP0 professional - если есть возможность - попробуйте в своем протеусе проверить.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Не совсем понял - в PIC16f676 временная настройка делается не в ADCON0, а в ADCON1 - 4, 5, 6 битом.
Я виноват, Вы правы. Тогда, вроде все правильно сделали. Конечно пробуйте в железе, там все по другому. Но и на Протеус ругаться не нужно. Я много раз на него грешил, но в итоге- каждый раз проблема была во мне!! Хотя откуда он взял ошибку с PIC12 - даже догадок нет.
Подскажите, какие параметры надо указать в PSECT, чтобы переменные _error и _next_correction легли в один банк с остальными переменными (конкретно _correction, так как в конце в зависимости от старшего бита _correction мне надо увеличить или уменьшить _next_correction). Сейчас, судя по дизассемблеру они находятся в самом начале ОЗУ 0 и 1 адрес в нулевом банке Спойлер
Распределение памяти выглядит так, но я в дизассемблере вижу, что _next_correction берётся с нулевого адреса, а _error накладывается на _unixtime по адресу 1 и 2.
Чёрт... убил целый час в поисках что такое регистр CCPTMRS в pic18f25k40. Упоминание есть, описания - нет. Посмотрел в хидерах XC8 - есть. Даже адрес есть. Ищу по адресу в дашите - Reserved. Гуглопоиск - ничего. Эррата - ничего. Потом в поиске наткнулся на предыдущую версию (40001843c.pdf против 40001843d.pdf) - тот даташит еще в старом стиле и там этот регистр есть.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Теперь такие "нюенсы" с даташитами все чаще попадаться будут... Приходится по несколько версий хранить (и не только для ПИКов, но и для остальных семейств...)
а, кажется, разобрался. не хватало поля space=1. А если я размещаю в секции COMRAM - оно точно будет до 0x5F адреса? и можно ли тогда до неё добраться через ACCESS?
Похоже, что так и есть:
Цитата:
COMRAM — consists of a single memory range that covers the common (unbanked) RAM, if present, for all PIC18 devices
Но надо будет одним глазом поглядывать на адреса выделенные моей секции.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Последний раз редактировалось uldemir Сб дек 02, 2017 19:58:32, всего редактировалось 1 раз.
Заголовок сообщения: Re: MPLAB в вопросах и ответах
Добавлено: Сб дек 02, 2017 16:12:58
Открыл глаза
Зарегистрирован: Вс май 28, 2017 19:07:32 Сообщений: 63
Рейтинг сообщения:0
Железячники, выручайте, написал простенькую программку для МК PIC18F1230 в MPLAB X 4.05. Программка должна на выходе давать случайную импульсную последовательность. За крутоть кода не поясню, я новичек в программировании МК и мог выпустить т.н. быдло-код.
#define SIGNAL 30 // Длительность сигнала в мкс #define DELMIN 100 // Минимальное время задержки в мкс #define DELMAX 400000 // Максимальное время задержки в мкс
void delay(int type); // Функция задержки void Prepare(void); // Функция подготовки МК
int main(int argc, char** argv) { Prepare(); // Запуск подготовки МК while(1) // Бесконечный цикл, основная задача МК { delay(0); // Задержка межуд сигналами TRISB = 0b00010000; // Подаем на выход лог. единицу delay(1); // Длительность сигнала TRISB = 0b00000000; // Выставляем лог. ноль } return (EXIT_SUCCESS); }
void delay(int type) // Функция задержки { int N; // Локальная переменная для промежуточных присвоений if(type == 0) { N = DELMIN + rand() % DELMAX; // Формируем случайную задержку } else { N = SIGNAL; // Определяем длительность сигнала }
for(int i = 0; i <= N; i++) {} // Держим заданный лог. уровень }
// Подготовка МК void Prepare(void) { TRISA = 0b00000000; // Направление работы ножек порта А TRISB = 0b00010000; // Направление работы ножек порта В CMCON = 0x07; // Отключение компараторов PORTA = 0; // Очищаем порт А PORTB = 0; // Очищаем порт Б RBPU = 0; // Подтягивающие R (0-вкл, 1-выкл) }
А при чём тут железячники? Ошибка типа софтверная. Уберите последний инклюд, думаю он и так из первого должен вызываться. А... похоже, компилятор не поддерживает ваш ПИК? А что за компилятор вы пользуете? MPLAB - это IDE, а не компилятор. Если PIC C18, то наоборот, первый инклюд выкиньте.
и нахрена вам в микроконтроллере argv argc? Как вы их передавать собираетесь? Если там поставить просто void, то может, и stdlib вам не нужен будет.
Добавлено after 29 minutes 3 seconds: Аха, Всё же XC8. Ну, тогда все инклюды долой, делаем один #include <xc.h> И не забываем, что надо еще конфигурационное слово сделать... Ладно, подскажу: Window -> PIC Memory Views -> Configuraton bits. Там их устанавливаете и там же есть кнопка сгенерить. Сгенеренный текст копируете в исходник.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Меня сегодня прозрело немного по поводу "implicit signed to unsigned conversion" при выполнении сдвигов. Надо мне обрабатывать отдельно младший и старший ниббл. Ну, скажем из БКД получить двоичное. Надо старший ниббл умножить на 10 и прибавить младший. С младшим проблем нет: temp & 0x0Fu - и все дела. А вот со старшим есть нюанс: (temp >> 4) * 10 - даёт предупреждение, ((temp>>4) & 0x0Fu) * 10 - даёт предупреждение, а вот ((temp & 0xF0u) >> 4) * 10 - отрабатывает чисто. Правда, это в случае, если переменная temp имеет тип unsigned char. Что будет с unsigned int - пока не разбирался.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Вышла новая MPLAB X IDE v4.15 (добавили поддержку программирования Atmel-ов из IDE) Не рекомендую её ставить. Эта падла не сохраняет положение окон. Каждый раз, при запуске, приходилось открывать текст программы вручную. "Откатился" на v4.10.
Доброе время суток уважаемые коты, только на днях порвал с виндус ХР, MPLAB 8.40 PROTEUS 7.7, и шагнул в мир виндус 7, PROTEUS 8, и MPLAB XC8, вот хотелось спросить, ссылки где можно скачать рабочий MPLAB XC8 и Си компилятор к нему с лекарствами, без лекарств то полно....? заранее спасибо.
_________________ Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
Хорошо, установил всё бесплатное, но ужас..., не могу соединить MPLAB X и PROTEUS 8, более того MPLAB X не генерирует файл "cof" поэтому отладить программу в пошаговом режиме с PROTEUS 8 не получится, подскажите кто как это победил ?
_________________ Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения