Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запилить массив наружу
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
theBMV
Имею LPC1768 (Cortex-M3), Jlink и IAR. В процессе отладки требуется график переходного процесса. Массив значений есть, но он в раме мк. Как его оттуда слить?
Знаю, что можно сдампить память с указанного адреса и т.п. но я получаю байты, их потом нужно преобразовать во флоат, распихать в ячейки экселя и только потом строить график.
Вопрос:
нет ли метода попроще. Чтобы сразу появлялся файл с элементами массива причем в том типе данных, в котором он значится в программе?
спасибо
demiurg_spb
printf в ком-порт.
Nixon
Код
...
#include <yfuns.h>
...
char s[100];
int f = __open("c:/buffer.txt", _LLIO_CREAT | _LLIO_TRUNC | _LLIO_WRONLY | _LLIO_TEXT);
sprintf(<что угодно>)
__write(f, s, sizeof(unsigned char)*strlen(s));
__close(f);


Ну и конечно разрешите SWO
KRS
Если есть отладчик проще стандартный printf использовать! (вывод в окошке терминала будет)
Или с помощью функций __open, __read __write получить доступ к файлам на хосте!


Цитата(Nixon @ Nov 13 2012, 11:46) *
Ну и конечно разрешите SWO

Это не обязательно, IAR умеет по разному делать.
theBMV
Цитата(Nixon @ Nov 13 2012, 11:46) *
Код
...
#include <yfuns.h>
...
char s[100];
int f = __open("c:/buffer.txt", _LLIO_CREAT | _LLIO_TRUNC | _LLIO_WRONLY | _LLIO_TEXT);
sprintf(<что угодно>)
__write(f, s, sizeof(unsigned char)*strlen(s));
__close(f);


Ну и конечно разрешите SWO


Огромнейшее спасибо! Всё работает! Ток теперь __close() прикрутить бы к отладчику, чтобы он это делал при выходе из отладки, ибо программа в бесконечном цикле.
KRS
Цитата(theBMV @ Nov 13 2012, 13:25) *
Огромнейшее спасибо! Всё работает! Ток теперь __close() прикрутить бы к отладчику, чтобы он это делал при выходе из отладки, ибо программа в бесконечном цикле.

А вы flush делайте после записи строки
вот что исходник говорит:

Код
size_t __write(int handle, const unsigned char * buffer, size_t size)
{
  /* Remove the #if #endif pair to enable the implementation */
#if 0    

  size_t nChars = 0;

  if (buffer == 0)
  {
    /*
     * This means that we should flush internal buffers.  Since we
     * don't we just return.  (Remember, "handle" == -1 means that all
     * handles should be flushed.)
     */
    return 0;
  }
theBMV
Цитата(KRS @ Nov 13 2012, 17:14) *
А вы flush делайте после записи строки


Прикольненько! Спасибо!

Ещё вопрос один остался: винда Русская. В региональных настройках только Русский, след. разделитель целой и дробной "," (запятая).
Код
float fAbs = 1.2345;
sprintf(sLog, "%f", fAbs);

Даёт мне строку "1.2345". В Excel такая строка - текст. Приходится делать замену "." на "," по всему файлу в блокноте. А уж потом открывать в Excel.
Ещё раз повторюсь: ни Windows, ни Excel не дают мне поменять региональные настройки и разделитель целой и дробной части.

Нет ли варианта попроще?
Не может ли sprintf ставить нужный мне разделитель?

Спасибо!
KRS
Цитата(theBMV @ Nov 26 2012, 10:19) *
Нет ли варианта попроще?

1. замена в файле 1.txt всех . на , и вывод в 2.txt
Код
type 1.txt | gawk '{ gsub(/\./,","); print }' >2.txt


2. Поставить gnumeric

theBMV
Цитата(KRS @ Nov 26 2012, 22:49) *
1. замена в файле 1.txt всех . на , и вывод в 2.txt
Код
type 1.txt | gawk '{ gsub(/\./,","); print }' >2.txt


2. Поставить gnumeric


не понял, о чем речь, но тем не менее спасибо! laughing.gif
уже накидал простецкую прогу, решающую мою задачу
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.