bolmoe |
|
|
|
|
|
|
|
Пункты: 1902 |
Регистрация: 09.02.2012 |
|
|
|
Суть проблемы.
Создал новый проект, подключил файл со следующим содержимым (немного подправил под pin2-4):
/* test gpio3-17 for gpio bitbang */
/* pin 40 X1(SPI0_MISO)*/
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <unistd.h>
//-------------------------------------------------------------
#define IMX_PIO2 0x020A0000 /* block 2 registers */
#define PIO_DR 0x00 /* DATA Register */
#define PIO_GDIR 0x04 /* Direction Register */
#define PIO_PSR 0x08 /* pad status Register */
#define PIO_ICR1 0x0c /* Interrupt config Register1 */
#define PIO_ICR2 0x10 /* Interrupt config Register2 */
#define PIO_IMR 0x14 /* Interrupt mask Register */
#define PIO_ISR 0x18 /* Interrupt status Register */
#define PIO_EDGE_SEL 0x1c /* Edge select Register */
//-------------------------------------------------------------
#define PIN_MASK_GPIO17 (1<<4)
#define MAP_BASE_2 (IMX_PIO2)
#define MAP_SIZE 4096Ul
#define MAP_MASK (MAP_SIZE - 1)
void *mapped_base_2;
//-----------------------------------------------------------------------
int main(void)
{
int fd, i;
// try open /dev/mem ===============================================
if ((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1)
{
printf("Cannot open /dev/mem.\n");
exit(EXIT_FAILURE);
}
printf("/dev/mem opened.\n");
// try mapped memory A =============================================
mapped_base_2 = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, MAP_BASE_2 & ~MAP_MASK);
if (mapped_base_2 == (void *) -1)
{
printf("Memory mapping error.\n");
exit(EXIT_FAILURE);
}
printf("A Memory block mapped at address %p.\n", mapped_base_2);
mapped_base_2+=(MAP_BASE_2 & MAP_MASK);
printf("A Target address mapped 0x%08x-->0x%08x\n",(int) MAP_BASE_2,(int)mapped_base_2);
//==================================================================
printf("Initing control pin\n");
*(int*)(mapped_base_2+PIO_GDIR) |= PIN_MASK_GPIO17;
for(i=0; i<0xFFF; i++)
{
*(int*)(mapped_base_2+PIO_DR) |= PIN_MASK_GPIO17;
*(int*)(mapped_base_2+PIO_DR) &= !(PIN_MASK_GPIO17);
}
close(fd);
printf("Bye!\n");
return 0;
}
После компиляции, проект на плае HOLO-PC не работает, все сообщения printf() выдает, а пином не дергает. При запуске дебаггера, в процедуру
for(i=0; i<0xFFF; i++)
{
*(int*)(mapped_base_2+PIO_DR) |= PIN_MASK_GPIO17;
*(int*)(mapped_base_2+PIO_DR) &= !(PIN_MASK_GPIO17);
}
НЕ заходит, уходит сразу на close(fd).
Если в процедуру for(...)добавить printf(">>"), то пин начинает работать в соответствии с указанным выше кодом и debugger так же нормально отрабатывает, заходя в эту процедуру for(...)
пробовал добавлять в файл проекта *.pro QMAKE_CXXFLAGS += -O0, не помогло |
|
|
|
|
|
bolmoe |
|
|
|
|
|
|
|
Пункты: 1902 |
Регистрация: 09.02.2012 |
|
|
|
При старте дебаггера появляется вот такое сообщение:
Debugging starts
Process /home/hw/hw created; pid = 870
Listening on port 10001
Remote debugging from host 192.168.0.2
Could not load shared library symbols for 5 libraries, e.g. /usr/lib/libstdc++.so.6.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
На плате по пути usr/lib эта библиотека присутствует.
В QT tools->options->build&run->kits->sysroot установлен путь /home/../rootf/.../output/staging
Что еще необходимо сделать, чтобы убрать это сообщение? |
|
|
|
|
|
|