We are currently in the process of converting the website to the new design. Some pages, like this one, are still broken. We appreciate your patience.
RISCY BUSINESS»Episode Guide
Fun with Pointers & Printing
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:19Recap and set the stage for the day
0:19Recap and set the stage for the day
0:19Recap and set the stage for the day
0:45Consult DrewatSiFive's reply to the forum post1
📖
0:45Consult DrewatSiFive's reply to the forum post1
📖
0:45Consult DrewatSiFive's reply to the forum post1
📖
3:27Pointer assignment2
📖
3:27Pointer assignment2
📖
3:27Pointer assignment2
📖
8:46The Privileged spec is up in the air3
8:46The Privileged spec is up in the air3
8:46The Privileged spec is up in the air3
9:46printf4
9:46printf4
9:46printf4
12:20Run the hello world program to determine that we have a working printf()
🏃
12:20Run the hello world program to determine that we have a working printf()
🏃
12:20Run the hello world program to determine that we have a working printf()
🏃
13:17hossein1387 Yeah, it works for me too. Magic
🗪
13:17hossein1387 Yeah, it works for me too. Magic
🗪
13:17hossein1387 Yeah, it works for me too. Magic
🗪
13:33Fix up the *config_string assignment in print_instructions()
13:33Fix up the *config_string assignment in print_instructions()
13:33Fix up the *config_string assignment in print_instructions()
16:45Consult man 3 fflush and man 2 write
📖
16:45Consult man 3 fflush and man 2 write
📖
16:45Consult man 3 fflush and man 2 write
📖
18:43Comment out the fflush(), make clean, compile and upload
18:43Comment out the fflush(), make clean, compile and upload
18:43Comment out the fflush(), make clean, compile and upload
19:33Run our demo_gpio.c program and view the output
🏃
19:33Run our demo_gpio.c program and view the output
🏃
19:33Run our demo_gpio.c program and view the output
🏃
20:38Change the printf() to print a string
20:38Change the printf() to print a string
20:38Change the printf() to print a string
24:29Run and see no output
🏃
24:29Run and see no output
🏃
24:29Run and see no output
🏃
25:22Compare the difference between printf() in gpio_demo.c and in hello.c
📖
25:22Compare the difference between printf() in gpio_demo.c and in hello.c
📖
25:22Compare the difference between printf() in gpio_demo.c and in hello.c
📖
26:46Compare the Makefiles
26:46Compare the Makefiles
26:46Compare the Makefiles
27:26hossein1387 Can you try to clean your env? Because it works for me
🗪
27:26hossein1387 Can you try to clean your env? Because it works for me
🗪
27:26hossein1387 Can you try to clean your env? Because it works for me
🗪
27:50Run make software_clean and remove the fflush()
27:50Run make software_clean and remove the fflush()
27:50Run make software_clean and remove the fflush()
28:45Run the program to see inconsistent writing
🏃
28:45Run the program to see inconsistent writing
🏃
28:45Run the program to see inconsistent writing
🏃
29:34hossein1387 I tried this in beginning of print_instructions(): unsigned char * ConfigString = (unsigned char*)*(volatile uint32_t *) 0x0000100C; printf("%s", ConfigString);
🗪
29:34hossein1387 I tried this in beginning of print_instructions(): unsigned char * ConfigString = (unsigned char*)*(volatile uint32_t *) 0x0000100C; printf("%s", ConfigString);
🗪
29:34hossein1387 I tried this in beginning of print_instructions(): unsigned char * ConfigString = (unsigned char*)*(volatile uint32_t *) 0x0000100C; printf("%s", ConfigString);
🗪
30:40Consult man 3 printf
30:40Consult man 3 printf
30:40Consult man 3 printf
31:51Make printf() print the address of config_string
31:51Make printf() print the address of config_string
31:51Make printf() print the address of config_string
32:37Run our program and view the output
🏃
32:37Run our program and view the output
🏃
32:37Run our program and view the output
🏃
34:51Note how inconsistent the writing is
34:51Note how inconsistent the writing is
34:51Note how inconsistent the writing is
35:39Consult man 3 printf again
35:39Consult man 3 printf again
35:39Consult man 3 printf again
37:53Try casting config_string to void*
37:53Try casting config_string to void*
37:53Try casting config_string to void*
39:40Run our program and receive the same address
🏃
39:40Run our program and receive the same address
🏃
39:40Run our program and receive the same address
🏃
40:02Set config_string without casting
40:02Set config_string without casting
40:02Set config_string without casting
40:50Run and receive the 0x100c address we were expecting
🏃
40:50Run and receive the 0x100c address we were expecting
🏃
40:50Run and receive the 0x100c address we were expecting
🏃
42:26Set config_string with the cast again
42:26Set config_string with the cast again
42:26Set config_string with the cast again
44:00Run our program to see our output, with a few words on pointer dereferencing
🏃
44:00Run our program to see our output, with a few words on pointer dereferencing
🏃
44:00Run our program to see our output, with a few words on pointer dereferencing
🏃
45:20Remember switching the jumper5
45:20Remember switching the jumper5
45:20Remember switching the jumper5
47:46Run and view our output
🏃
47:46Run and view our output
🏃
47:46Run and view our output
🏃
48:02Try to make print_instructions() write out the config_string using write()
48:02Try to make print_instructions() write out the config_string using write()
48:02Try to make print_instructions() write out the config_string using write()
48:41Run the program and view our correct config_string output, with a few words on where we got the config_string location
🏃
48:41Run the program and view our correct config_string output, with a few words on where we got the config_string location
🏃
48:41Run the program and view our correct config_string output, with a few words on where we got the config_string location
🏃
50:11Try printing from 0x00020004
50:11Try printing from 0x00020004
50:11Try printing from 0x00020004
53:35Run the program to see nothing at that memory location
🏃
53:35Run the program to see nothing at that memory location
🏃
53:35Run the program to see nothing at that memory location
🏃
54:18Consult the Pinout diagram in the Getting Started Guide6
📖
54:18Consult the Pinout diagram in the Getting Started Guide6
📖
54:18Consult the Pinout diagram in the Getting Started Guide6
📖
57:51Read about the HiFive1 Boot Sequence7
📖
57:51Read about the HiFive1 Boot Sequence7
📖
57:51Read about the HiFive1 Boot Sequence7
📖
59:43Read about OTP Contents8
📖
59:43Read about OTP Contents8
📖
59:43Read about OTP Contents8
📖
1:02:29Try to print the Board Identifier
1:02:29Try to print the Board Identifier
1:02:29Try to print the Board Identifier
1:05:35Run our program and see garbage output
🏃
1:05:35Run our program and see garbage output
🏃
1:05:35Run our program and see garbage output
🏃
1:06:02Try to verify that 0x100C prints
1:06:02Try to verify that 0x100C prints
1:06:02Try to verify that 0x100C prints
1:07:44Run the program to see that it worked, and determine that the Board Identifier is not a string
🏃
1:07:44Run the program to see that it worked, and determine that the Board Identifier is not a string
🏃
1:07:44Run the program to see that it worked, and determine that the Board Identifier is not a string
🏃
1:09:41Try to printf() the board_id as an unsigned int
1:09:41Try to printf() the board_id as an unsigned int
1:09:41Try to printf() the board_id as an unsigned int
1:12:20Run our program to see some output
🏃
1:12:20Run our program to see some output
🏃
1:12:20Run our program to see some output
🏃
1:13:16Try to printf() the board_id as a char, cast to an int
1:13:16Try to printf() the board_id as a char, cast to an int
1:13:16Try to printf() the board_id as a char, cast to an int
1:14:20Run the program and hit a trap
🏃
1:14:20Run the program and hit a trap
🏃
1:14:20Run the program and hit a trap
🏃
1:15:06hossein1387 It's a trap!
🗪
1:15:06hossein1387 It's a trap!
🗪
1:15:06hossein1387 It's a trap!
🗪
1:15:11Try to print the board_id as an int, cast to an int
1:15:11Try to print the board_id as an int, cast to an int
1:15:11Try to print the board_id as an int, cast to an int
1:15:45Run the program and hit a trap again
🏃
1:15:45Run the program and hit a trap again
🏃
1:15:45Run the program and hit a trap again
🏃
1:16:39That's all that we have time for for today
1:16:39That's all that we have time for for today
1:16:39That's all that we have time for for today
1:16:53hossein1387 I tried to setup gdb for the board, but I got my OpenOCD all screwed up. I think gdb is very useful in these situations
🗪
1:16:53hossein1387 I tried to setup gdb for the board, but I got my OpenOCD all screwed up. I think gdb is very useful in these situations
🗪
1:16:53hossein1387 I tried to setup gdb for the board, but I got my OpenOCD all screwed up. I think gdb is very useful in these situations
🗪
1:18:41Stay RISCY, everyone!
1:18:41Stay RISCY, everyone!
1:18:41Stay RISCY, everyone!