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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% ~( U! x& c; M7 b' j' j
1 v3 J2 \+ \! U, O2 e: Z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ y$ g: ?' u4 w, D

3 e" H' \4 ~% J* b; R8 K其他程序段。。。。。
% z9 {; b/ ?" V3 g" A: p9 r : ~" F9 m- n; \3 A
   free(x_d);! |$ F- m) u7 y! M0 U

6 C$ G& c( w' M, x8 P5 Q使用DSP侧单独调试功能,验证动态申请没有问题,
' O: ?/ j# r- T2 Y
* K/ w- A6 T9 }; b# H但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% V1 [2 v8 y2 m, ~
, a  n; J6 g9 D5 u% m' M0 R

+ i1 v4 ]9 ^; }# M2 S6 T  v# d2 \3 m$ G
  i6 ~. @* r. Z: G' h+ i, n. `2 _, f" ^& ?% @8 @" K8 y) j
6 b( H. n* o( h+ k# ?: F8 U
+ x6 o6 \8 _) V( t
2 c# L) N, S% n3 `. P0 M- b

) u) u! {* w# D1 Q0 g  z9 @2 `7 }
6 M0 B6 K) I  q5 Z9 U% u$ d- {* _; |6 A8 t( F9 O" k" A3 d
分享到:  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 */8 }, @/ D5 _! ]3 s3 K8 ~( s
Program.heap = 0;
6 k, E7 v& A  a- l: |Program.argSize = 100;  /* minimum size */  s6 @; }- Q- [; S- C+ s- _- O
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
6 k* {  q  H, ?1 l) P% dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( N. t  l. S6 m0 z# {var heapMemParams = new HeapMem.Params();
6 t0 p0 D' k5 n+ O  D  UheapMemParams.size = 0x4000;! T' [5 p8 B) f9 B/ w" p, J
; @& Y- \/ z9 C/ M! l+ g. h2 p& C
var Memory = xdc.useModule('xdc.runtime.Memory');8 S% O1 c2 t* u" b" u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' P) e! d* T9 |' ?. D3 O8 U; i% K7 J$ R# Z' q( m
我大约calloc  每次共计大小为5K*16bits,+ G! J) b3 m7 N& }; S
而默认配置才0x4000、需要改大。
- x- B/ n9 R$ i. e  `8 n7 o& n, [& U1 W! ]
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
* Y7 P5 I4 ]# x+ y7 v) U我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 p. {& n  |5 U+ ~- d) y$ \# L1 x
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); ^" f7 |2 w8 S, ]' H

* S3 X3 L6 D3 Y$ ?& A0 i6 Q是不是需要在DSP.CFG中进行配置0 c' z: w4 Y7 ]7 p
我现在的配置为
1 E- Y" N, T" Z& o) ^, a$ a
7 T9 n- a3 J! O+ z* a7 A/*- N, D0 H9 Z0 [( P' o0 c
*  ======== Operating System Configuration ========
3 W8 b  E  C5 Q/ N4 i8 b *// i" ~4 m) ?$ n3 w& Q

2 `0 m+ ]5 s1 D- {/ U/* no rts heap */1 i! _8 `) Y1 a) B' S# |2 w8 N
Program.heap = 0;
5 t2 x/ E: ^# J( P+ ^, G- }Program.argSize = 100;  /* minimum size */
3 N3 D8 z! q# d6 J4 s2 wProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大4 K$ |# n6 D. A8 y4 w

* R; J$ @# k% D/ z/ X/* create a default heap */- B' }5 _/ U# P: b5 o: \
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 t; B" F" k) Y+ N1 |, v
var heapMemParams = new HeapMem.Params();
- K# y5 _/ l1 I  uheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  i7 _8 v" |/ q+ C# k  y
4 r: v* o9 R, @3 e7 ?3 o1 s0 Y
var Memory = xdc.useModule('xdc.runtime.Memory');
$ p( B; M5 G/ ^Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& ^0 T3 \4 {& T4 B- m% y  C6 y9 P8 [5 H/ r
/* configure System module */: C9 y/ |+ m$ F! L7 O6 F
var SysMin = xdc.useModule('xdc.runtime.SysMin');
8 ^2 T8 O6 Q4 {. d2 N$ f# a) ^SysMin.bufSize = 0x1000;
7 J6 S1 J2 j2 S5 |$ V; JSysMin.flushAtExit = false;4 w3 p* q8 G) m
9 @& ?! h7 Y  r# b+ `8 P
var System = xdc.useModule('xdc.runtime.System');
, M0 G7 l/ q2 M! z) m4 \System.SupportProxy = SysMin;
% g" R! ~' |& m5 |& ]: X. x1 n& @2 v6 b! p# d
/* configure SysBios to use the lower half of Timer 1 */
& Q! ?# y3 t5 R( g' _. ?7 l8 t3 C4 M* x5 @( avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 O* S8 Y4 X2 h# k  Q& @# i/ X6 ?var Clock = xdc.useModule('ti.sysbios.knl.Clock');3 T3 A$ m0 Z; K' U% ~8 W
Timer.timerSettings[1].master = true;
# R( A* f% l' L; @" G0 [" p; [Timer.defaultHalf = Timer.Half_LOWER;
& ^7 Z3 ~0 ]- \Clock.timerId = 1;
& t/ w, _4 o% R; ^  ~9 ^& F
/ s8 W! A2 ?+ f# [  X" L# a8 |* {
/*
) j% G, }* q; X+ E3 T *  ======== Miscellaneous Configuration ========
  c6 g2 Q6 q8 Y9 i */. F2 m* e- |2 D5 d' H

9 F* d" n# H/ h" S: G# B# b/* set default diags mask */
! G/ w3 q; I. \# Dvar Diags = xdc.useModule('xdc.runtime.Diags');
& }/ Q" M! e/ H; W) Z2 Vvar Defaults = xdc.useModule('xdc.runtime.Defaults');; e  j/ h/ r8 N5 v2 N# P* [) ]
4 ^0 Y. y5 o! @) `) V, w% Z  T1 o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% @5 b& O, @( eDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& e9 e4 \5 M+ G! n- i$ t3 s
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 k& x6 s* A; y( K! f. v1 X. _7 s
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; e' P5 ^9 }3 R$ _' P. h0 S$ {* ^Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 f& h" {: G7 }* j; F; c# D8 ?; q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 C, d1 K+ b+ J, R0 a/ v! l# {- [. N
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ Y! X  u( }/ A. Z2 {1 D+ v8 n
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
) M0 O  j5 p1 u& CDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( o+ Q5 }5 P' v+ V- a. y: j: C
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
5 a# g9 D2 Z  q; W( U5 ~Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 E) v8 i+ B" l) _& N
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 s- S9 u" N7 h3 t$ q% T$ Y3 L- _Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 c% Z8 A) G6 H- F* UDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 ~( h+ [0 G4 Q4 G3 Z  j% y3 `4 V, t+ E' r% ?4 L4 Y
/* override diags mask for selected modules */
# r$ i" _! b5 u: O0 R+ t' f4 Dxdc.useModule('xdc.runtime.Main');
7 _5 s; C( A+ e( y  iDiags.setMaskMeta(! N) Q" r3 b" t( Y& W
    "xdc.runtime.Main",
% f! N' t8 ]) ?6 D& M% y8 s    Diags.ENTRY | Diags.EXIT | Diags.INFO,: n! @0 H) w5 J1 w9 w6 Z
    Diags.RUNTIME_ON
) C2 V; m2 s8 x, j8 @);
; _& h+ l7 Q+ k# @* M) J) f9 ~) A) q4 I9 F7 }9 h( T
var Registry = xdc.useModule('xdc.runtime.Registry');$ v. x8 c& s! }6 o
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 u& a  f2 v, \* W3 V1 c' c9 `3 U( nRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 ~, v6 L( b5 C& |0 DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 h- R0 ~. G1 o4 G6 R# X6 R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 p( G) b& x6 B, N6 F7 U
. g4 f! ^$ ^+ p& e/* create a logger instance */
. U2 W- O8 n( _* `) ?) rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. {3 f$ A/ r$ C6 |) Z1 ]) pvar loggerBufP = new LoggerBuf.Params();
9 Q' _. D; u/ ]6 }# F; |loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 O, g$ I4 U+ S1 ~: `. L
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 L2 B$ N3 V6 b- ]# S6 s6 Z! a4 i9 N* o7 E8 T
var appLogger = LoggerBuf.create(loggerBufP);1 v. O" y) r8 r" P/ @
appLogger.instance.name = "AppLog_Core1";+ U0 ?3 z8 N" @$ S. k/ t
Defaults.common$.logger = appLogger;3 N( j* F0 z& |" ^! u: A( y
Memory.defaultHeapSize = 0x8192;   
2 p; S5 u+ h* U3 Q1 y( [Idle.idleFxns[0] = "&LEDStatus";' n: \5 N9 |4 Q" Y- s  r! t+ e
Cache.initSize.l2Size = Cache.L2Size_32K;
% Y- G* @) S: B" w" Q  z; c" @4 x
6 Q! k1 t( I0 n1 ]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-17 06:02 , Processed in 0.053278 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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