Compare commits
6 Commits
d01cb27daa
...
6706055229
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6706055229 | ||
|
|
cfea6e031a | ||
|
|
f3e7cbb83a | ||
|
|
d8b4c8e8cf | ||
|
|
27704a2f16 | ||
|
|
54237c8ade |
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.zig-cache/
|
||||
main
|
||||
21
basics/build.zig
Normal file
21
basics/build.zig
Normal file
@@ -0,0 +1,21 @@
|
||||
const std = @import("std");
|
||||
|
||||
pub fn build(b: *std.Build) void {
|
||||
const target = b.standardTargetOptions(.{});
|
||||
const optimize = b.standardOptimizeOption(.{});
|
||||
|
||||
const exe = b.addExecutable(.{
|
||||
.name = "HAL-9000",
|
||||
.version = "0.1.0",
|
||||
.debug = true,
|
||||
.root_source_file = b.path("src/main.zig"),
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
});
|
||||
|
||||
b.installArtifact(exe);
|
||||
|
||||
const run_cmd = b.addRunArtifact(exe);
|
||||
const run_step = b.step("run", "Run the app");
|
||||
run_step.dependOn(&run_cmd.step);
|
||||
}
|
||||
16
basics/src/calc.zig
Normal file
16
basics/src/calc.zig
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
pub fn add(a: i32, b: i32) i32 {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
pub fn sub(a: i32, b: i32) i32 {
|
||||
return a - b;
|
||||
}
|
||||
|
||||
pub fn mul(a: i32, b: i32) i32 {
|
||||
return a * b;
|
||||
}
|
||||
|
||||
pub fn divFloor(a: i32, b: i32) i32 {
|
||||
return @divFloor(a, b);
|
||||
}
|
||||
26
basics/src/main.zig
Normal file
26
basics/src/main.zig
Normal file
@@ -0,0 +1,26 @@
|
||||
// src/main.zig
|
||||
const std = @import("std");
|
||||
|
||||
fn sumUpTo(comptime n: u32) u64 {
|
||||
var sum: u64 = 0;
|
||||
var i: usize = 0;
|
||||
while (i < n+1) : (i+=1) {
|
||||
sum = sum + i;
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
fn sumUpTo2(comptime n: u32) u64 {
|
||||
var sum: u64 = 0;
|
||||
for (0..n + 1) |i| {
|
||||
sum += i;
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
pub fn main() !void {
|
||||
const r1 = comptime sumUpTo(100);
|
||||
const r2 = sumUpTo2(1_000_000);
|
||||
std.debug.print("{d}\n", .{r1});
|
||||
std.debug.print("{d}\n", .{r2});
|
||||
}
|
||||
@@ -12,7 +12,7 @@
|
||||
system = "x86_64-linux";
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
zig = zig-overlay.packages.${system}.master;
|
||||
zls = zls-overlay.packages.${system}.zls;
|
||||
zls = pkgs.zls;
|
||||
in {
|
||||
devShells.${system}.default = pkgs.mkShell {
|
||||
buildInputs = [ zig zls ];
|
||||
|
||||
3
tiva/.dir-locals.el
Normal file
3
tiva/.dir-locals.el
Normal file
@@ -0,0 +1,3 @@
|
||||
((zig-mode . ((ffap-c-path . ("/home/priec/programs/CMSIS/CMSIS/Include"
|
||||
"/home/priec/programs/CMSIS/Device/TI/TM4C/Include"
|
||||
"/usr/include")))))
|
||||
2
tiva/.gitignore
vendored
Normal file
2
tiva/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.zig-cache/
|
||||
zig-out/
|
||||
47
tiva/build.zig
Normal file
47
tiva/build.zig
Normal file
@@ -0,0 +1,47 @@
|
||||
const std = @import("std");
|
||||
|
||||
pub fn build(b: *std.Build) void {
|
||||
const target = b.resolveTargetQuery(.{
|
||||
.cpu_arch = .thumb,
|
||||
.os_tag = .freestanding,
|
||||
.abi = .eabi,
|
||||
.cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m4 },
|
||||
});
|
||||
|
||||
const optimize = b.standardOptimizeOption(.{});
|
||||
|
||||
// Create the module separately
|
||||
const tiva_module = b.createModule(.{
|
||||
.root_source_file = b.path("src/main.zig"),
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
});
|
||||
|
||||
const cmsis_path = "/home/priec/programs/CMSIS";
|
||||
|
||||
// Generic CMSIS Core (for core_cm4.h)
|
||||
tiva_module.addIncludePath(.{ .cwd_relative = cmsis_path ++ "/CMSIS/Include" });
|
||||
// TM4C Device Specific (for TM4C123GH6PM.h)
|
||||
tiva_module.addIncludePath(.{ .cwd_relative = cmsis_path ++ "/Device/TI/TM4C/Include" });
|
||||
|
||||
const elf = b.addExecutable(.{
|
||||
.name = "tiva-app",
|
||||
.root_module = tiva_module,
|
||||
});
|
||||
|
||||
elf.root_module.strip = true;
|
||||
elf.root_module.omit_frame_pointer = true;
|
||||
elf.root_module.unwind_tables = .none;
|
||||
|
||||
// Disable red zone for bare metal
|
||||
elf.root_module.red_zone = false;
|
||||
|
||||
// Provide basic built-in functions
|
||||
elf.bundle_compiler_rt = true;
|
||||
elf.link_gc_sections = true;
|
||||
|
||||
// Use your custom linker script
|
||||
elf.setLinkerScript(b.path("layout.ld"));
|
||||
|
||||
b.installArtifact(elf);
|
||||
}
|
||||
11
tiva/build.zig.zon
Normal file
11
tiva/build.zig.zon
Normal file
@@ -0,0 +1,11 @@
|
||||
.{
|
||||
.name = .tiva_app,
|
||||
.version = "0.0.1",
|
||||
.fingerprint = 0x8f7e4f3ddce5d838,
|
||||
.paths = .{
|
||||
"build.zig",
|
||||
"build.zig.zon",
|
||||
"src",
|
||||
},
|
||||
.dependencies = .{},
|
||||
}
|
||||
72
tiva/layout.ld
Normal file
72
tiva/layout.ld
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Shawn D'silva <shawn@shawndsilva.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* This file is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* File: TM4C123GH6PHM.ld
|
||||
* Author: Shawn D'silva <https://www.shawndsilva.com>.
|
||||
* Version: 1.0.0.
|
||||
* Description: linker file for the TM4C Launchpad
|
||||
*/
|
||||
|
||||
MEMORY
|
||||
{
|
||||
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K /* FLASH size 256KB */
|
||||
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 32K/* RAM size 32KB */
|
||||
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
|
||||
|
||||
/*
|
||||
* initial stack pointer pointing to top of stack,starts from higher addresses
|
||||
* i.e ORIGIN(RAM) + LENGTH(RAM)-1 in this case 0x20007FFF to lower addesses i.e
|
||||
* those lesser than 0x20007FFF to 0x2000000,which is the origina address of RAM,
|
||||
* until it comes in contact with .bss or .data in which case a buffer overflow occurs
|
||||
*/
|
||||
PROVIDE( _stack_ptr = ORIGIN(RAM) + LENGTH(RAM));
|
||||
|
||||
/* constants and other code stored in FLASH */
|
||||
.text :
|
||||
{
|
||||
_text = .; /* beginning of .text segment,also called code memory */
|
||||
KEEP(*(.vector_table)) /* vector table defined in startup.c to be included */
|
||||
*(.text*) /* other code */
|
||||
*(.rodata*) /* constants go here */
|
||||
_etext = .; /* end of .text segment */
|
||||
} > FLASH
|
||||
|
||||
/* data, initialized variables, to be copied to RAM upon <RESET> by startup.c */
|
||||
.data :
|
||||
{
|
||||
_data = .; /* beginning of .data segment */
|
||||
*(.data*) /* data goes here */
|
||||
_edata = .; /* end of .data segment */
|
||||
} > RAM AT >FLASH /* .data segment starts directly after the .text section in FLASH */
|
||||
|
||||
/* uninitialized data which is initialized to 0 upon <RESET> by startup.c */
|
||||
.bss :
|
||||
{
|
||||
_bss = .; /* beginning of .bss segment */
|
||||
*(.bss*) /* .bss content goes here */
|
||||
*(COMMON)
|
||||
_ebss = .; /* end of .bss segment */
|
||||
} > RAM
|
||||
|
||||
|
||||
|
||||
}
|
||||
7
tiva/src/main.zig
Normal file
7
tiva/src/main.zig
Normal file
@@ -0,0 +1,7 @@
|
||||
const cmsis = @cImport({
|
||||
@cInclude("TM4C123GH6PM.h");
|
||||
});
|
||||
|
||||
export fn _start() noreturn {
|
||||
while (true) {}
|
||||
}
|
||||
4
tiva/zls.json
Normal file
4
tiva/zls.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"enable_autofix": true,
|
||||
"enable_build_on_save": true
|
||||
}
|
||||
Reference in New Issue
Block a user