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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
- p! A) `% S8 K' }4 R% c4 W
' u( \* @2 Y' P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ {3 n( I) K+ t# C6 n
7 X8 \& U7 s4 Y$ I9 T/ ?5 ]
其他程序段。。。。。
# [( g: [- A" a; g9 y
) K4 Y" G2 w; |' u* ]( d! b   free(x_d);
, b' _* A) p. [, B
. d6 [: _3 u* I# D使用DSP侧单独调试功能,验证动态申请没有问题,
# u1 ]0 \! P6 r; I, V; P  M: {! S: U# E6 {0 r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! ?# c" d5 a5 ?1 w  @$ V. _2 J
9 V5 U8 M+ f1 M8 ^! N2 S! g
7 J; a, S) a7 a- n% n
5 e2 g! A4 k$ A  G$ p

  A6 |! e8 X+ N( c8 Y4 I9 _  w
/ f( ^: [  p6 \
, m& L9 c7 x0 h) J8 k  V" B+ M$ i' P1 A8 |6 o9 B* t6 a4 v( x
0 Z& K0 j( T! O# K5 B
3 d9 U6 L4 p' e# ]. Y3 V

* W# N. f3 N+ w" G$ }
分享到:  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 */
5 i0 J/ v9 A% C8 i7 eProgram.heap = 0;
2 q8 e! V! O8 Q8 DProgram.argSize = 100;  /* minimum size */2 Q" G1 F4 C+ O+ `
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */0 i+ Q9 W% @$ K: n, u, M% R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; y3 h( _8 T" v) c
var heapMemParams = new HeapMem.Params();3 t% K8 m2 D+ y; \5 u3 B3 q
heapMemParams.size = 0x4000;
/ W: j$ k8 z, d2 |$ T) l' k, _* d( l$ Z: b8 v" w8 P7 X
var Memory = xdc.useModule('xdc.runtime.Memory');- H; Z- k( M4 E! ?0 S- Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ e9 c) l, O6 t2 `6 b
2 N+ g9 {7 L$ x) A
我大约calloc  每次共计大小为5K*16bits,
5 S# R2 @+ U7 B; n而默认配置才0x4000、需要改大。  V9 d) \; Y* n9 o: w, U
8 Q: L* `6 [  v( ]) a, V2 b- j
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
9 ^# \) @" o' P3 T# u我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 T; I4 b( D: W3 K- `4 L5 A' J7 [
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
! L" ^2 ?( r! \' L# t0 `6 I9 K+ z
' I6 r" W  H& j0 k* D' B! h' m/ R
是不是需要在DSP.CFG中进行配置, o0 S+ J3 G7 a
我现在的配置为6 R* D1 E" A5 _/ P
7 A; U9 O/ A0 f3 ^
/*7 y& ]0 \" M2 K# Z2 u
*  ======== Operating System Configuration ========
- ~* j1 K1 T* X# V# x* g */. i# i1 K, t8 h7 r5 t5 ^% c& D

% p$ m/ Q! ^6 D. L! t6 ?' Y# ?/* no rts heap */& Z1 r7 }. {& Y  j. n' R  H
Program.heap = 0;" |1 W6 w4 B8 i8 {7 o- Q6 r8 S
Program.argSize = 100;  /* minimum size */: ?  I# f7 L& _; N5 m/ W$ i& E
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  U' Y# _  u; m2 E' N: c# W( P0 C6 h8 F1 l) G( v/ F5 k
/* create a default heap */
$ g9 T/ _- O$ x6 qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; Q! @, e6 r7 zvar heapMemParams = new HeapMem.Params();
3 b) D: T8 a; C" |' v7 ZheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% _4 l7 \0 P* d, x/ O& H  H
' i- U$ o. d9 B( _, g
var Memory = xdc.useModule('xdc.runtime.Memory');
! x  b: c' F. n( z) K7 O1 sMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
  a3 ^2 X* ^! R( s2 Z) x3 r4 c( j7 z( q0 b
/* configure System module */- a/ L# T: `7 k: m# l1 C+ @1 H
var SysMin = xdc.useModule('xdc.runtime.SysMin');$ J, h% `9 s8 c% }  n: A, A9 a
SysMin.bufSize = 0x1000;
! t$ |$ _5 O6 U7 y: L4 {SysMin.flushAtExit = false;3 m# P! J/ c; y
5 u0 M, D* U* l4 a' x1 @+ ?8 t
var System = xdc.useModule('xdc.runtime.System');
/ g) o; j" e& t5 z- kSystem.SupportProxy = SysMin;
6 ]6 }4 U4 v; l% i( P5 g0 f- [- I) V: @- L
/* configure SysBios to use the lower half of Timer 1 */
2 N6 b  G5 Z7 j$ F$ \% h* W/ x1 \var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% B( p  M# Q% h/ i0 ?8 h" r
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! x+ ]0 }' C) B% }$ @6 ITimer.timerSettings[1].master = true;
! K) }8 z0 o5 JTimer.defaultHalf = Timer.Half_LOWER;$ R( Y' A0 n7 Q0 k4 R4 b; e* y: D. X
Clock.timerId = 1;
  z$ s# Z8 ^+ ]% x4 n! f* O
; e7 [8 |7 I" j1 k7 q6 I3 i/ O& X& a; R" y
/*
; ^% Q2 _0 d2 C% M- C *  ======== Miscellaneous Configuration ========. o6 `) T% U& s& y
*/9 H. `( j$ L- m+ G# C$ \

% ]/ }" J' i- g  P. }# l9 e3 i/* set default diags mask */
( d, k9 R( w4 F, G( c) Ivar Diags = xdc.useModule('xdc.runtime.Diags');3 M" S$ G* H% o( {- p4 V. g- `
var Defaults = xdc.useModule('xdc.runtime.Defaults');
7 F) R4 g; w# P$ D% d' K: C; k2 \2 g4 W# n
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ d, h" M; \& VDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! L+ C! k5 @" P5 B  v( {  @2 e1 U  s2 ADefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ H8 ^2 g( m$ I+ j3 c' Q/ a1 W) f: vDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 ^+ O6 x4 h3 \! u# N3 N8 v" ~Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 p5 y. ?! w2 k# E
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ ]  P, u7 o; w. J4 U
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ r8 n) h6 J' b' D1 g
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ {4 v% Q6 t* z% y/ fDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 o0 G7 E% ?$ G! a, l. NDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 Y+ L' I, D- k% X1 t
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. t( ?$ A0 Y; f* `
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- X: K) i: c4 @! ]; R0 {( r7 ?Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ \. m2 {% v' |8 D/ A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ n4 Y, V. ]& W1 h0 `0 o+ M
8 D* T1 S" M* W: Z/ ~( Q
/* override diags mask for selected modules */1 g" q1 C& o  ~/ K
xdc.useModule('xdc.runtime.Main');
, v5 A5 z# l$ i% G# vDiags.setMaskMeta(. {3 f! `9 o' Q/ i: r( T4 Q7 K1 ~0 _6 R
    "xdc.runtime.Main",
( a# `! o& ?- J9 V, R# D2 Q* h    Diags.ENTRY | Diags.EXIT | Diags.INFO,! s: [/ ^' s" T% I: k$ w0 O
    Diags.RUNTIME_ON/ d; R- ?. ]! K( W2 m) W
);* o" u* u) S5 S& u7 k, _
) [6 E+ Q; F8 m
var Registry = xdc.useModule('xdc.runtime.Registry');. x. q$ \# @5 l
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 f$ q7 g( R- u' Y. T6 F$ IRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; g7 ?' ]$ {$ h$ ?# q# f0 J1 SRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;& ?/ R) F5 P; W% Z
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 T! T& H, T( p4 R! H% J

+ M7 w' }( I% E$ y/* create a logger instance */1 S' @5 o2 O2 w8 |8 u
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 p6 t" X0 x. V# b
var loggerBufP = new LoggerBuf.Params();
6 ]- o8 A! {' D  Q0 m+ k$ floggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  X- F' q3 F4 L5 O* V( dloggerBufP.bufType = LoggerBuf.BufType_FIXED;, B0 C! C: E/ n" H  F7 p# i

8 b4 ~/ h. D4 X/ [' A2 J: Evar appLogger = LoggerBuf.create(loggerBufP);- Q. v5 E) t3 c4 o: x2 S3 V4 [9 d
appLogger.instance.name = "AppLog_Core1";' e1 l9 D. z, j  f! M# ]
Defaults.common$.logger = appLogger;* y6 B( G$ @1 j9 X
Memory.defaultHeapSize = 0x8192;    1 P  o' V0 z( d2 D2 S
Idle.idleFxns[0] = "&LEDStatus";3 N8 @# |4 v3 L+ U
Cache.initSize.l2Size = Cache.L2Size_32K;. d0 O7 }' ^% w
/ b" }) T" b7 `3 M. T$ t+ |# N
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-23 08:27 , Processed in 0.044975 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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