Hi Walter,

Sorry for the late reply.
The most important part I modified for TI's makefile is to make sure that
the firmware is loaded into remoteproc1. I basically replaced the loading
procedure in the shell script with Molly's version which I attached below.
I also added the entire include file and modified some of the constants and
variable names in the c code because compiler reports errors of
unrecognized header file and variables. But except those, it runs pretty
well.

start:
ifneq ($(PRU_DIR),)
@echo write_init_pins.sh
@$(COMMON)/write_init_pins.sh /lib/firmware/$(CHIP)-pru$(PRUN)-fw
@echo "-    Starting PRU $(PRUN)"
@echo start > $(PRU_DIR)/state
else ifeq ($(PROC),tidl)
ti-mct-heap-check -c
sudo mjpg_streamer -i "input_opencv.so -r 640x480 -d /dev/$(shell fgrep -v
vpe /sys/class/video4linux/video*/name | perl -ne '/\/(video\d+)\/name/ &&
print $$1') \
--filter ./$(TARGET)$(EXE)" -o "output_http.so -p 8090 -w
/usr/share/mjpg-streamer/www"
else
./$(TARGET)$(EXE)
endif


Regards,
Cheng


Walter Cromer <[email protected]> 于2021年5月4日周二 下午4:02写道:

> I am glad to have helped a little bit.   Stick with it.  When it clicks
> and you start really moving forward I think you'll be pleased.
>
> Can you share the changes to the Makefile that you made?  I'm curious if
> it might help me.
>
> Right now I am reading the ADC every 2.7ms.  I'm reading three channels.
> I include the step id too and check that.  I am using switch-case to check
> the step and put the analog input into the right variable in my code.   It
> might be slighter faster with an if-elseif but I like the neatness of the
> switch-case and until it causes me timing problems, I'm sticking with it.
>
> I am also fairly certain the ADC can be read faster.  I have the ADC in
> one-shot mode and delay before I kick it off again.   I've also run this
> with no averaging, 4 averages, and 16 averages and it makes very little
> difference in timing for me.
>
> Walter
>
> On Tuesday, May 4, 2021 at 11:33:51 AM UTC-4 [email protected] wrote:
>
>> Hi Walter,
>>
>> Thank you so much for the reply. I think my setup is exactly the same as
>> what you have (win10 and BBB wireless). That really motivated me to see
>> somebody else successfully run the system with the same setup.
>> I actually made some preliminary progress after two nights brooding and I
>> am able to read out ADC data through rpmsg. Thanks a lot for your tips.
>>
>> I think the problem is still in the makefile and environment. As you
>> mentioned, you are using makefile from PRUcookbook while I started off with
>> TI's built-in makefile.  I believe there is a couple of slight difference
>> between Debian system and TI SDK environment which turns out to be critical
>> in compiling. I carefully compared the difference between two makefiles and
>> created one which is close to the makefile in the PRUcookbook. That works
>> like a charm.
>>
>> Next step I also want to explore precise timing and see how fast the adc
>> can run. May I ask what is the speed you are reading out from ADC?
>>
>> Regards,
>> Cheng
>>
>> 在2021年5月3日星期一 UTC-4 上午11:24:23<[email protected]> 写道:
>>
>>> I just went through this pain and the people in this group were awesome
>>> help.
>>>
>>> I needed to read three analog inputs and it was a bear but once I got
>>> it, it has been going well.
>>>
>>> You don't mention the OS of your development platform or I may have
>>> missed it.  I'm on a Windows 10 box and using a BBB Wireless.  TI's entire
>>> learning system for this expects a Linux development platform so it's not
>>> as useful as it could be if you are on Windows.  I didn't want to go to the
>>> trouble of even bringing up a virtual Linux on my Windows box for this.  I
>>> did install Code Composer Studio (CCS) from TI, but gave up on it.  There's
>>> no easy way to transfer your compiled firmware to the BBB from within it
>>> according to TI.   So I just do everything on the Beagle and it meets my
>>> needs.
>>>
>>> I use the cloud9 IDE that ships with the BeagleBones for coding both the
>>> ARM and PRU code.  This environment compiles the ARM-side code and executes
>>> it just like any normal host (aka Linux, aka ARM) program just fine.
>>>  However, to compile the PRU code and load it I go over to a PUTTY session
>>> and use the make files from Mark Yoders' PRU Cookbook (
>>> https://markayoder.github.io/PRUCookbook/) .  My process is clunky but
>>> my programs aren't huge or extremely complex (yet) and this works for me.
>>> I don't have and don't want to invest in a debug probe so debugging the PRU
>>> code can be a pain and slow.  The only option really is to use RPMsg almost
>>> like printf to send messages back at key points in the PRU code to let me
>>> know where it is executing and what's happening.  (Purists and more
>>> advanced developers are barfing and laughing at me right now I am sure.)
>>>
>>> I strongly encourage you to get the Technical Reference Manual for the
>>> TI ARM335x and specifically spend time with the Touchscreen Controller
>>> chapter.  If you need precise timing, you'll want to spend time in the
>>> Industrial Ethernet Peripheral chapter too.   These are powerful tools once
>>> you understand them.
>>>
>>> Also, get the PRU Optimizing C/C++ Compiler manual from TI and go
>>> through it.  One thing that really tripped me up was their implementation
>>> of the __far keyword.   GCC doesn't recognize that and I didn't understand
>>> what was going on at first.
>>>
>>> As Mark commented, some people encourage using remoteproc, some
>>> encourage using libpruio and some still use the uio. TI supports remoteproc
>>> and I expect them to be around so I went with remoteproc.  It may have its
>>> drawbacks but it is working just fine for me.  I can't comment on the other
>>> two as I have not tried them.   Also, I've found the TI E2E forum's
>>> moderators to be patient with me as a neophyte.   But the Google group's
>>> members do have wider experience.
>>>
>>> FYI - watch out for how TI puts some register settings that cross nibble
>>> or byte boundaries.  It can really bite you!  Take a look at the
>>> STEPCONFIGn registers implementation of averaging to see what I mean.
>>>
>>> I hope this helps!
>>>
>>> On Saturday, May 1, 2021 at 12:46:03 PM UTC-4 lazarman wrote:
>>>
>>>> <<<My first intention is to post in TI E2E support forums
>>>> <https://e2e.ti.com/>, but it requires a company email to do so.
>>>>
>>>> Hello Cheng
>>>>
>>>> I want to Help you  but it appears my message is lost in translation
>>>>
>>>> What it sounds like to me  is TI pays these engineers $$ to answer
>>>> questions and does not want to waste time and $$$ with users that dont
>>>> follow their well written instructions *which say use SDK Yocto Linux
>>>> on the ARM for this example.*
>>>>
>>>> For me I start with a working example with instructions and
>>>> documentation then modifyit
>>>>
>>>> If I undertsand correctly you have *never* had an example working
>>>>
>>>> If you like breaking examples and working on projects that ONLY works
>>>> from a unix script and hides all the details then this is the correct group
>>>> to to ask questions (-:
>>>>
>>>> I suggest you try the example *you found*  following the intructions
>>>> exactly.  if you cant or wont do that switch to DEbian/Cookbook
>>>>
>>>> But if you do the latter I suggest don't change things follow the
>>>> instructions
>>>>
>>>> What is interesting is a Linux C application program should work
>>>> correctly if it was coded generic especially when both Linux variants are
>>>> for the same chip. Trying to figure out what is different between Linux
>>>> variants to me is not productive its not my focus for you maybe it is.
>>>>
>>>> Perhaps the Linux in the SDK was configured differently which implies
>>>> it handle PRU slightly different Im not surprised by this.
>>>>
>>>> Perhaps you can find what's different that may be a valid approach that
>>>> works for you and maybe someone can help. I think Dennis gave you a good
>>>> clue.
>>>>
>>>> I will watch the thread hopefully I can be of help should you choose to
>>>> follow the path E2E and the SDK layed out for you
>>>>
>>>> Cheers
>>>>
>>>> On Friday, April 30, 2021, 07:52:09 PM CDT, Cheng Chen <
>>>> [email protected]> wrote:
>>>>
>>>>
>>>> Hey Mark,
>>>>
>>>> Thanks for spending time for replying. I really appreciate it.
>>>> I totally agree with you that one should spend time investigating
>>>> first. I apologize if they are dumb questions, but I have stuck there for
>>>> two weeks. I am more a circuit guy and just started picking up Beaglebone
>>>> as a hobby and potential career expansion.
>>>>
>>>> My first intention is to post in TI E2E support forums
>>>> <https://e2e.ti.com/>, but it requires a company email to do so. If
>>>> this particular .org is not a good place for rookie questions, would you
>>>> please advise some place for suitable for discussion?
>>>>
>>>> Regarding to the documents, are you referring to processor SDK Linux
>>>> Software Developer's guide? If that is the one, I did follow its
>>>> instructions, but maybe I missed something. I will go over it again. If
>>>> that's not the one, which document are you referring to? I also went
>>>> through PRUcookbook and Exploring BeagleBone by Derek Molly. Not a lot are
>>>> mentioned regarding this topic.
>>>>
>>>> The code is built-in in the Beaglebone Black, this is one of the
>>>> reasons I am confused why it cannot be compiled. One can also download
>>>> freely from TI github (
>>>> https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/
>>>> ).
>>>>
>>>> Again thanks for the advice and suggestion. I am very glad that there
>>>> is such a nice place that I can call for help and I hope after some
>>>> practice I am also able to contribute here.
>>>>
>>>> Regards,
>>>> Cheng
>>>>
>>>> 在2021年4月30日星期五 UTC-4 下午5:09:01<lazarman> 写道:
>>>>
>>>> Hello
>>>>
>>>> I know the code. It's all explained in the SDK documention. I also like
>>>> these examples.
>>>> Your asking questions about an SDK that's supported by Texas
>>>> Instruments. You do understand this .org group you posted in may contain TI
>>>> employees but is NOT TI support it's Beagle board Debian.
>>>>
>>>>  I think if you read the documents you will understand the answers
>>>>
>>>>  I'm sure you could compile this with some work the sdk instructions
>>>> talk about This.
>>>>
>>>> Hypothetical question ❓
>>>> If the instructions told you a virtual box build was not supported and
>>>> not recommended would you use one anyway and then ask the person who told
>>>> you not too do this why it doesn't work.
>>>>
>>>> I'm struggling to be nice in this reply.
>>>>
>>>>  I remember asking questions as a young engineer that clearly showed I
>>>> made zero effort to research anything.
>>>>
>>>> Then one day I got some really critical replies about my skills.
>>>>
>>>> Do some reading then if stuck ask questions
>>>>
>>>> Or better yet follow what the sdk instructions suggest.
>>>>
>>>> If you found this code  on internet and don't have a TI account or are
>>>> not eligible for ITAR restrictions to download the sdk  you have a big
>>>> problem.
>>>>
>>>> I see you have a Gmail account
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Sent from Yahoo Mail on Android
>>>> <https://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature>
>>>>
>>>> On Fri, Apr 30, 2021 at 3:09 PM, Cheng Chen
>>>> <[email protected]> wrote:
>>>>
>>>> Hi all,
>>>>
>>>> I am practicing PRU skills through some TI examples. I am playing with 
>>>> PRU_ADC_onChip
>>>>
>>>> <https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am335x/PRU_ADC_onChip?h=master>example
>>>> and ran into a few questions. I wonder if you can help me with.
>>>>
>>>> The nice thing about this example is it has a README.txt with all the
>>>> procedures. The idea is to use rpmsg to communicate between arm and pru
>>>> module and read out ADC value.
>>>> I am using a Beaglebone Black wireless.
>>>> Here is the basic procedures.
>>>>
>>>> FILE STRUCTURE
>>>> PRU_ADC
>>>>   |
>>>>   |--pru_adc_firmware.c firmware loaded into PRU0
>>>>   |
>>>>   |--pru_adc_userspace
>>>>        |--pru_adc_userspace.c userspace code that interacts with PRU0
>>>>
>>>> BUILD FIRMWARE & USERSPACE CODE
>>>> $ cd <PATH_TO_PRU_SW_SUPPORT_PACKAGE>/examples/am335x/PRU_ADC_onChip/
>>>> $ make clean
>>>> $ make
>>>> $ cd pru_adc_userspace/
>>>> $ make clean
>>>> $ make
>>>>
>>>> My BBB wireless can compile pru code successfully because I installed
>>>> PRU_CGT compiler. But it is unable to compile ARM code. I think that is
>>>> because ARM_CCT cross-compiler toochain environment is missing, in another
>>>> word, I need to install processor-sdk-am335x
>>>>
>>>> My first questions is can I install processor-sdk-am335x  into Debian
>>>> system I currently have (Linux beaglebone 4.19.94-ti-r62 ) ? I am a little
>>>> confused about the relationship between this SDK and Debian system. Why is
>>>> the tutorial asking me to compile  pru_adc_userspace.c  in the Beaglebone.
>>>> I thought it is supposed to be executed in a cross-compilation environment.
>>>>
>>>> I ended up installing processor-sdk-am335x on my linux desktop and
>>>> compiled successfully. Then I copied the generated file back to BBB
>>>> wireless. But when I tried to run the program, it shows the following
>>>> error.
>>>>
>>>> Reading voltage at ADC Channel: 5
>>>> /dev/rpmsg_pru30 could not be opened.
>>>> Trying to initialize PRU using sysfs interface.
>>>> ERROR: Could not open /dev/rpmsg_pru30
>>>>
>>>> Attached is the excerpt where the problem happened. Could anyone help
>>>> me with some hints of what is going on here? Much appreciated.
>>>>
>>>>
>>>> struct shared_struct message;
>>>>
>>>> /* use character device /dev/rpmsg_pru30 */
>>>> char outputFilename[] = "/dev/rpmsg_pru30";
>>>>
>>>> /* test that /dev/rpmsg_pru30 exists */
>>>> FILE *ofp;
>>>> uint16_t returnedVoltage;
>>>> ofp = fopen(outputFilename, "r");
>>>>
>>>> if (ofp == NULL) {
>>>>
>>>> printf("/dev/rpmsg_pru30 could not be opened. \n");
>>>> printf("Trying to initialize PRU using sysfs interface.\n");
>>>>
>>>> FILE *sysfs_node;
>>>> char firmware[] = "/sys/class/remoteproc/remoteproc1/firmware";
>>>> char firmwareName[] = "PRU_ADC_onChip.out";
>>>> sysfs_node = fopen(firmware, "r+");
>>>> if (sysfs_node == NULL) {
>>>> printf("cannot open firmware sysfs_node");
>>>> return EXIT_FAILURE;
>>>> }
>>>> fwrite(&firmwareName, sizeof(uint8_t), sizeof(firmwareName),
>>>> sysfs_node);
>>>> fclose(sysfs_node);
>>>>
>>>> char pruState[] = "/sys/class/remoteproc/remoteproc1/state";
>>>> char start[] = "start";
>>>> sysfs_node = fopen(pruState, "r+");
>>>> if (sysfs_node == NULL) {
>>>> printf("cannot open state sysfs_node");
>>>> return EXIT_FAILURE;
>>>> }
>>>> fwrite(&start, sizeof(uint8_t), sizeof(start), sysfs_node);
>>>> fclose(sysfs_node);
>>>>
>>>> /* give RPMSG time to initialize */
>>>> sleep(3);
>>>>
>>>> ofp = fopen(outputFilename, "r");
>>>>
>>>> if (ofp == NULL) {
>>>> printf("ERROR: Could not open /dev/rpmsg_pru30\n");
>>>> exit(EXIT_FAILURE);
>>>> }
>>>> }
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> For more options, visit http://beagleboard.org/discuss
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "BeagleBoard" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/beagleboard/1d43aa7b-0e94-4431-9e31-13545213940bn%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/beagleboard/1d43aa7b-0e94-4431-9e31-13545213940bn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> --
>>>> For more options, visit http://beagleboard.org/discuss
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "BeagleBoard" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To view this discussion on the web visit
>>>>
>>>> https://groups.google.com/d/msgid/beagleboard/39813de1-fa27-41d7-9422-7ef375ae36b4n%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/beagleboard/39813de1-fa27-41d7-9422-7ef375ae36b4n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "BeagleBoard" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/beagleboard/W5jMCO3fu84/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/beagleboard/ca296f29-c476-45fc-906d-e24595453270n%40googlegroups.com
> <https://groups.google.com/d/msgid/beagleboard/ca296f29-c476-45fc-906d-e24595453270n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/CAAOtuRfyiDxEL_N23_%2B1KFzH7EAt%2BapifqpkUCdGHn077Sc7Ww%40mail.gmail.com.

Reply via email to