|
СС430F5137 с нуля на asm, нужна помощь |
|
|
|
Feb 23 2013, 14:07
|

Частый гость
 
Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971

|
Приобрел EM430F5137RF900 и MSP-FET430UIF, до приобретения особо не заморачивался с подготовкой "рабочего пространства" под новый проект, вроде бы камни не особенно новые, часто встречал различную информацию о них и не думал, что доставабельностью нужной для начала разработки инфы возникнут проблемы. Пол дня поискал в сети примеры заголовочных файлов под этот камень, примеры инициализации периферии, увы - результат 0. Это такой секрет? Такие данные достаются потом и кровью? Раньше работал с AVR (да и продолжаю время от времени), никаких таких проблем не помню, все было как-то проще достать и среда разработки нормальная (и бесплатная). Бог с ней со средой, поставил IAR KS на 4кБ кода (мне для попробовать). С самим ассемблером MSP и системой команд ознакомился поверхностно, страха не вызвал, вроде бы все просто (по крайней мере помигать светодиодом для начала - понятно как, а особенности и "камни" по ходу дела разберу). Стандартный заголовочный файл, который есть в папке иара "\inc" при пустом проекте вызывает негодование у компилятора IAR (дублирование лэйблов в объявлении регистров DMA). Попытался найти нормальный заголовочный файл в сети - нашел лишь такой же, "замазал" все места вызывающие негатив комментариями, чтобы не было ошибок. Далее попытался найти файл, который инициализировал бы мне всю периферию - тут все и загнулось. Я понимаю, что скорее всего при запуске МК все отключает сам и морганию светодиодом врядли что-то помешает, но хотелось бы иметь заготовку с полной инициализацией всех узлов МК ну и ессно полную таблицу векторов прерываний воткнуть в начало. Это добавляет уверенности в дальнейшем освоении камня. В отладчике иара тож пока особо не разобрался, если честно с первого раза иар вроде показался "классическим" средством разработки с простым и понятным интерфейсом, как начал лезть глубже - начало казаться, что первое впечатление обманчиво, чувство "чего-то не хватает" не покидает - ну к примеру как мне для отладчика задать тип МК, частоту кварца (чтоб время выполения отслеживать), также не нашел средства для заливки прошивки в МК (нужно отдельным ПО для этого ввоспользоваться чтоли?!). Прошу извинить за смешивание всего в кучу - помогите найти (или разобраться) с заголовочный файл для ассемблера под этот МК, файл инициализации всех устройств на борту, ну и вектора прерываний до кучи. На Си для МК не программирую и не особо горю желанием.
--------------------
Не так страшна автоматизация, как её малюют.
|
|
|
|
|
 |
Ответов
(45 - 59)
|
Jan 4 2014, 18:04
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Цитата(SM @ Jan 4 2014, 22:00)  Какая же это ошибка. Доступ к любому отдельному байту слова не ошибка, а фича  То есть, получается так, что я задумывал использовать my_data как хранилище слова (о чем ясно указал - DS16), однако при написании кода я ошибся и обратился к этому слову как к байту. Моя программа в этом случае будет работать не правильно, а компилятор все видит и молчит? Тут все ложится на программиста? Нет средств для контроля?
|
|
|
|
|
Jan 4 2014, 18:15
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(d7d1cd @ Jan 4 2014, 22:04)  однако при написании кода я ошибся и обратился к этому слову как к байту. При написании на ассемблере программисты специально обращаются к байтам слов, чтобы обратиться отдельно либо к младшему, либо к старшему байту, не трогая другой байт, и таким способом экономят что-либо, размер кода например, или время исполнения. А также из таких же соображений обращаются словами сразу к двум специально рядом расположенным байтовым переменным по четному адресу. Ассемблерному программисту не положено по статусу такое делать по ошибке.... Цитата(d7d1cd @ Jan 4 2014, 22:04)  Нет средств для контроля? Есть конечно. Сделать эту часть кода на языке высокого уровня, в котором контроль типов более конкретный. PS Смысл в указании DS8/16/32 - чтобы линкер расположил переменную по адресу с корректным выравниваением, чтобы, например, слово, не попало на нечетный адрес. И больше ни для чего
|
|
|
|
|
Jan 5 2014, 11:58
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Спасибо за помощь. Но все таки есть метод, позволяющий в какой-то мере отслеживать ошибки, связанные с неправильным обращением к создаваемым переменным. И это касается не только размера этой переменной. Это еще чтение и запись. Для этого надо использовать директивы SFRB, SFRW и SFRTYPE. Есть еще SFRL, но почему то эта директива не работает. Наверное она работает с 32-х разрядными микроконтроллерами... Кому надо (новичкам в программировании на ассемблере) привожу пример: Код SFRB AAA = 0x0201 ; Переменная ААА размером 1 байт по адресу 0х0201 SFRW BBB = 0x0202 ; Переменная ВВВ размером 2 байта по адресу 0х0202 SFRTYPE CCC WORD, READ, WRITE = 0x0208; Переменная ССС размером 2 байта (WORD), с возможностью ; чтения (READ) и записи (WRITE) по адресу 0х0208
main2: MOV #10, AAA ; Компилятор ругается (что и требовалось): Accessing SFR using incorrect size MOV.B #10, AAA ; Теперь все хорошо :) MOV.B AAA, BBB ; Здесь недостаток использования SFR, ведь байт можно переслать в слово, однако ругань MOV #BBB, CCC ; Перемещение в ССС адреса BBB (0x0202) MOV BBB(R12), CCC ; Использование ВВВ как массива (R12 - индекс массива) MOV #12, &BBB+2 ; Занесение числа 12 во 2 элемент массива. Здесь компилотор предупреждает: Suspicious sfr expression ; Нужно обратить внимание, что здесь обязательно ; использование абсолютного режима адресации. Использование относительного режима ; адресации приводит к неправильному выполнению кода: MOV #12, BBB+2 ; Помещаем число 12 во 2 элемент массива, однако число 12 попадает по адресу 0х1304, то ; есть на 0х1100 дальше. Почему так, не знаю... Был тут еще вопрос по размеру кода при программировании на ассемблере в версии IAR с ограничением на размер программы. Я использовал готовую прошивку (размером больше 4-х кбайт) и попробовал запустить ее на отладку. Увы, IAR мне сказал, что есть ограничение на размер и идите лесом...
Сообщение отредактировал d7d1cd - Jan 5 2014, 13:32
|
|
|
|
|
Jan 5 2014, 12:12
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(d7d1cd @ Jan 5 2014, 15:58)  Увы, IAR мне сказал, что есть ограничение на размер и идите лесом... Это верно, ограничение на размер у линкера (xlink), и ему пофигу, на чем исходники был написан и в каких комбинациях. А вот SFRx - они не для переменных придуманы. Это аббревиатура от Special Function Register - для описания регистров, к которым по железным причинам недопустимы какие-то виды операций с какими-то размерами данных. Хотя, конечно, как костыль использовать можно, особенно если размещение переменных по адресам памяти охота вручную делать.
|
|
|
|
|
Jan 5 2014, 13:08
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Цитата(SM @ Jan 5 2014, 16:12)  ...особенно если размещение переменных по адресам памяти охота вручную делать. Бывают случаи, что не просто охота, а надо!  Я тут добавил кое-что...
Сообщение отредактировал d7d1cd - Jan 5 2014, 13:33
|
|
|
|
|
Jan 5 2014, 13:17
|

Частый гость
 
Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971

|
Цитата(d7d1cd @ Jan 5 2014, 15:58)  Был тут еще вопрос по размеру кода при программировании на ассемблере в версии IAR с ограничением на размер программы. Я использовал готовую прошивку (размером больше 4-х кбайт) и попробовал запустить ее на отладку. Увы, IAR мне сказал, что есть ограничение на размер и идите лесом... В моей нынешней программе около 1кБ кода, для эксперимента еще 4096 байт тупо замостил байтами директивой DB, ничего не ругается, при запуске отладки смотрю содержание FLASH - все вроде ок. Я не могу наверняка сказать, что не использую линкер (потому как не знаю когда он там нужен, вернее догадываюсь, но проверять чо-то не хочется), но походу если не использовать его, то можно и больше 4кБ компилировать. Так? Или я чего-то недопонял опять?  Или директива DB для читоты эксперимента не катит, нужно именно командами замостить типа NOP?
Сообщение отредактировал vazz - Jan 5 2014, 13:19
--------------------
Не так страшна автоматизация, как её малюют.
|
|
|
|
|
Jan 5 2014, 13:20
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(d7d1cd @ Jan 5 2014, 17:08)  Бывают случаи, что не просто охота, а надо!  Честно говоря, именно в контексте MSP430, у которого нет внешней шины, куда может быть что-то снаружи подключено по фиксированным адресам, и в котором нет DMA доступа для кого-то, расположенного снаружи, не верится, что это бывает надо. Все красиво решается средствами ассемблера - RSEG, ASEG, COMMON, и получается при этом максимально перемещаемым. Цитата(vazz @ Jan 5 2014, 17:17)  Или директива DB для читоты эксперимента не катит, нужно именно командами замостить типа NOP? да-да. там размер кода ограничен, а не данных. И Вы не можете не использовать линкер. Без него не получите программу, которую можно загрузить в процессор, в том числе и в отладчике, так как именно линкер генерирует на выходе загружаемый исполняемый модуль из "промежуточных" объектных модулей, или одного модуля, полученных в результате работы транслятора ассемблера.
|
|
|
|
|
Jan 5 2014, 13:51
|

Частый гость
 
Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971

|
Цитата(SM @ Jan 5 2014, 17:20)  да-да. там размер кода ограничен, а не данных. Замостил NOP (эквивалент 0x4303, смотрю через отладчик), начиная от 0xEF3C до 0xFF3C (4096 байт), плюс как и говорил около 1кБ своего кода. Также все ок. Э... хм... я что-то не так делаю? Или всеже PUBLIC/EXTERN в данном случае помогают линкеру понять сколько программного кода написано? Или может фирменный FET как-то влияет? Я уже начал "привыкать" к иару, а пиратить ничего не хочется. Варианты подскажите как еще его проверить на ограничение? У меня вот такие сообщения пишет (после чего успешно запускается отладчик): Цитата Building configuration: CC430F5137-E - Debug Updating build tree... Linking Total number of errors: 0 Total number of warnings: 0 Может у кого после слова Linking что-то пишется вообще? Я имею в виду даже при компиляции программы размером менее 4кБ.
Сообщение отредактировал vazz - Jan 5 2014, 13:51
--------------------
Не так страшна автоматизация, как её малюют.
|
|
|
|
|
Jan 5 2014, 13:54
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(vazz @ Jan 5 2014, 17:40)  Замостил NOP (эквивалент 0x4303, смотрю через отладчик), Ну, возможно, у Вас 8 кбайт ограничение (такое тоже бывает для каких-то семейств), или действительно, вообще при работе с FET ограничений нету. Линкеру никаких не надо дополнительных директив, чтобы знать размер кода - он тупо суммирует размеры всех сегментов, в которых код. Цитата(vazz @ Jan 5 2014, 17:40)  после слова Linking И Вы до сих пор утверждаете, что не пользуетесь линкером? :D
|
|
|
|
|
Jan 5 2014, 14:16
|

Частый гость
 
Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971

|
Цитата(SM @ Jan 5 2014, 17:54)  И Вы до сих пор утверждаете, что не пользуетесь линкером? :D Я не могу наверняка сказать, что не использую линкер )) харэ меня пинать этим линкером, ну не понимаю я его прибамбасов (скорее не хочу понимать), мне и без этого нормально живется))) память размечаю в ручную, всегда знаю по какому адресу находятся наиболее важные участки кода, будете смеяться - я в тех.задание на девайс эту карту разметки памяти (и ПЗУ и ОЗУ) тоже включаю и расписываю где что и зачем, не считая комментариев в самой программе. А поповоду 8кБ - проверю и сей момент сейчас. Замощу JMP $ 24кБ, они у меня все равно пустуют, потому как ПО пишу, исходя не из богаства 5137, а из будущей 5133, она вроде подешевле.
--------------------
Не так страшна автоматизация, как её малюют.
|
|
|
|
|
Jan 5 2014, 14:24
|
Местный
  
Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199

|
Смотрите как я получил ограничение. Я создал шаблон проекта на ASM. В качестве отладчика у меня симулятор. Ставлю режим Release, делаю Project - Rebuild All. После этого иду в папку проекта и ищу там скомпилированный файл .a43 (это файл в формате intel hex). Вместо этого файла вставляю другой файл с таким же именем, который содержит скомпилированную большую программу. В проекте делаю Project - Download and Debug и получаю от системы сюрприз:  Кроме того потом еще вижу в Debug Log: Цитата Sun Jan 05, 2014 18:15:37: Using license: Standalone license - IAR Embedded Workbench for Texas Instruments MSP430, 4K KickStart Edition 5.60 Sun Jan 05, 2014 18:16:32: User error: Your application is too large. This version of IAR Embedded Workbench has a code limitation of 4096 bytes. Однако дальше становится еще интереснее. После всех выше описанных действий я делаю Project - Rebuild All и Project - Download and Debug. Все загружается на отладку, однако в окне кода я вижу, что загрузился не только скомпилированный код, но и тот, который был в большом файле. Однако если закрыть симулятор и снова запустить на отладку, то код из большого файла пропадает. Вот так.
|
|
|
|
|
Jan 5 2014, 14:32
|

Частый гость
 
Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971

|
Замостил связкой: Код JMP $ NOP Пространство с 0x8000 до 0xDFFF (24'576 Байт). Ничего не ругается.
--------------------
Не так страшна автоматизация, как её малюют.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|