Страница 3 из 8
Re: MSP430G2452 и SD карта
Добавлено: Сб июн 22, 2013 20:06:09
GreatDrek
Вообще к чему вся эта тема, в конце (не обязательно на этом МК) хочу подключить к нему экран кнопки, написать примитивную игру, а Flash нужен что бы там хранить например какие то игровые достижения.
Почему именно это? Просто всегда хотел сделать свое устройство, полностью запрограммированное мной на котором можно будет поиграть

Re: MSP430G2452 и SD карта
Добавлено: Сб июн 22, 2013 20:23:23
Ser60
GreatDrek писал(а):Просто не удобно что нельзя очистить один байт из сегмента
Если у Вас в программе имеется интенсивная работа с записью во флеш, попробуйте семейство MSP430FRxxx с ферро-магнитной памятью. Там для записи байта/слова в память не надо стирать весь блок и специальной процедуры записи не надо. В С прото операции присваивания с синтаксисом записи в RAM записывают в любое место FRAM. Красота! Не говоря уже о том, что FRAM выдерживает на несколько порядков больше перезаписей чем FLASH. Кстати, любопытно, что последний писк фирмы - модель MSP430FR5969 семейства Wolverine можно заказать на настоящий момент только в России через Compel ! Их серийный выпуск намечен позже в этом году, а пока все остальные страны могут попробовать их через семплы. Я, помню, долго охотился за ними - семплы появляются и их тут-же все растребывают - это не контроллеры а "полный атас". Но в Росии, похоже, ни у кого к ним интереса пока нет, 10 штук через Compel доступны уже несколько месяцев.
GreatDrek - Ваше стремление похвально. Шаг за шагом к реализации игры и придете. Кстати, игру уже выбрали?
Re: MSP430G2452 и SD карта
Добавлено: Сб июн 22, 2013 22:33:39
GreatDrek
GreatDrek - Ваше стремление похвально. Шаг за шагом к реализации игры и придете. Кстати, игру уже выбрали?
Логический платформер с генерацией карты, мало кода надо, мало места занимать будет, ведь еще надо будет написать работу с экраном и т.д.
Re: MSP430G2452 и SD карта
Добавлено: Сб июн 22, 2013 22:46:45
Ser60
Я про такую не слышал. Это что-то типа этого?
http://gamer.livejournal.com/388189.html
Как я понял, Вы пока "тренируетесь на кошках", т.к. сдается мне что такая игра не под F2452.
Re: MSP430G2452 и SD карта
Добавлено: Сб июн 22, 2013 23:03:03
GreatDrek
Представим что у нас экран 20 на 20 пикселей(это для удобства объяснения), герой у нас к примеру пиксель которого мы передвигаем вперед, можем прыгать к примеру и т.д.
Так вод есть двадцать пикселей с низу экрана, герой наш на самом деле всегда стоит на месте, то есть по центру экрана, а вот если мы говорим пройти в перед на один шаг в перед ( на один пиксель) то те 20 которые у нас были сдвигаются в лево, остается 19 из двадцати которые были, а новый пиксель который должен появиться может рандомно появиться на разной высоте, к примеру в трех разных пикселях по высоте, это делается в коде так--- к примеру делаем таймер который каждые 100мс обнуляется, по кругу до 100 и снова в 0, делим 100мс на 4, получаем по 25 мс, и говорим что если в тот момент когда вы нажали переместиться таймер был <25 то на высоте 1 появиться пиксель, если >25 && <50 то на высоте 2 пикселя, >50 && <75 3пиксель, ну а >75 && <100 то вообще не создавать пиксель, всю логику до конца я не продумывал так как пока не будет экрана и всего нет смысла придумывать полностью игру, надо работать уже с теми вещами что у меня буду и выжимать из них максимум.
Пиксель это абстрактно, на практике же нарисовать человечка и разнообразней ландшафт и добавить логический элемент, чтото на подобии надо переместить кубики так что бы можно было пройти дальше а не окончательно завалить проход.
Кстати я сейчас под G2553 программирую.
Да кстати вспомнил, что такого типа игру я уже делал но только с светодиодной матрицей, у меня лежали светодиоды, скрутил я их на матрицу 5 на 5, но 5 светодиодов очень мало для понимания что происходит на экране если не ты написал там происходящее
Единственное что нормально на той матрице выглядело - это синусоида и эквалайзер, но за то на примере той матрицы я понял как работает развертка в мониторах.
Re: MSP430G2452 и SD карта
Добавлено: Сб июн 22, 2013 23:16:42
Ser60
Ясно. Я из-за любопытства спросил. Единственная игра, в проект которой я был вовлечен когда-то - эта:
http://mcs.uwsuper.edu/sb/327/Projects/2008/Race/
Может и Вам чего-то попроще выбрать для начала.
Re: MSP430G2452 и SD карта
Добавлено: Сб июн 22, 2013 23:20:42
GreatDrek
Да кстати вспомнил, что такого типа игру я уже делал но только с светодиодной матрицей, у меня лежали светодиоды, скрутил я их на матрицу 5 на 5, но 5 светодиодов очень мало для понимания что происходит на экране если не ты написал там происходящее
Единственное что нормально на той матрице выглядело - это синусоида и эквалайзер, но за то на примере той матрицы я понял как работает развертка в мониторах.
Дописал уже после вашего ответа

Re: MSP430G2452 и SD карта
Добавлено: Сб июн 22, 2013 23:26:08
Ser60
Тогда удачи! Будут вопросы по 430 - поможем.
Re: MSP430G2452 и SD карта
Добавлено: Сб июн 22, 2013 23:30:10
GreatDrek
Ser60 писал(а):Тогда удачи! Будут вопросы по 430 - поможем.
Спасибо, сейчас разбираю синтаксис IAR, все таки переубедили отбросить Energia

Re: MSP430G2452 и SD карта
Добавлено: Вс июн 23, 2013 11:22:22
YS
отбросить Energia
И правильно. Energia - для детей и девочек.

Хотя сам GCC, который там используется, вполне хорош, его можно прикрутить, например, к Code::Blocks. Но это уже другая история.
Спасибо, сейчас разбираю синтаксис IAR
В IAR нет какого-то совсем особого синтаксиса. Единственно только объявления прерываний:
Код: Выделить всё
#pragma vector = <название вектора, объявленное в заголовочнике для МК и указанное в доках>
__interrupt void <название функции-обработчика, какое Вам больше нравится>(void)
И еще, переменные, которые должны быть положены как константы во флеш (не то, что Вы там писать в рантайме будете, а безусловные константы; ну там, массивы какие-нибудь типа картинок), объявляются через
__ro_placement (стр. 210).
А если Вы, например, хотите, чтобы линкер сразу поместил Вашу структуру, например, с сейвами игры, в нужный сегмент, сделать это можно через
#pragma location. Указываете адрес, куда положить, - и все, оно будет там.
Все. Остальное - стандартный ANSI C. Боже упаси Вас писать под МК на C++ и заводить объекты!
Re: MSP430G2452 и SD карта
Добавлено: Вс июн 23, 2013 12:31:03
GreatDrek
Понял, не пытаться делать объектно ориентированное программирование на МК

Re: MSP430G2452 и SD карта
Добавлено: Вс июн 23, 2013 14:54:54
YS
Ну, тут разговор не столько об ООП вообще, сколько о его конкретной реализации. Но вообще да, ООП - вотчина систем с гигабайтами памяти и гигагерцами вычислительной мощности. Порождение объекта, да еще, не приведи Господь, динамического, отжирает кучу памяти и требует кучу ненужной возни процессора.
Да, тип float/double тоже не надо использовать там, где нет FPU. Софтовые манипуляции с плавающей точкой страшно все замедляют и раздувают код.
Re: MSP430G2452 и SD карта
Добавлено: Вс июн 23, 2013 15:48:13
GreatDrek
Я понимаю что вопрос тупой

Но все же перед окончательным уходом от Energia хочу понять что не так то.
Есть код
static char drek[][1]= {'a','b','c','d','e'};
...
for(int i=0; i<5; ++i){
Flash.write(flash+key, (unsigned char*) drek ,1);
++key;
}
...
Вот если я так пишу то в память записывается abcde
Но если я возьму и приму с uart букву 'c' к примеру, а ее код из inByte = Serial.read();
равен 99 и напишу в проге Flash.write(flash+key, (unsigned char*) inByte ,1);
то при чтении я получаю не 99 а 135 вроде и не понятный символ
Мне просто интересно понять почему не правильно записывается информация с uart в память.
Re: MSP430G2452 и SD карта
Добавлено: Пн июн 24, 2013 17:38:56
GreatDrek
В общем если не тяжело будет ответьте пожалуйста.
Re: MSP430G2452 и SD карта
Добавлено: Пн июн 24, 2013 17:49:01
YS
почему не правильно записывается информация с uart в память.
UART не при чем, это магия указателей.
Код: Выделить всё
static char drek[][1]= {'a','b','c','d','e'};
Здесь drek - указатель на начало массива. И потому когда мы его разыменовываем, например - (unsigned char *)drek[0], мы получаем
элемент по нулевому смещению от указателя на массив байт, то есть 'а'.
Во втором случае
inByte - ЧИСЛО. И запись (unsigned char *)inByte заставляет интерпретировать его, как указатель. Т.е., здесь
Код: Выделить всё
Flash.write(flash+key, (unsigned char*) inByte ,1);
в память пишется то
число, которое находится по адресу, равному значению inByte, но не in Byte.
Правильно было бы
Re: MSP430G2452 и SD карта
Добавлено: Пн июн 24, 2013 18:37:30
GreatDrek
Стало понятно, но только так как вы сказали было бы правильно нельзя записать, так как программа ругается и говорит что перед записью в ячейку значение надо перевести в char.
Re: MSP430G2452 и SD карта
Добавлено: Пн июн 24, 2013 18:43:52
Ser60
Если функции write() нужен поинтер на char, попробуйте так:
Код: Выделить всё
Flash.write(flash+key, (unsigned char*) &inByte ,1);
Re: MSP430G2452 и SD карта
Добавлено: Пн июн 24, 2013 18:50:25
YS
перед записью в ячейку значение надо перевести в char
Э, а какого типа inByte изначально?
Если функции write() нужен поинтер на char
Похоже все же не поинтер, а само число, ибо там идет обращение к элементу массива:
Разыменовываем указатель, получаем значение.
Re: MSP430G2452 и SD карта
Добавлено: Пн июн 24, 2013 20:28:15
GreatDrek
inByte у меня типа Byte, но я делал его и типа char и типа unsigned char толку ноль, unsigned я так понял из типа убирает все возможные результаты с минусом, тоесть если байт значения от -128 до 127 то unsigned byte будет от 0 до 255, в общем все то что выписали не помагает я все перепробывал уже, я еще делал так,
char test[][1]={};
...
test[1]=inByte;
...
Flash.write(flash+key, (unsigned char*) test[1] ,1);
...
и толку ноль.
В общем не понятно.
Re: MSP430G2452 и SD карта
Добавлено: Пн июн 24, 2013 20:42:40
YS
char test[][1]={};
В чем смысл такой записи? Почему не char test[1]={} ?
test[1]=inByte;
Ошибка. Элемента с номером 1 в массиве с одним элементом нет.
Нумерация начинается с нуля.
Правильно:
Код: Выделить всё
uint8_t test[1];
...
test[0]=inByte;
...
Flash.write(flash+key,test[0] ,1);
...
А вообще - нафига нужен массив из одного элемента?
