关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5590|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ @/ r$ T& i$ `: R/ B3 `% x

% P9 ?, j9 [% X9 S4 G" X    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ U( K+ V4 ]: a
8 f, f0 p) K9 @9 k其他程序段。。。。。
6 w) B, v& T0 r 3 y. O% M5 h  \
   free(x_d);
7 n$ N; W! a% `1 K; n+ C1 q% ]& m( `5 r% m5 t
使用DSP侧单独调试功能,验证动态申请没有问题,- \. e2 k3 E2 i5 V
& P6 d4 Q7 F) l8 B
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% W5 V/ a8 L6 o  ?! I( z

5 G1 g2 x' }3 Q. f- K; b9 O; ?! k9 o! j5 k& `: R
, B6 {( c. H" T; n6 x- O/ t1 L1 j

. t' e+ @; J, T/ _& X/ c5 e( l% i+ i% P
6 \+ k9 H/ r) D1 [1 R+ c+ T

- r# m4 Y* o! A# L0 }' P
9 s, \  f! }) e5 l- @9 U% b/ J) {. C
7 P+ d1 R5 @( ^' T9 B# L8 f+ T5 U0 I+ c% S3 {  c( H& T3 F8 \1 d4 P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 s2 x0 j% y- T! R7 PProgram.heap = 0;  E! Q' }0 V  L& N6 N0 J
Program.argSize = 100;  /* minimum size */
$ w: X1 I6 D) v( j3 l! IProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
, {+ V* f6 T0 M. q+ h0 ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 L5 u# f: ]# [/ d
var heapMemParams = new HeapMem.Params();
) c) n# O0 X8 |3 r$ Z& s6 E. UheapMemParams.size = 0x4000;
( @( t' b" {* o& t+ g( X- Y  O- \9 O' q4 f
var Memory = xdc.useModule('xdc.runtime.Memory');
; m$ A+ y1 D) |, _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* [4 z8 h8 X" O2 n( r* |, [" R% q. O8 }. ^) W3 I
我大约calloc  每次共计大小为5K*16bits,& Q2 A; l- d$ ?7 c( u, d
而默认配置才0x4000、需要改大。
. b, N: }# m5 T9 |) _: i& x. i3 T8 q# L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明8 q9 _- |8 r  }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 t; S% F3 p; W0 j' E9 O
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 w( c/ M! k3 K+ B* }. b; n9 K: [
" y- j8 Z; I( n( h
是不是需要在DSP.CFG中进行配置" s3 |, w5 |/ c1 k+ i- d/ c6 u
我现在的配置为: E/ F5 j- w0 i4 l. X8 ]+ g

) o1 s- F, b5 U$ ^% L1 l/*
- V. o- x! u* K0 h( Y *  ======== Operating System Configuration ========
7 B  {1 L/ P* w1 {8 [ */
9 i7 c8 F9 n; a/ b9 G; w3 f/ n* {( r1 A$ i1 N
/* no rts heap */% @9 I' l1 G! y6 F
Program.heap = 0;' N' ]  r( X7 T; m: P2 g+ X
Program.argSize = 100;  /* minimum size */
% D) K$ J. t; {: `, Z6 a! NProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% Z( U# w% ]% E; ?1 X/ W+ f; H5 e5 t; Y) M
/* create a default heap */9 w. U3 ]( m2 v4 y/ m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' n5 y7 _* M" f- Qvar heapMemParams = new HeapMem.Params();
9 t5 H; t+ _  R: g2 EheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 ?/ D' P# W; o$ w: W

2 e9 m/ F/ Q* a8 i' ~: S$ N
var Memory = xdc.useModule('xdc.runtime.Memory');6 _! x. m: m) Z: P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& b: b! n( j0 g- {- t3 m5 c4 h3 w+ h
& f) c- ~) u9 H- @: Z
/* configure System module */  t, X6 L) U' k3 b" N
var SysMin = xdc.useModule('xdc.runtime.SysMin');7 d# p9 F' U/ O7 j5 m' Y7 k; P
SysMin.bufSize = 0x1000;# u7 V2 P! o- I- A
SysMin.flushAtExit = false;' p# o, K+ ]7 n; l  x8 [

" l$ [1 d) L& H7 k) a% evar System = xdc.useModule('xdc.runtime.System');
5 B# E1 d; J% {System.SupportProxy = SysMin;
+ w: Y/ a8 t) ~+ u+ l$ y* |' N' I/ Q" p& G
/* configure SysBios to use the lower half of Timer 1 */
' N4 y7 n0 s% @) v/ v. Hvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 z( z  s2 D( L( d1 Cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');' N9 l  z$ {5 ?  ~$ ^
Timer.timerSettings[1].master = true;
% ]9 P5 G. w3 @; X/ n7 ]  J( v$ r; `6 ?2 ^2 DTimer.defaultHalf = Timer.Half_LOWER;
6 y$ g2 r1 o  w' ~1 f9 c) j; wClock.timerId = 1;
) y, N& X5 R9 @( l( e* Y: ]( d% S# c# s6 ~3 I8 ?9 I) W
4 D6 }% u8 l0 G
/*% z/ q- R" L$ X; F& H: O
*  ======== Miscellaneous Configuration ========% x# n1 j, E6 i% R
*/
  L' j1 u* W0 a# Q3 T6 \' p1 a) U7 D" A& q7 {, k
/* set default diags mask */
/ x! {/ q* z/ G* |8 {var Diags = xdc.useModule('xdc.runtime.Diags');1 h2 l) w3 E1 x
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' `8 {& S* x! d' `% L
& @* i+ P( B0 C& ?% w2 z9 ?Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* n( |* q' y4 b, e/ O( H, i
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- D& y( M2 x. [$ L- i  D5 p
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 o1 g/ w# d) `; i$ }  M
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 G1 v) f  o% v  RDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 N. }( N$ {; r& h/ vDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 _" B$ s4 l, l+ z- c
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ `! I. k  h0 E' C) P9 t4 T$ l
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 V0 O* \+ ^* c: R6 SDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 u* ?  R' I; f* ~5 ^; @
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 {( \/ U. g2 f  n  HDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* c, H& J& L0 h! cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ ?& o- W7 N8 I  W' ]% Q/ v% |  e9 MDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 |) f* S, j2 C
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: f" K, x, G) ~: I$ q2 G$ ]0 X
! ]. U3 d8 t4 P  X" E& l- I1 ~/* override diags mask for selected modules */
& m) C( e$ H$ x6 J) `- L+ u% \xdc.useModule('xdc.runtime.Main');8 m8 g$ k( M) ]; s
Diags.setMaskMeta(
, s$ r+ j& D1 A1 \0 C% c) w* m    "xdc.runtime.Main",! r, \8 X9 U+ m7 D6 y; x5 I3 V
    Diags.ENTRY | Diags.EXIT | Diags.INFO,% u. p3 [* c% |* x3 [
    Diags.RUNTIME_ON+ {5 p' x+ z  u* \% P4 R1 p
);7 F2 z, j7 k/ K( \1 y3 U& S: L
. n% v7 W# x9 Q- T
var Registry = xdc.useModule('xdc.runtime.Registry');
( R3 q, d; [8 I4 q3 s) K  z+ ORegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# L. A  K  y! c& u4 a1 dRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ ]: Y; r% k! P# A3 p, b8 c
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 W' N! X! f% Z, q3 c, D  k  ERegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 Q1 x: F/ b  J1 t  N3 ?8 h" _* n' [/ V# a9 f
/* create a logger instance */
" Q8 e9 F) c4 [3 kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
4 _3 H9 ]; v3 L" [8 T6 k6 fvar loggerBufP = new LoggerBuf.Params();
- B* O" U7 h9 [7 J: hloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 K& O& l* ~9 t; y5 {! b
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" i! i" G4 s) @" C& {/ h( _4 r) t
/ ^: `9 Q/ S9 G2 h- D7 y! P8 gvar appLogger = LoggerBuf.create(loggerBufP);
% Q2 i+ S' J% z" a; qappLogger.instance.name = "AppLog_Core1";
! o) |- r/ J7 j: y' a5 N. hDefaults.common$.logger = appLogger;; W' N4 ]7 V, H- r* _- q
Memory.defaultHeapSize = 0x8192;   
4 q# ?8 Y( a6 x$ S& n! \7 [Idle.idleFxns[0] = "&LEDStatus";
# g) a7 _# g5 b% t' ACache.initSize.l2Size = Cache.L2Size_32K;
2 ]/ v( ?% p0 @$ x* w! b/ \7 a. \
- F0 s& i2 z4 j" ?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-10 06:07 , Processed in 0.040916 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表