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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

1 `$ G4 s# m6 t# y) i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 w" N6 r: [) L! }7 a% H9 E  Q# K' o/ }1 n' @: l
其他程序段。。。。。
0 M7 u) r, ?- \& ^0 J
; j4 O2 i  Q7 p( C" k   free(x_d);
1 p8 ^4 x3 \" b# p( H# C' L& g) r- F& s+ l
使用DSP侧单独调试功能,验证动态申请没有问题,- h( a8 v) ^1 W

1 z# M# m) \) W0 H1 _' _但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* l: E5 S$ u# Y1 k& `5 C

$ S; q& w& O9 k1 R1 {
1 d) t+ k3 a& P5 r4 i& Y8 f4 ^$ J2 F( ?. ?% Q/ N

# z1 w9 e6 [) s
: z5 p/ R- f! U- O6 H
* y- U7 q) B6 s$ x( F+ u4 f4 T* S* q. A' K# r/ X& u# p' q
. ~' e+ b! {5 F4 n

9 C4 O0 P3 W  }9 H( k+ W: f7 y; R5 ~' q, j. }: {" [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( j  ?; {& {0 e! `6 D我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% f+ b# @: H; s9 h* U(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 o# p' Y" c0 O* J3 y

# G0 g- A: v# U6 t" u9 V* W是不是需要在DSP.CFG中进行配置
3 D5 d# U& z+ \) ]3 I3 H我现在的配置为
$ M2 I: h% h: P$ Q% z* f9 P/ Y3 S5 m' k5 \1 m' w1 h: U0 ?9 I
/*# J! E. f0 k, W1 h
*  ======== Operating System Configuration ========. z. ^9 t1 T* F8 w3 `4 a
*/
8 s6 c1 r) }) E. A6 X9 l) T5 K8 l( M8 Z
/* no rts heap */
. ^- B; Z( u/ J2 ^6 \4 L1 ZProgram.heap = 0;
' }4 z. n$ ~4 l/ T4 ?9 E/ w% [7 c% XProgram.argSize = 100;  /* minimum size */7 K. H8 A' M# \/ [
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! Z- I$ c0 F! i/ u# Z4 I
8 \; j) E: J9 u1 A
/* create a default heap */$ s  {* d- T6 V/ q' C, n2 e- N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% z- Z0 @; l  U- R; I9 b8 {
var heapMemParams = new HeapMem.Params();
; j$ I0 P) ~6 e" `% d* nheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. z1 ?% {0 @/ I: I8 I3 I$ O0 `# ?+ J: G) N
var Memory = xdc.useModule('xdc.runtime.Memory');
0 i. E$ G4 a! l. I- d, RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 L+ d: L6 R5 q7 I; ?# h
' x; M( b; o- A) s9 d/* configure System module */
  o$ R4 r7 g5 [. H" T) h0 ?var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 m* |/ j$ m/ }% t7 ^" @8 P; l& iSysMin.bufSize = 0x1000;
  W' w$ X% _$ r: p9 M% [7 l5 b, VSysMin.flushAtExit = false;
+ @2 U, H/ b' N% t# w/ x1 S
* M" C5 h, s4 Z. tvar System = xdc.useModule('xdc.runtime.System');
6 ~. c& y, x! P, B& z0 Q; G- {; JSystem.SupportProxy = SysMin;
% ]9 G2 g$ ^) l3 ]1 w% b
) P. ]( L3 S3 F% Y0 M( X- H/* configure SysBios to use the lower half of Timer 1 */: t, P% r4 x" ^, ?- H/ e+ L. I
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# v* u6 n; E# d( p% svar Clock = xdc.useModule('ti.sysbios.knl.Clock');3 [* [  p! B; S, R  e$ T' t
Timer.timerSettings[1].master = true;' l) [' C- y/ ^  ]
Timer.defaultHalf = Timer.Half_LOWER;; f% S* x7 K0 w4 |' c; w
Clock.timerId = 1;
: u2 w; v; ]% i' W) m9 z; \8 w, s: [9 W

9 ]8 E- u$ ~( s/*
6 g& d7 S* ]  j( P3 N1 k *  ======== Miscellaneous Configuration ========5 F0 V! z+ r' p' [6 d( y: Z$ f1 ?
*/
; V3 E. I4 Q6 f7 b: w1 Z5 O9 z/ R) N+ C3 x& Q0 a) T$ _1 {
/* set default diags mask */
$ l, c" F8 i+ Y: c; Z$ ~% V5 ^7 qvar Diags = xdc.useModule('xdc.runtime.Diags');( K. Z8 o# _) v/ @# }% I
var Defaults = xdc.useModule('xdc.runtime.Defaults');
0 Q' @2 T' V- x; ?5 e9 O% o" u: u" A  k! {5 N) {5 H
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 }2 c& a9 r: }3 J0 Y7 w
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 W) |  |% H: PDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' C; ]" g+ A1 A1 @( IDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% i* l% E) m/ d/ v7 |Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  e# P% K! q# Y  kDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 H, I5 N! N/ Z0 R% {Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! a! P6 F7 ]$ P0 U8 A& O$ F( u: A  lDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" q) B' ~8 }; u  Z, zDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  o2 I" Q. ^( g' j( }9 o" LDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
9 ^; B& i- a, d$ _; G1 S' d( `Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; N5 M: Q3 ~% R8 k: {Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" o9 S6 I/ C% e7 B/ c  ^" l
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 G4 Q% E7 O1 E; B5 W
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 j. `# ~+ ]+ [" q5 u. d& [1 [

" [/ V$ u. W) W% g/* override diags mask for selected modules */
* U( p6 @1 p# q3 ~- Q  zxdc.useModule('xdc.runtime.Main');
9 R) u. \+ U' Y4 |Diags.setMaskMeta(
2 {2 i9 ?: o$ `9 b- m    "xdc.runtime.Main",
5 G8 V5 g9 k+ F/ I' N8 A    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: P) k/ Z7 n0 q: b* ~. O3 L    Diags.RUNTIME_ON. ^9 q6 h: j: y- f1 U  x. p
);
2 \$ ^8 `) c0 v6 x+ ^$ F' z9 \; O7 K, S; g+ `  l2 d
var Registry = xdc.useModule('xdc.runtime.Registry');& D' D0 S1 u/ k7 ^/ [/ |
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 f8 c1 F7 [/ q. X+ O3 w3 @Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 L% s) f) A0 f$ A, J& d) B. MRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;6 c1 c0 f! x  ]# Y/ b
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 X9 ^: Y! |6 R" [; O
) I7 M1 @1 f) O( L3 Y  e/ S4 b
/* create a logger instance */3 s: m) A' q0 \; C5 n0 W
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! w0 W# [# L7 m7 J. {  l# D
var loggerBufP = new LoggerBuf.Params();
) b! _3 l( @5 m: Q/ m: C6 DloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 H! d' H4 ^; a3 ^3 H
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ _2 F6 M0 V) f

! t6 k8 u. X, vvar appLogger = LoggerBuf.create(loggerBufP);- Y: @  o$ s5 t7 S5 k. L
appLogger.instance.name = "AppLog_Core1";: x1 B! p. s- g& O6 s" s3 N
Defaults.common$.logger = appLogger;5 r8 x$ L' W+ ~5 G( t
Memory.defaultHeapSize = 0x8192;   
4 U* o2 r9 O! P  b$ `" J# Y# dIdle.idleFxns[0] = "&LEDStatus";7 D' {. C3 v% E( T3 j
Cache.initSize.l2Size = Cache.L2Size_32K;( Q: I/ V6 u' Q" z; _( Y
) R& ]6 v  J9 @$ |) o8 U, X
回复 支持 反对

使用道具 举报

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 */
) X- c: b9 G% t% E' }# i# hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 b2 |6 w) R8 N; j
var heapMemParams = new HeapMem.Params();9 b. g1 p8 B/ y1 E8 v- B; I
heapMemParams.size = 0x4000;. H4 @2 _- w8 z& r% W1 U' N
- j+ M$ H. a5 ^
var Memory = xdc.useModule('xdc.runtime.Memory');
  ^* X- y# K& U# B0 u+ Z3 |6 J5 Z4 eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 B. _" |" Q( j! d  P/ B

. L+ V; V' r8 K; y  {, B我大约calloc  每次共计大小为5K*16bits,( R0 P- Y8 }6 ]% J. e0 P
而默认配置才0x4000、需要改大。' D; H" V1 i% u) p9 t

' ^$ l+ X" ~" K* u
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' C4 ^( f$ C5 e9 Y' ]0 N4 pProgram.heap = 0;8 N7 b5 H9 p& O. H1 Z2 Y
Program.argSize = 100;  /* minimum size */
3 [" w4 x$ y  W# b( q4 nProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-16 22:15 , Processed in 0.043273 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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