Перейти к содержанию
    

Программирование msp430 на C

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

#include "msp430F1232.h"

    RSEG  CSTACK
    DS16    0
    RSEG  DATA16_N

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

Т.е выделение какого-то сегмента памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

С есть компилятор, который берет на себя распределение памяти вместо Вас.

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

 

Предлагаю Вам "вывернуть" Ваш вопрос наизнанку.

Пишите на С простую функцию. В окне дизассемблера видите все "внутренности" ассемблерного кода.

Берете сгенерированый С листинг (на ASM), смотрите, если надо - "выдергиваете" исходник кода

Вашей сишной ф-ии в виде асемблера, и .....

получаете ответы на большинство вопросов :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

k155la3, это в смысле мне можно написать вот так на языке С?

 asm(RSEG  CSTACK
    DS16    0
    RSEG  DATA16_N

N1 ds16 1
N2 ds16 1
N3 ds16 1);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сергей Борщ, у меня АЦП на три канала и данные записываются по адресам этих ячеек памяти. Возможно, Вы и правы, нужно пойти по другому пути. Просто язык С для меня новое и поэтому иду напролом) спасибо за советы!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня АЦП на три канала и данные записываются по адресам этих ячеек памяти.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Аккуратнее... По моим (возможно устаревшим сведениям) для MSP430 был сделан только какой-то форк SDCC (small devices C compiler) - а там никаким stdint.c и не пахло...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

и кстати, есть ли разница при указании файла .h в <> или ""?

post-87652-1477855702_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть: в одном случае файл ищется в каталоге проекта, а в другом и в системном.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

после попытки скомпилировать появилась такая ошибка.
Сообщение как-то не вяжется с текстом, на которое указывает. Еще понятно было бы, если бы написал "файл такой-то не найден". Помнится когда-то очень давно в настройках компилятора можно было выбрать "использовать библиотеку clib или dlib". Библиотека dlib была ближе к стандарту 99 года. Поищите, возможно у вас выбрана clib.

 

P.S. 1) 'crystal" пишется через "y".

2) пляски с __segment_begin не нужны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...