динамическая посегментная индикация + шим яркость каждого символа ну и пример чтения данных внутреннего термометра. пинаут подключения индикатора сводится к дефайнам общих выводов каждого символа и последовательном переборе маской - там все понятно. я подключал к ланчпаду сегмент а к P1.1 и так далее просто вниз по плате.
Проблему с глобальными переменными не решил но нашел способ обойти хоть и не особо удачный.
Вложения:
Комментарий к файлу: проект 2_VAMeter.rar [125.78 KiB]
Скачиваний: 586
_________________ Что нас не убило сделало нас осторожней Не доверяйте русским лужам - это может быть вход в метро.
Создаю дерево меню, чтобы по дисплею, используя кнопки, "бегать" по нему. В качестве элемента меню использую объект типа класс, в котором хранится массив дочерних объектов (массив указателей на те же объекты типа класс). В cpp на компьютере (у меня используется сbuilder) работает прекрасно, а в IAR при создании дерева меню, как будто не может выделить место под новый объект типа класс - хватает только на 9 пунктов меню, хотя места в RAM ещё предостаточно. В чём подвох? Нашёл в интернете темы о [пере]выделении памяти, типа этой, но чую что могу пойти не туда. Help! P.S.Launchpad MSP-EXP430F5529LP.
Код класса пункта меню: Спойлер
Код:
//class VLMenuItem; //класс объекта меню дисплея class VLMenuItem { //меню состоит из: // - указателя на функцию, выводящую данных (заголовок данных и данные) // - указателя на меню родителя; =0 только у VLMenuMain::rootMenu // - массива дочерних меню; порядок "сверху вниз"
public:
VLMenuItem *menuItemParrent; //указатель на родителя; когда =0, значит в корне TFunPtr FunctionShowInfo; //указатель на функцию вывода информации пункта меню на экран
VLMenuItem **subMenu; //массив дочерних меню unsigned int subMenuCount; //выделяемый размер массива дочерних меню int subMenuActiveIndex; //индекс активного меню
// какой индекс subMenu используем, родитель, связанная функция, размер subMenu bool AddSubMenu( unsigned char fsubMenuIndex, VLMenuItem *fparentMenu, TFunPtr fFuncShowMenu, unsigned char fsubMenuCreateCount) { subMenu[fsubMenuIndex] = new VLMenuItem( fparentMenu, fFuncShowMenu, fsubMenuCreateCount); if (subMenuActiveIndex<0) subMenuActiveIndex=0; return(true); }
//конструктор родитель меню функция вывода меню размер массива дочерних меню VLMenuItem( VLMenuItem *fparentMenu, TFunPtr fFuncShowMenu, unsigned char fsubMenuCreateCount) { //сохраняем принятые параметры menuItemParrent = fparentMenu; FunctionShowInfo = fFuncShowMenu; //и задаём по умолчанию subMenuCount = fsubMenuCreateCount; if (subMenuCount>0) { subMenu = new VLMenuItem*[subMenuCount]; for (unsigned int i_temp=0; i_temp<subMenuCount; i_temp++) subMenu[i_temp] = NULL; } subMenuActiveIndex = -1; }
//указатель на активное меню, объект типа класс MenuItem VLMenuItem *currentMenu; //когда =NULL, показываем стартовую заставку //указатель на корневое меню, содержит всю структуру меню VLMenuItem *rootMenu;
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Каков уровень оптимизации?? И сколько ОЗУ приходится?
Optimization - Low.
Во время отладки пытался проконтролировать вручную размер rootMenu - явно не могу (указатель указывает на 0x2790, а там голые цифры). IAR рапортует после компиляции: 885 bytes of DATA memory (+260 absolute). 51 bytes of const memory.
При каком размере стека стало работать без ошибок?
Сколько минимальный стек нужен мне для работы приведённого мною кода, не проверял, т.к. меню дальше будет раздуваться, и надо было знать доступное количество пунктов меню при новом значении (поставил 320).
При 160 позволял создавать 9 объектов типа класса [мною созданного]. При 320 (поставил сейчас) позволяет создавать 19 (проверял и простым созданием массива, и способом, приведённым мною здесь).
Мне кажется, что я заблудился в трёх регистрах. История такова - пока жду недостающие детали для одной конструкции, решил на время подключить этот ланчпад, чтобы он генерил необходимые мне сигналы для проверки остальной схемы. И вот один из сигналов такой: необходимо залить 32-х разрядный сдвиговый регистр данными и выдать строб для параллельной записи (ну наподобие 595-го регистра). В режиме ногодрыга всё работает. Но тут мне захотелось приключений и решил сделать через USI (кристалл msp430g2231). И тут оно работать перестало. Вернее работает не так как я хочу.
Регистр USI 16-ти разрядный. Значит, 32 бита мне нужно пересылать за два раза. Хотел сделать так:
загрузить младшую половину данных загрузить счетчик = 16 (тут должен сняться запрос прерывания и данные должны побежать ) дождаться появления запроса прерывания (это прерывание замаскировано и вызываться не должно) загрузить старшую половину данных загрузить счетчик = 16 (опять запрос должен сняться) дождаться запроса прерывания дёрнуть ногодрыгом строб параллельной записи.
LE = 1; __no_operation(); __no_operation(); __no_operation(); LE = 0;
Хотя всё равно не понятно, почему опрос флага прерываний не даёт нужного эффекта. Вернее понятно, что запрос прерывания убирается не сразу после записи в регистр USICNT, а когда этот USI начинает шевелиться.
С новым годом! Взял себе с работы домой девайс MSP430F5529_LaunchPad, я теперь на работе работаю с ним. Есть кто, кто может подсказать по работе с usb-портом на ланчпаде типа этого ?
Эмулирую стандартное hid-устройство типа datapipe. Использую usb descriptor tool, для создания т.н. дескрипторов для моего usb-девайса. Ланчпад корректно распознаётся моей операционной системой (Windows) как стандартное hid-устройство, без всяких вопросов и восклицательных знаков. Usb-сниффер [связи компа с usb-девайсами] использую. Он показал, что ответа от моего девайса нет.
Написал на компе простенькую программу связи с моим usb-устройством, оно мой ланчпад находит. В качестве теста решил отправить на комп пару байтов. Проблема в прошивке ланчпада. Для учёбы использовал example от ti.com. В ходе пошагового разбора, выяснил что проблема в процедуре копирования данных в usb-буфер (для отправки в хост компьютеру). Что интересно, в example тоже такая же проблема.
При копировании данных в буфер usb (для отправки в usb-хост), буфер usb недоступен для записи. Копирую туда (указателем), так не выдаёт ошибку и дальше идёт, и результата копирования ноль. Если до команды:
Код:
USBCNF |= USB_EN;
использовать команду:
Код:
*((unsigned int*)(0x1C80)) = 0x1234;
то оно выполняется. После команды "USBCNF |= USB_EN;", копирование в буфер usb не происходит (хотя в example код такой же - но и там контроль в watch параметра (unsigned int*)(0x1C80) показывает, что не работает).
Регистр ключа USBKEYPID ставил. Бит UPLLEN в USBPLLCTL всегда enable. Бит UBME (в EP_INPUT_1, USBIEPCNF_n) в регистре конфигурации endpoint-ов менять пытался - не даёт меняться даже с USBKEYPID. Не пойму почему.
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:1
Тут вот мой товарищ в порядке восстановления своего владения "аглицкой мовой", как он сам выразился, перевел документ MSP430 IAR Assembler. Вот ссылка. https://yadi.sk/d/KbZE9WNDnPRxD
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Подскажите пожалуйста, в чем может быть причина. Пользуюсь Energia. есть датчик DS18B20 и PC соединенный через USB, необходимо принимать команды с PC, что-то делать и отправлять данные на PC. Организовал протокол передачи n байт (на лаунчпаде и PC) без использования датчика все работает, т.е. принимает команду, моргает светодиодом, отправляет команду обратно на PC . Но если я хоть раз пользуюсь любой функцией из One Ware, больше Лаунчпад ничего не принимает. Даже если loop цикл пустой и я общаюсь с датчиком только по факту приема команды от PC, а после в пустом цикле loop опрашиваю Serial.available() - жду следующий команду от РС, Лаунчпад ее больше не принимает(((
При построении проекта, в окне build выводит отчёт типа:
7 274 bytes of CODE memory 240 bytes of DATA memory (+ 23 absolute ) 763 bytes of CONST memory (+ 136 absolute )
Хочу узнать, что значит (+ 23 absolute ).
Справочник IAR не знает, что это такое. Интернет тоже (если есть где-либо - поправьте!).
Решил копать через отчёты IAR. Настройкой в Linker -> Generate linker listing создал segment map в формате html. Далее, в этом файле так же сухо приводится absolute в сокращении "abs" в таблице Module summary.
Зацепился за "Module summary" -> Перерыл официальные доки IAR, много всяких в инете скачал, НО: везде приводится одна и та же фраза "Module summary which lists the contribution (in bytes) from each module". Ни слова про absolute.
Купил сие чудо http://www.ebay.com/itm/TI-MSP430-USB-B ... 0865942309 (пусть будет проклят иероглифический...) и не могу запустить.Есть даже инструкция на китайском http://download.eeworld.com.cn/detail/solarelec/180677 может я ошибаюсь,что инструкция подходит к этому программатору.Внутри стоит CH340G и микроконтроллер NXP.Драйвер CH340G поставил и прогу запустил,а дальше ничего непонятно как с ним работать.Кто сталкивался с этим программатором,помогите запустить
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения