среда, 21 января 2015 г.

Наконец пришла плата с FPGA от Altera! ^__^

Наконец дождался борд из Китая с FPGA!  Давно хотел попробовать программирование под всякие там ПЛИС-ы и вот оно свершилось :D



Скачал Quartus II и прочитал введение в Verilog.  После получаса безуспешных ковыряний в IDE я всё же смог сам написать, собрать и прошить первый код на Verilog ^____^   Пищит динамиком на плате:

module Test(clk, out);

input clk;
output out;
reg out;
reg[15:0] cnt;

parameter period = 7000;

always@(posedge clk)
begin
 cnt<=cnt+1;
 if(cnt == period)
 begin
  cnt<=0;
  out<=~out;
 end
end

endmodule

воскресенье, 11 января 2015 г.

ELF & DWARF parser

Написал тут по-быстрому (хотя не очень, 4 дня потратил на этот говнокод) на C# библиотеку для чтения ELF файлов и парсинга DWARF4 дебаг информации в ELF файлах.

https://github.com/L-proger/ELFUtils

https://github.com/L-proger/ELFExplorer - GUI приложение, лагучий набросок.

В основном для самообучения, для раскуривания дебаггинга и т.п. но ещё одно интересное для меня применение - напишу вскоре тулзу для вывода подробной инфы о памяти ELF бинарника.  Я довольно часто программирую под микроконтроллеры и как многим известно там есть обычно достаточно большие проблемы с объёмом памяти - как FLASH так и оперативной, потому часто приходится считать байты и стараться сделать бинарник как можно меньше по размеру.


Вот и накидал эту библиотеку. На самом деле всё можно было бы сделать гораздо проще! Использоваться стандартную тулзу тулчейна readelf и, скажем, регулярками разбирать её вывод и получать финальную информацию о символах в бинарнике, но это слишком просто ) А так я разобрался в DWARF формате что меня весьма радует.

Пример вывода консольной версии ниже. Консоль сейчас для простого дебага, я вскоре сделаю красивый удобный гуй для этого всего )   А, да, ещё DLL умеет парсить пока минимально lds скрипты линкера и правильно использовать информацию о секциях памяти для последующего анализа её использования (можно посмотреть сколько % памяти каждого из банков занято и т.п.).


Вывод инфы по секциям памяти.