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

 
 
 
Reply to this topicStart new topic
> Запилить массив наружу, как не из дампа?
theBMV
сообщение Nov 13 2012, 07:35
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 14-10-08
Из: г. Королев
Пользователь №: 40 940



Имею LPC1768 (Cortex-M3), Jlink и IAR. В процессе отладки требуется график переходного процесса. Массив значений есть, но он в раме мк. Как его оттуда слить?
Знаю, что можно сдампить память с указанного адреса и т.п. но я получаю байты, их потом нужно преобразовать во флоат, распихать в ячейки экселя и только потом строить график.
Вопрос:
нет ли метода попроще. Чтобы сразу появлялся файл с элементами массива причем в том типе данных, в котором он значится в программе?
спасибо

Сообщение отредактировал theBMV - Nov 13 2012, 07:35
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 13 2012, 07:36
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



printf в ком-порт.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Nixon
сообщение Nov 13 2012, 07:46
Сообщение #3


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Код
...
#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


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
KRS
сообщение Nov 13 2012, 07:52
Сообщение #4


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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


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

Это не обязательно, IAR умеет по разному делать.
Go to the top of the page
 
+Quote Post
theBMV
сообщение Nov 13 2012, 09:25
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 14-10-08
Из: г. Королев
Пользователь №: 40 940



Цитата(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() прикрутить бы к отладчику, чтобы он это делал при выходе из отладки, ибо программа в бесконечном цикле.
Go to the top of the page
 
+Quote Post
KRS
сообщение Nov 13 2012, 13:14
Сообщение #6


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(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;
  }
Go to the top of the page
 
+Quote Post
theBMV
сообщение Nov 26 2012, 06:19
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 14-10-08
Из: г. Королев
Пользователь №: 40 940



Цитата(KRS @ Nov 13 2012, 17:14) *
А вы flush делайте после записи строки


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

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

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

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

Спасибо!
Go to the top of the page
 
+Quote Post
KRS
сообщение Nov 26 2012, 18:49
Сообщение #8


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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

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


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

Go to the top of the page
 
+Quote Post
theBMV
сообщение Nov 28 2012, 07:29
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 14-10-08
Из: г. Королев
Пользователь №: 40 940



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


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


не понял, о чем речь, но тем не менее спасибо! laughing.gif
уже накидал простецкую прогу, решающую мою задачу
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 23:33
Рейтинг@Mail.ru


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