关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 H. O; ]' i3 Z# D6 P  v

& ]0 z1 X  X1 z3 L+ R0 V" A2 ~    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 {8 J. ~% y. j( [/ o" h
0 N. G* e- D- v7 i0 k; ~& C8 p- P' c7 H其他程序段。。。。。$ P& R7 f2 X( ]2 z3 P) E

% t+ d. b, L# K, b1 _& F5 ^   free(x_d);
9 }/ z# V7 `8 E  T  ?
: }' v# ^$ x( a$ t. A: g; Y使用DSP侧单独调试功能,验证动态申请没有问题,
6 _" P1 Q& E1 {( |" z( D0 Y
* `, `% W' K3 v( e但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 h& N/ l+ @# J# L! z- F
. o4 `& v4 E: B! h) R9 Y- n# D1 n; l

0 S- a% O. n; W8 H$ J# ]
0 w. A7 h& ^( Z' l
5 C! p7 O' n5 P& ?4 d! N" A  j2 o, u, ^7 \" T& v

9 O9 [4 D% q2 A0 l
  t3 n3 H* |& [1 z% o9 H
* s  o& l3 ?5 p  y7 S: M- S2 Y
, Z4 ?4 \6 b2 r1 O
! x+ Q' I# L- b/ d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( _# Y5 H) h! L8 @我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' _/ q* @5 P) t& A9 `
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
! V+ V0 @/ a4 p9 x- b5 T, m, {1 H
0 f1 a; D1 ~8 Z4 ^* y) j. C
是不是需要在DSP.CFG中进行配置
0 A- n, l; i# A' v6 P我现在的配置为
" z$ O8 Z) S" n) y
# N% i. j# g5 u5 L! j/*4 K& @  ?5 {- x( J$ ^) a
*  ======== Operating System Configuration ========
. F, d3 f1 I, u8 n$ h9 Q */  k' i/ J5 H  [0 L6 I  O
7 `9 @( U7 T& [" M. b* q
/* no rts heap */
* K* M/ h& w7 c5 EProgram.heap = 0;% I- K. ]$ K$ \1 a+ V3 \. j
Program.argSize = 100;  /* minimum size */
- V/ F. S* `. |( |& Y2 t3 MProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ i  ^- m1 ^$ R! O
% M5 v5 A9 h7 c  i
/* create a default heap */( d- l6 s9 O6 T" R" O% k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ O8 j; }; i6 r7 e, n9 \
var heapMemParams = new HeapMem.Params();! e3 w, ]+ o0 w6 p- F% ~
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) A) D1 O5 B# i! Q" L
9 c/ n' [. z. O
var Memory = xdc.useModule('xdc.runtime.Memory');
9 E/ U9 t' a' \& BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 j/ {5 Q1 X6 f  }+ Z+ M* ~. G9 P$ G' s/ N) p$ ]4 d! Z
/* configure System module */
3 d* o& _! N2 }4 Ivar SysMin = xdc.useModule('xdc.runtime.SysMin');" i5 n1 r" \( J1 G
SysMin.bufSize = 0x1000;8 r9 T) @  t9 C* i' t& T
SysMin.flushAtExit = false;
2 Y3 s$ w3 k) v- v5 ^
1 ~3 ~6 p) q/ v, U$ e) `4 ?/ gvar System = xdc.useModule('xdc.runtime.System');! B* M! w6 V1 h3 T! |& t
System.SupportProxy = SysMin;  D) I7 l. @8 _  V8 x( C4 h

. p+ l9 h4 I) \/* configure SysBios to use the lower half of Timer 1 */6 `# u5 @0 u* F* j9 {$ K1 G
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 q4 w0 B1 x7 W  L" j7 Q; Z3 m
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 C& h  E# i4 n. Q: u  V' H* H
Timer.timerSettings[1].master = true;
, g1 f! L% m9 |5 q: B5 O: @Timer.defaultHalf = Timer.Half_LOWER;
9 {2 k. m& W) e* _Clock.timerId = 1;
+ p' g' T( i% y& W
$ }: V- p/ S$ l! {$ Q0 U! _1 I' J' K7 u
/*9 b& T1 z% {. S
*  ======== Miscellaneous Configuration ========" C' |, a; `6 c0 S  l# x9 [; E$ v
*/
$ `6 H$ X8 Q+ j6 O, `2 s8 y+ l/ ~: V. {1 {
/* set default diags mask */
! O! b) y3 ]5 m8 L7 fvar Diags = xdc.useModule('xdc.runtime.Diags');* }/ v4 k' @' i4 _
var Defaults = xdc.useModule('xdc.runtime.Defaults');
! c" Y! ?2 q. a! a) p! r* F6 F- Y: D7 ~% Q! i' i) c+ H4 @$ q5 n
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% m& t/ T1 I. C0 T4 X/ A4 I
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ J% U4 _' x) A! wDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" T% Z5 r) B- ^& |
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# i/ I" x$ b. ]. e4 Y4 [, w
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */( x" [! @0 A. {# ]! `3 `/ f
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ p$ K$ R3 o) U: @% `6 F0 N* {0 nDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 n6 `: [) }9 y6 a% i$ c  Z  q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" u$ h9 Z5 B9 _! @Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
" ^9 n6 ?7 D# e% rDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% s& g+ g6 J7 T7 t" ODefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% Z+ J/ q) ?% H: R) zDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, x9 ]. a" P" b) F( W; d/ L8 C
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) s/ l" _& J8 J4 s& U/ @8 YDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, A  f* T3 I9 }5 b- z
8 m( @2 w- m, ^" F6 _$ N- s
/* override diags mask for selected modules */
* Y6 ]( }5 u0 g8 v1 s  B: dxdc.useModule('xdc.runtime.Main');/ b0 J  ^- ?; N3 _' H& y$ O0 L1 {
Diags.setMaskMeta(
" }# p" y3 s2 n/ H. @    "xdc.runtime.Main",! E" x& |) m% B: `  @+ j, J
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
1 y0 R/ |* H5 Z! \    Diags.RUNTIME_ON
8 y5 j) B; _" M. O; P3 h$ G);
- G  j6 L7 e- C+ W+ H
( ~( w$ @* x2 d* e# i" ]var Registry = xdc.useModule('xdc.runtime.Registry');
0 G) j  R/ n  uRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 w6 e' e0 _7 i) K8 tRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 m" f* i1 H+ Q* V+ f8 z& ]: tRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; i7 r% l5 o: Q1 d1 W' O, K# U# cRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
4 y% ?; Y" s5 M, y) k- K% G9 L6 y# e' o# l! h% E" L" v
/* create a logger instance */0 Y& ^( @) H. R- b/ L% K
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ h  d" w7 J6 L  Q9 Qvar loggerBufP = new LoggerBuf.Params();
( o3 d) i; p- K$ E0 n4 E8 lloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' L& N# i& U- r. A, }: T# m
loggerBufP.bufType = LoggerBuf.BufType_FIXED;  q" w+ G: ]1 B  h, d- {) _

8 {/ K7 j9 Z2 f% Qvar appLogger = LoggerBuf.create(loggerBufP);8 U  X8 ]! n- t( f
appLogger.instance.name = "AppLog_Core1";' f! `$ q0 s  T% C( ]
Defaults.common$.logger = appLogger;
/ d7 @+ Y4 R) M* a& {5 n4 w5 g# ]- @Memory.defaultHeapSize = 0x8192;   
$ t/ S) T  O' k$ d) Q' xIdle.idleFxns[0] = "&LEDStatus";) n2 X( k, k7 q. q. x
Cache.initSize.l2Size = Cache.L2Size_32K;
# R' a. v/ @5 n0 q' l5 P5 v
. ^+ J( Z# D7 {/ |
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */3 K: E' `. `  j0 a! N7 z5 @5 T6 C6 e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; P% ?: s/ ^( |* fvar heapMemParams = new HeapMem.Params();
  J8 {  x9 C# G1 \1 C  |heapMemParams.size = 0x4000;; Y4 x0 w( v* [, u, X7 _
. _2 a# ]+ T; ?
var Memory = xdc.useModule('xdc.runtime.Memory');
) U) b6 \. ?! b; cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. v5 O" U/ K& \3 N) k9 Z# E

6 {$ J' K) j9 j. ^. K我大约calloc  每次共计大小为5K*16bits,- B+ ^- X$ i4 P. B& m
而默认配置才0x4000、需要改大。
2 v8 d; x0 k- R1 ^
2 I3 E7 \8 j& u: n, r: z9 U. }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 X8 K! l% O" m" ]& oProgram.heap = 0;2 R+ r+ r: k" a( e: J( I
Program.argSize = 100;  /* minimum size */3 E6 ]( I; x8 e; C+ ^4 n
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-22 15:38 , Processed in 0.044843 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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