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

Nios II 7.1 IDE. Функции из HAL.

Есть желание применить функции из HAL. Вот программа, в ней вызывается функция alt_timestamp_start(), которая описана в altera_avalon_timer_ts.c.

 

#include "sys/alt_stdio.h"

//-----------------------------

#include "alt_types.h"

#include "system.h"

//-----------------------------

#include "altera_avalon_timer_regs.h" //for timer

#include "altera_avalon_timer_ts.c"

//-----------------------------

int main()

{alt_u32 a;

a=alt_timestamp_start();

alt_putstr("Hello from Nios II!\n");

printf("%08x, ", a);

while (1);

return 0;

}

 

Но при компиляции сообщается об ошибке: undefined reference to `alt_timestamp_start'.

Вопрос: Что в программе не так, и как правильно подключать функции и макросы из системной библиотеки, например, из hello_world_small_0_syslib\Device Drivers [sopc Builder]\altera_avalon_timer\HAL\src

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


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

Сейчас не могу проверить, но мне кажется, что подключать надо не altera_avalon_timer_ts.c, а altera_avalon_timer_ts.h

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


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

Сейчас не могу проверить, но мне кажется, что подключать надо....

Тема не раскрыта, вопросы остались.

Альтера рекомендует функции и макросы из своих библиотек HAL. Прекрасно!

Однако, механизм работы с HAL описан слабо, а жаль.

Альтера советует писать программы, стартуя с шаблонов типа "Hello world small", с последующим их развитием.

Допустим, что в проект еще вводится таймер, как его инициализировать, сделать с ним что-то с помощью функций из HAL, как эти HAL библиотеки подключить, как будет выглядеть простейшая работающая программа в целом с этими инклудами (как выглядят пути)?

Неужели никто этот HAL еще не освоил?

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


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

Тема не раскрыта, вопросы остались.

Альтера рекомендует функции и макросы из своих библиотек HAL. Прекрасно!

Однако, механизм работы с HAL описан слабо, а жаль.

Альтера советует писать программы, стартуя с шаблонов типа "Hello world small", с последующим их развитием.

Допустим, что в проект еще вводится таймер, как его инициализировать, сделать с ним что-то с помощью функций из HAL, как эти HAL библиотеки подключить, как будет выглядеть простейшая работающая программа в целом с этими инклудами (как выглядят пути)?

Неужели никто этот HAL еще не освоил?

вот выдрал заголовки из проекта

#include <stdio.h>
#include <unistd.h>
#include <io.h>
#include <sys/alt_irq.h>

#include "alt_types.h"
#include "altera_avalon_dm9000.h"//my component and HAL
#include "altera_avalon_pio_regs.h"//

#include "system.h"
#include "socrat.h"

подключаются Халы "сами" :) когда новый компонент добавляете

как использовать хал...берёте и используете :) подробности в хедерах самого хала

See the Nios II Software Developer’s Handbook for details on using the

system clock and timestamp features that use these drivers. The Nios II

Embedded Design Suite (EDS) also provides several example designs

that use the timer core.

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


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

подключаются Халы "сами" :) когда новый компонент добавляете

как использовать хал...берёте и используете :) подробности в хедерах самого хала

Уважаемый, Postoroniy_V!

Мой вопрос был конкретный, и я ожидал пример. В "Nios II Software Developer’s Handbook" прямых ответов на свои изыскания я не нашел, т.е. я пытаюсь на основе сведений из n2sw_nii5v2.pdf что-то сделать в части HAL, но при работе в среде Nios II 7.1 IDE постоянно натыкаюсь на errors.

Еще раз про мои вопросы:

1. Вот простейшая работающая программа Hello world small:

#include "sys/alt_stdio.h"

int main()

{ alt_putstr("Hello from Nios II!\n");

while (1);

return 0;

}

Я пытаюсь работаю с NiosII, в котором на SOPC задана конфигурация: cpu, jtag_uart, onchip_mem и timer.

 

2. Есть файл в C:\altera\71\ip\sopc_builder_ip\altera_avalon_timer\HAL\src\altera_avalon_timer_ts.c, в котором есть, к примеру, две интересующие меня функции:

int alt_timestamp_start(void);

alt_u32 alt_timestamp(void);

 

3. Предполагаю, что это функции из HAL, и хочу вставить их в программу Hello world small, что бы периодически выводит состояние таймера через stdio.

 

4. Как будет выглядеть работающая программа с этими функциями? Т.е. хотел бы видеть ее текст и немного разъяснений. Надеюсь, что на этом примере смогу разобраться со своими ошибками.

 

Спасибо за ответы.

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


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

С этой функцией не работал, но могу предположить следующее:

 

В самом исходнике написано:

* These functions are only available if a timestamp device has been selected

* for this system.

Т.о. они подключаться автоматически при соответствующих параметрах таймера в СОПС-билдере.

 

З.Ы. после чего, рекомендую вам расковырять скрипты, заголовки и make-файлы проекта и разобраться, как он подключился.

 

добавлено:

в той же книге n2sw_nii5v2.pdf есть примеры работы с этими функциями. Найдите их просто поиском, или в главе про timestamp driver.

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


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

to id_gene Спасибо, за дополнительную информацию, буду разбираться, а пока:

Конфигурация timer взята по умолчанию и такая:

Period: 1 us

Hardware options:

Presents: Customs

Registers:

Writable period +

Readable snapshot +

Start/Stop control bits +

 

Пример из n2sw_nii5v2.pdf (стр.250, 251) не компилится, ошибки.

 

Да, еще. В http://electronix.ru/forum/index.php?showt...37321&st=15 в сообщении номер 27, сходная задача решена включением прямого описания функций int alt_timestamp_start(void) и alt_u32 alt_timestamp(void) в тело основной программы. Почему я не могу подключить их (функции) прямо из библиотеки HAL через инклуды?

Изменено пользователем Волощенко

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


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

Ошибки - это плохо.

Про билдер я, похоже, поторопился, выбирать нужно в настройках сислиба.

 

Добавлено:

про инклуды: _подозреваю_, что область поиска файлов для инклуда (ключ gcc -include) ограничена по умолчанию только необходимыми вещами, чтобы не замусорить систему. Посмотрите, как это будет сделано через скрипты или правьте пути поиска в настройках компилятора. Навскидку ничего умнее в голову не приходит.

Читайте доки

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


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

Волощенко

 

Если Вы хотите использовать timestamp таймер, то нужно написать строчку:

 

#include "sys/alt_timestamp.h"

 

Никаких си файлов инклюдить не надо.

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


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

к popeye, спасибо за ответ!

Однако, если вставить просто #include "sys/alt_timestamp.h" в текст Hello_world_small, а затем компилировать, то все будет нормально. Но если добавить в текст еще функцию extern int alt_timestamp_start (void); то будет выдано сообщение:

undefined reference to `alt_timestamp_start'

 

#include "sys/alt_stdio.h"

#include "sys/alt_timestamp.h"

int main()

{int t; t=alt_timestamp_start ();

alt_putstr("Hello from Nios II!\n");

while (1);

return 0;

}

 

То есть, надо еще что-то сделать... Я пока не знаю что...Надеюсь на солидарность Форума...

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


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

Может это глупый вопрос, а Вы код для своей alt_timestamp_start создали? :biggrin:

Функция с прототипом extern int alt_timestamp_start (void); описана в файле:

C:\altera\71\ip\sopc_builder_ip\altera_avalon_timer\HAL\src\altera_avalon_timer_ts.c

.... и является принадлежностью HAL-системы, создавать ее уже не надо, а только использовать. Но в этом и вопрос топика, как это правильно сделать.

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


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

Если оригинальная f() описана как 'static inline' - то ничего удивительного не наблюдается.

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


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

к popeye, спасибо за ответ!

Однако, если вставить просто #include "sys/alt_timestamp.h" в текст Hello_world_small, а затем компилировать, то все будет нормально. Но если добавить в текст еще функцию extern int alt_timestamp_start (void); то будет выдано сообщение:

undefined reference to `alt_timestamp_start'

 

#include "sys/alt_stdio.h"

#include "sys/alt_timestamp.h"

int main()

{int t; t=alt_timestamp_start ();

alt_putstr("Hello from Nios II!\n");

while (1);

return 0;

}

 

То есть, надо еще что-то сделать... Я пока не знаю что...Надеюсь на солидарность Форума...

тоесть Вы утверждаете что прочитали таки главу про Timestamp driver в Nios II Software Developer’s Handbook? Если так тогда мне совершенно не ясно почему у Вас с ошибками компилится, а у меня без ошибок

Creating libhello_world_0_syslib.a...
Compiling hello_world.c...
Linking hello_world_0.elf...
Info: (hello_world_0.elf) 2032 Bytes program size (code + initialized data).
Info:                     6160 Bytes free for stack + heap.

компилил тот же исходник что и у Вас. :)

Возможно что Вы не обратили внимания на строчки

1) страница 6-12

The HAL-specific API functions for accessing timer devices are defined

in sys/alt_alarm.h and sys/alt_timestamp.h.

2)6-14

Timestamp Driver

Sometimes you want to measure time intervals with a degree of accuracy

greater than that provided by HAL system clock ticks. The HAL provides

high resolution timing functions using a timestamp driver. A timestamp

driver provides a monotonically increasing counter that you can sample

to obtain timing information. The HAL only supports one timestamp

driver in the system.

You specify a hardware timer peripheral as the timestamp device by

manipulating BSP settings. The Altera-provided timestamp driver uses

the timer that you specify.

3) чтобы сделать 2 нужно в свойствах проекта (НИОС ИДЕ) ВЫБРАТЬ ТОТ ТАЙМЕР КОТОРЫЙ БУДЕТ У ВАС тем самым timestamp

 

надеюсь теперь у Вас всё получится :)

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


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

to Postoroniy_V. Спасибо за ответы!

1. Пока у меня эта программа в Nios II 7.1 IDE не получается:

#include "sys/alt_stdio.h"

#include "sys/alt_timestamp.h"

int main()

{int t; t=alt_timestamp_start ();

alt_putstr("Hello from Nios II!\n");

while (1);

return 0;

}

2. Во вторник в Киеве будет семинар от Альтеры, попробую спросить там. Все что нужно для работы с Timestamp Driver, согласно и Quartus II Version 7.1 Handbook стр.14-6, я учел. А именно: The timer core may be used as a timestamp device if it meets the following conditions:

■ The timer has a writeable period register, as configured in SOPC Builder.

■ The timer is not selected as the system clock.

т.е. эти режимы заданы еще на этапе работы в SOPC (см.пост от Nov 9 2007, 14:59). Повторюсь там только : cpu, jtag_uart, onchip_mem и timer

3. Еще вопрос. В теле alt_timestamp.h", есть строка с #ifdef __cplusplus, как Вы ее обошли? Моя попытка вставить между двумя инклудами (см.текст проги), что-то типа #define __cplusplus 1, тоже не дало результата.

 

to id_gene. Спасибо за ответы!

Вы писали: "Добавлено: про инклуды: _подозреваю_, что область поиска файлов для инклуда (ключ gcc -include) ограничена по умолчанию только необходимыми вещами, чтобы не замусорить систему. Посмотрите, как это будет сделано через скрипты или правьте пути поиска в настройках компилятора."

Думаю, что, действительно, искать нужно здесь, но пока не разобрался.

 

to All

Может уже поднадоел кому, но, думаю, что тема заслуживает того, что бы с ней разобраться. Есть, конечно, обходные варианты, и их много. Но надо попробовать на этом маленьком примере научиться работать с HAL.

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


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

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

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

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

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

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

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

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

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

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