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

 
 
> Библиотеки в IAR, или сокрытие реализации функций
chernenko
сообщение Dec 4 2006, 10:11
Сообщение #1


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

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Вобщем задача простая, а как реализовать не знаю... и реализуема ли она вообще. Посоветуйте, пожалуйста.
Нужно срыть каким либо образом часть исходного кода программы, которая написана в IAR.
То есть сделать часть функций в виде какой либо библиотеки, чтобы сами функции были видны, а их реализации срыты и не доступны. Возможно ли это?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Lem
сообщение Dec 4 2006, 10:32
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 20-03-05
Пользователь №: 3 533



Цитата(chernenko @ Dec 4 2006, 10:11) *
Вобщем задача простая, а как реализовать не знаю... и реализуема ли она вообще. Посоветуйте, пожалуйста.
Нужно срыть каким либо образом часть исходного кода программы, которая написана в IAR.
То есть сделать часть функций в виде какой либо библиотеки, чтобы сами функции были видны, а их реализации срыты и не доступны. Возможно ли это?


Project Options/General/Output:(Executable/Library)
Посмотрите, сам не пробовал (не было нужды), но подозреваю, что это вроде того, что вам нужно.
(на выходе должен получаться бинарный модуль)
Go to the top of the page
 
+Quote Post
chernenko
сообщение Dec 4 2006, 20:29
Сообщение #3


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

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Цитата(Lem @ Dec 4 2006, 10:32) *
Цитата(chernenko @ Dec 4 2006, 10:11) *

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


Project Options/General/Output:(Executable/Library)
Посмотрите, сам не пробовал (не было нужды), но подозреваю, что это вроде того, что вам нужно.
(на выходе должен получаться бинарный модуль)



Работает и debuger при этом видет функции. Но функции скажем так не прозрачны. Одна проблема. Если при создании бибилотеки презаписать расширение .r90 на .lib то при подключении этой библиотеки в проект, последний ищет библиотеку только .r90 не замечая .lib. Это не принципиально, но для эстетизма хотелось бы иметь библиотеку с расширением .lib. Как это обойти?

А главное стоит ли этот труд каких-либо затрат или все это пустая работа и содержимое библиотеки можно будет легко просмотреть (насколько я понимаю файл библиотеки получается не бинарный)?

Сообщение отредактировал chernenko - Dec 4 2006, 20:30
Go to the top of the page
 
+Quote Post
_Bill
сообщение Dec 6 2006, 14:35
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(chernenko @ Dec 4 2006, 20:29) *
Цитата(Lem @ Dec 4 2006, 10:32) *

Цитата(chernenko @ Dec 4 2006, 10:11) *

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


Project Options/General/Output:(Executable/Library)
Посмотрите, сам не пробовал (не было нужды), но подозреваю, что это вроде того, что вам нужно.
(на выходе должен получаться бинарный модуль)



Работает и debuger при этом видет функции. Но функции скажем так не прозрачны. Одна проблема. Если при создании бибилотеки презаписать расширение .r90 на .lib то при подключении этой библиотеки в проект, последний ищет библиотеку только .r90 не замечая .lib. Это не принципиально, но для эстетизма хотелось бы иметь библиотеку с расширением .lib. Как это обойти?

А главное стоит ли этот труд каких-либо затрат или все это пустая работа и содержимое библиотеки можно будет легко просмотреть (насколько я понимаю файл библиотеки получается не бинарный)?

Ну это же все просто делается. Странслируйте все необходимые модули и создайте из них библиотеку. Эту библиотеку можно подлючать к вашим проектам. Весь вопрос в том, насколько часто будут используемы модули из этой библиотеки. Проблема чаще всего заключается в том, что, как правило, добрая часть программы очень тесно привязана к "железу". Поэтому сделать такие программные модули универсальными весьма проблематично. По крайней мере, на Си. На ассемблере с этим проблем меньше, ассеблер такие вещи делать позволяет. Ниже мой пример подобного универсального модуля программного вывода по последовательному каналу.
Код
    module    SerialOut
;
;    File:    sout.s90
;
;    08-Sep-05 BK    Initial edit
;    28-Sep-05 BK    Last  update
;
$fmacros.inc
;
; External references
;
;    extern    N$BITS            ; The number of bits to be transmitted
N$BITS    =    16                ;
    extern    SDAT$PORT, SDAT$BIT, SDAT$DDR; The data output port
    extern    SCLK$PORT, SCLK$BIT, SCLK$DDR; Clock control port

    rseg    CODE    ; Code segment
;
; ** SerialOut    -- the function outputs N$BITS of data serially through
;        the SDAT$BIT of the MCU port SDAT$PORT. The output starts
;        from the MSB of data.
; ASM usage:
;    r16 - low byte of data;
;    r17 - high byte of data;
;    r18 - the number of bits (N$BITS) for output.
; C usage:
;    void SerialOut(unsigned data, char nbits);

;
; ** SerialOutW    -- the same as the function above, but N$BITS is 16.
;
; ASM usage:
;    r16 - low byte of data;
;    r17 - high byte of data;
; C usage:
;    void SerialOutW(unsigned data);
;
    ENTRY$    SerialOutW
    ldi    r18, N$BITS    ; Set bit counter
    ENTRY$    SerialOut
?0:    sbrs    r17, 7        ; Form a data bit
    cbi    SDAT$PORT, SDAT$BIT    ;
    sbrc    r17, 7            ;
    sbi    SDAT$PORT, SDAT$BIT    ;
    sbi    SCLK$PORT, SCLK$BIT; Form a clock pulse
    lsl    r16            ; (Shift word of data left)
    rol    r17            ;;
    cbi    SCLK$PORT, SCLK$BIT    ;
    dec    r18        ; Bump counter
    brne    ?0        ; Loop if not done yet

    ret
;
; ** InitSerial    -- the function initiates serial port.
;
; C usage:
;    void InitSerial(void);
;
    ENTRY$    InitSerial
    sbi    SCLK$DDR, SCLK$BIT; Set serial port as output
    sbi    SDAT$DDR, SDAT$BIT    ;
    cbi    SCLK$PORT, SCLK$BIT; Set initial levels on clock
    cbi    SDAT$PORT, SDAT$BIT; and data bits
    ret

    end

Обратите внимание, что и порты и отдельные разряды в модуле определены как внешние. Конкретные их значения могут менятся от программы к программе. Для этого их в нужно просто определить в конкретной программе сообответсвующим образом и, опять же, на ассемблере.
Go to the top of the page
 
+Quote Post
chernenko
сообщение Dec 6 2006, 15:27
Сообщение #5


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

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Я с вами согласен. И как писал ранее уже получил результат. А нужен он, чтобы не давать содержимое функции заказчику.
Go to the top of the page
 
+Quote Post



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

 


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


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