реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Программирование msp430 на C
Isaev_ivan
сообщение Oct 28 2016, 07:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 21-07-15
Пользователь №: 87 652



Добрый день! У меня совсем небольшой вопрос. Хочу перейти с ассемблера на язык С. И интересует, как можно ниже представленный код интерпретировать на языке С:
Код
#include "msp430F1232.h"

    RSEG  CSTACK
    DS16    0
    RSEG  DATA16_N

N1 ds16 1
N2 ds16 1
N3 ds16 1
......

Т.е выделение какого-то сегмента памяти.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 28 2016, 08:18
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Не надо пытаться писать на Си на Ассемблере.

Надо решать задачу используя те возможности, которые для этого предоставляет Си.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 28 2016, 08:29
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Сергей Борщ @ Oct 28 2016, 11:18) *
Не надо пытаться писать на Си на Ассемблере.

Надо решать задачу используя те возможности, которые для этого предоставляет Си.


Если ассемблер дорог Вам "по любви к искуству".

С есть компилятор, который берет на себя распределение памяти вместо Вас.
Он это сделает быстрее-лучше(как правило) чем человек.

Предлагаю Вам "вывернуть" Ваш вопрос наизнанку.
Пишите на С простую функцию. В окне дизассемблера видите все "внутренности" ассемблерного кода.
Берете сгенерированый С листинг (на ASM), смотрите, если надо - "выдергиваете" исходник кода
Вашей сишной ф-ии в виде асемблера, и .....
получаете ответы на большинство вопросов sm.gif
Go to the top of the page
 
+Quote Post
Isaev_ivan
сообщение Oct 28 2016, 11:38
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 21-07-15
Пользователь №: 87 652



k155la3, это в смысле мне можно написать вот так на языке С?
Код
asm(RSEG  CSTACK
    DS16    0
    RSEG  DATA16_N

N1 ds16 1
N2 ds16 1
N3 ds16 1);

Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 28 2016, 12:58
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Isaev_ivan @ Oct 28 2016, 14:38) *
k155la3, это в смысле мне можно написать вот так на языке С?
Код
asm(RSEG  CSTACK
    DS16    0
    RSEG  DATA16_N

N1 ds16 1
N2 ds16 1
N3 ds16 1);


Так Вы можете встроить в сишный код только отдельные команды
asm("nop");

Пытаясь писать на ASM в среде C(PP) Вы пытаетесь работать в "чужом огороде" и не зная "устав".


Соберите проект из 2 сишных файлов. Откомпилируйте.
Если IAR - смотрите файл MyAsmAndC.s43

Код
MyAsmAndC.h
------------
int MyAsm(int);
extern int MyAsm(int);
------------

MyAsmAndC.c
------------
#include "MyAsmAndC.h"

int MyAsm( int in_arg )
{  
    return( in_arg + 1);
};

main.c
------------
#include "MyAsmAndC.h"

int main(void)
{
  dat = 1;
  dat = MyAsm(dat)
  __no_operation(); // BreakPoint            

}


Сообщение отредактировал k155la3 - Oct 28 2016, 13:13
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 28 2016, 13:36
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Isaev_ivan @ Oct 28 2016, 14:38) *
это в смысле мне можно написать вот так на языке С?
Вы идете не в ту сторону. Вам не надо тупо пытаться повторить на Си свой ассемблерный код - это тупик. Вам нужно написать на Си код, который будет делать то же самое, что делал ваш ассемблерный код. Что делал этот ваш код?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Isaev_ivan
сообщение Oct 28 2016, 14:09
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 21-07-15
Пользователь №: 87 652



Сергей Борщ, у меня АЦП на три канала и данные записываются по адресам этих ячеек памяти. Возможно, Вы и правы, нужно пойти по другому пути. Просто язык С для меня новое и поэтому иду напролом) спасибо за советы!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 28 2016, 18:35
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Isaev_ivan @ Oct 28 2016, 17:09) *
у меня АЦП на три канала и данные записываются по адресам этих ячеек памяти.

CODE
#include  <stdint.h>
uint16_t ADC_buffer[3];



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Oct 28 2016, 19:44
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Аккуратнее... По моим (возможно устаревшим сведениям) для MSP430 был сделан только какой-то форк SDCC (small devices C compiler) - а там никаким stdint.c и не пахло...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 28 2016, 20:37
Сообщение #10


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



SDCC не работает с msp. Зато есть порт gcc-msp430, и он знает про stdint.h.

ЗЫ. И sdcc сейчас уже знает про stdint.h:)

upd: Ух-ты, теперь оказывается gcc-msp430 под крылом у TI: тыц.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 28 2016, 21:18
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Genadi Zawidowski @ Oct 28 2016, 22:44) *
Аккуратнее... По моим (возможно устаревшим сведениям) для MSP430 был сделан только какой-то форк SDCC (small devices C compiler) - а там никаким stdint.c и не пахло...
Судя по RSEG в сообщении автора темы - это IAR и stdint.h там есть. И вообще - по умолчанию я ориентируюсь на стандарт 99 года. Ориентироваться на стандарт 27-летней давтости ( c89 ) как-то несерьезно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Isaev_ivan
сообщение Oct 30 2016, 19:29
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 21-07-15
Пользователь №: 87 652



Здравствуйте, после попытки скомпилировать появилась такая ошибка. Что это может значить??

и кстати, есть ли разница при указании файла .h в <> или ""?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Obam
сообщение Oct 31 2016, 08:39
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Есть: в одном случае файл ищется в каталоге проекта, а в другом и в системном.
И кстати, руководство IAR C/C++ Development Guide очень даже для начинающих.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 31 2016, 11:52
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Isaev_ivan @ Oct 30 2016, 22:29) *
после попытки скомпилировать появилась такая ошибка.
Сообщение как-то не вяжется с текстом, на которое указывает. Еще понятно было бы, если бы написал "файл такой-то не найден". Помнится когда-то очень давно в настройках компилятора можно было выбрать "использовать библиотеку clib или dlib". Библиотека dlib была ближе к стандарту 99 года. Поищите, возможно у вас выбрана clib.

P.S. 1) 'crystal" пишется через "y".
2) пляски с __segment_begin не нужны.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Obam
сообщение Oct 31 2016, 14:43
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Тогда уж IC или chip вместо crystal, а то получилось - кварц …F1232


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 06:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016