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

 
 
> AT91SAM7S новичок
Xeon
сообщение Dec 19 2011, 06:35
Сообщение #1


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

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524



Всем доброго времени суток!!! Имеется платка с AT91SAM7S. Подскажите пожалуйста как использовать прерывания или где посмотреть, примеры.
Очень буду признателен!
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3  
Start new topic
Ответов (30 - 41)
aaarrr
сообщение Dec 21 2011, 09:10
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Xeon @ Dec 21 2011, 12:46) *
Как я понял в ARM если ты под юзером то прерывание глобально отрубить не как... а если очень нужно то как это сделать?

Нужно попросить супервизор (через SWI, например).

Цитата(Xeon @ Dec 21 2011, 12:46) *
Или можно чтоб программа всё время выполнялась под каким нить другим режимом, который имеет подобные права, например supervisor?

Можно.
Go to the top of the page
 
+Quote Post
Xeon
сообщение Dec 21 2011, 09:32
Сообщение #32


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

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524



Цитата(aaarrr @ Dec 21 2011, 12:10) *
Нужно попросить супервизор (через SWI, например).


Можно.


А как вызвать SWI на С? Или просто делать ассемблерную вставку? и как указать обработчик программного прерывания?

Если буду находиться всё время в супервизоре это нормально или плохой тон?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 21 2011, 09:54
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Xeon @ Dec 21 2011, 13:32) *
А как вызвать SWI на С? Или просто делать ассемблерную вставку? и как указать обработчик программного прерывания?

В RVCT, например, объявляется прототип вида
__swi(XX) int func(int, int)
а затем в программе просто используете эту функцию.
Но придется писать свой обработчик SWI, и тут уже без асма не обойтись.

Цитата(Xeon @ Dec 21 2011, 13:32) *
Если буду находиться всё время в супервизоре это нормально или плохой тон?

Если не используется ОС, то нормально. Если используется, то она будет жить в SVC, а задачи - в USER/SYSTEM.
Go to the top of the page
 
+Quote Post
Xeon
сообщение Dec 22 2011, 07:28
Сообщение #34


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

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524



Возникла следующая ситуация (смотрел стандартным отладчиком):
как уже писал выше есть разделения кода на файлы (есть главный файл main, Protocol.h хранит некоторые переменные, объявленные как static, и прототипы, объявленные как extern и использующие эти переменные...) в главном файле соответственно прописано:
extern "C" {
#include "Protocol.h"
...
}
Так вот, когда пытаюсь обратиться к статическим переменным, объявленным в Protocol.h из главного файла, то в них хранятся нули... а когда из Protocol.c то всё норм.
Это дело возникает скорее всего из-за ограничения видимости этих самых переменных (так как они в файле объявлены глобально и как статические, их видимость заканчивается на этом же файле, в моём случае Protocol.c... или я неправ?)
Конечно, можно решить проблему следующим образом: создать в Protocol функции которые бы возвращали значения этих переменных... но... неужели в кейле нет чего-нить проще? И почему кейл не позволяет объявлять переменные и функции в разных файлах например как visual studio (там не требуется не каких static и extern)???

Ну и тут же в голову влез ещё один вопрос! Так как есть доступ к этим переменным из Protocol и из main, но в первом случае всё заполнено нулям, а во втором нормальными данными, при этом у меня изменяются значения только в Protocol, а в main я их не изменяю... может быть компилятор создал две копии каждой переменной... и одни доступны только для main другие только для Protocol?

Цитата(Xeon @ Dec 22 2011, 10:21) *
Ну и тут же в голову влез ещё один вопрос! Так как есть доступ к этим переменным из Protocol и из main, но в первом случае всё заполнено нулям, а во втором нормальными данными, при этом у меня изменяются значения только в Protocol, а в main я их не изменяю... может быть компилятор создал две копии каждой переменной... и одни доступны только для main другие только для Protocol?


На этот вопрос сам и ответил... именно так и происходит... компилятор создаёт два варианта переменных одни доступны для main другие для Protocol (проверил следующим образом: изменял их и в файле main и в файле Protocol, и там и там находились значения которые записывал...естесно разные но правильные). И если убираю static у переменных то начинает ругаться линковщик: типа множественное определение там-то и там-то...
Так как правильно в кейле делать разделения программы на файлы?
Go to the top of the page
 
+Quote Post
Lotor
сообщение Dec 22 2011, 08:35
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



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

Цитата(Xeon @ Dec 22 2011, 11:28) *
Так как правильно в кейле делать разделения программы на файлы?

Кеил не требует нестандартных движений для этого.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Xeon
сообщение Dec 22 2011, 08:42
Сообщение #36


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

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524



Цитата(Lotor @ Dec 22 2011, 11:35) *
А зачем в Вашем случаи делать глобальные переменные статическими? Вы уверены, что до конца понимаете смысл своих действий? Статические глобальные переменные уникальны для каждой единицы трансляции.


Может понимаю конечно не до конца... но если я убираю слово static перед, объявлением появляется ошибка: L6200E: Symbol blablabla multiply definition (by Protocol.o and main.o)

Я как понимаю это ошибка линковщика, типо я объявляю и там и там... так оно и происходит компилятор всовывает и там и там, проверил вышеописанным способом)

Сообщение отредактировал Xeon - Dec 22 2011, 08:45
Go to the top of the page
 
+Quote Post
Lotor
сообщение Dec 22 2011, 08:47
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Xeon @ Dec 22 2011, 12:42) *
Может понимаю конечно не до конца... но если я убираю слово static перед, объявлением появляется ошибка: L6200E: Symbol blablabla multiply definition (by Protocol.o and main.o)

Т.е. Кеил виноват? В Protocol.h пишите
Код
extern int  blablabla;

В Protocol.c делаете глобальную переменную
Код
int  blablabla = 10;

Хидер подключаете к main.c или любому другому файлу, где хотите иметь доступ к blablabla.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Xeon
сообщение Dec 22 2011, 09:01
Сообщение #38


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

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524



Только что создал новый проект... в нем 3 файла pp.h, pp.c, и main

код pp.h:
Код
#ifndef PP_H
#define PP_H

int constanta = 2;

int add_2(int a);

#endif


код pp.c:
Код
#include "pp.h"

int add_2(int a)
{
    a = constanta;

    return a;
}


код main.c:
Код
#include <at91sam7s128.h>
#include "pp.h"

int main(void)
{
    int a;
    a = 2;

    a = add_2(a);

    return a;
}


На всякий пожарный sm.gif, сам проект:Прикрепленный файл  3.rar ( 61.5 килобайт ) Кол-во скачиваний: 64


И тут тоже такое...

Цитата(Lotor @ Dec 22 2011, 11:47) *
Т.е. Кеил виноват? В Protocol.h пишите
Код
extern int  blablabla;

В Protocol.c делаете глобальную переменную
Код
int  blablabla = 10;

Хидер подключаете к main.c или любому другому файлу, где хотите иметь доступ к blablabla.


Теперь понил...
Ну например visual studio не каких extern не требует...

Тут же есть моментик... открываю проект для stm32чётотам ) и там нет ни каких extern...есть обычное объявление глобальных переменных в разных файлах и никаких руганьев компилятора или линковщика....

Компилятор один.... в чём разница... настройки сравнил все... всё одинаково, за исключением камня...

Ну и там же для stm в проекте где есть прототипы функций...передними нет не каких extern, а в моём проекте для at91sam7s128 компилятор требует (точнее линковщик)... в чём может быть разница????

Сообщение отредактировал Xeon - Dec 22 2011, 09:02
Go to the top of the page
 
+Quote Post
Lotor
сообщение Dec 22 2011, 09:03
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Xeon @ Dec 22 2011, 13:01) *
Ну и там же для stm в проекте где есть прототипы функций...передними нет не каких extern

А для функций extern не обязателен. И это опять стандарт.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Xeon
сообщение Dec 22 2011, 09:06
Сообщение #40


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

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524



Ну и ещё одно... разве стандарт С требует при объявлении глобальных переменных и функций в дразных модулях extern? help.gif

А вот об этом можете рассказать:
Тут же есть моментик... открываю проект для stm32чётотам ) и там нет ни каких extern...есть обычное объявление глобальных переменных в разных файлах и никаких руганьев компилятора или линковщика....

Компилятор один.... в чём разница... настройки сравнил все... всё одинаково, за исключением камня...
help.gif

Сообщение отредактировал Xeon - Dec 22 2011, 09:06
Go to the top of the page
 
+Quote Post
Lotor
сообщение Dec 22 2011, 09:09
Сообщение #41


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Xeon @ Dec 22 2011, 13:06) *
Ну и ещё одно... разве стандарт С требует при объявлении глобальных переменных и функций в дразных модулях extern? help.gif

А вот об этом можете рассказать:
Тут же есть моментик... открываю проект для stm32чётотам ) и там нет ни каких extern...есть обычное объявление глобальных переменных в разных файлах и никаких руганьев компилятора или линковщика....

Компилятор один.... в чём разница... настройки сравнил все... всё одинаково, за исключением камня...
help.gif

По-моему Вам надо поучить матчасть. Это полезно. Стандарты за Вас никто читать не будет.

PS: погуглили бы прежде чем задавать такие вопросы. Одна из первых ссылок ответит Вам на все сумбурные вопросы http://www.rsdn.ru/forum/cpp/2706624.1.aspx


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Xeon
сообщение Dec 22 2011, 09:24
Сообщение #42


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

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524



Цитата(Lotor @ Dec 22 2011, 12:09) *
По-моему Вам надо поучить матчасть. Это полезно. Стандарты за Вас никто читать не будет.


А есть ссылочка на стандарт?)

Цитата(Lotor @ Dec 22 2011, 12:09) *
По-моему Вам надо поучить матчасть. Это полезно. Стандарты за Вас никто читать не будет.

PS: погуглили бы прежде чем задавать такие вопросы. Одна из первых ссылок ответит Вам на все сумбурные вопросы http://www.rsdn.ru/forum/cpp/2706624.1.aspx


Спасибо!)

А на примере той же visual studio, как там всё это дело работает, не вкурсе? Ведь там не надо писать подобного...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:04
Рейтинг@Mail.ru


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