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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: c8 |7 m; \* r0 Y4 O( i/ @
8 O+ f9 x" T# `- S( u; N    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 G5 |7 p5 {. x( b! N' g% s) P9 E0 m- \* ?, @4 q- H' g' H
其他程序段。。。。。
1 ^$ f0 X8 v3 q5 r! B 3 I. D2 Z/ y8 j6 j( p
   free(x_d);; ~8 j& t( h  `+ X
4 s. f" y1 \" A5 v3 f
使用DSP侧单独调试功能,验证动态申请没有问题,
! k0 ?, e8 z0 G2 F# {/ ], Q1 y# @0 x4 j4 z; W
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 w, ~- }( g/ r9 g! ^2 c7 Y

( Y& T1 R) K0 J- z2 t, N7 K3 u- V3 @  o+ w; u! t. I

3 a7 o8 X" \. N- ]) d  r" t! C0 N* Y0 M# A# S! O5 d% ]: @
* J/ d+ j( b$ `) _: r0 J! V
3 q5 k' g9 B7 V
7 {- x% v5 c" t, ^2 j5 g+ t7 s0 D
7 j1 E; Q/ e/ i8 v' V2 c1 g
/ }! _" i# D- M( Q2 K9 i
3 }$ H* J' ?8 A. G# [" n
分享到:  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 */
. I& [$ M) V4 B( S: g" i) HProgram.heap = 0;
/ |0 m$ j9 I! S' A7 ^Program.argSize = 100;  /* minimum size */4 X4 a  W" R4 ^9 p" ^
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */: N  i" d! ~  g: c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- T" r- c: ]% J( t# u
var heapMemParams = new HeapMem.Params();
! Z2 i" H( j% bheapMemParams.size = 0x4000;
" t& z1 @# |8 C- o8 X) C, C, \7 y/ p3 L: z
var Memory = xdc.useModule('xdc.runtime.Memory');
; ?  d  B# H$ @$ `: uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 `/ d( l- w) E* n5 H9 y1 L( g

9 z1 H! U' T) x2 q6 [- l我大约calloc  每次共计大小为5K*16bits,
7 ~- k1 D+ o, j# ]; U而默认配置才0x4000、需要改大。
- ^/ F7 Y" n, i5 v7 X  A$ ]) W5 }7 z+ E3 V* F+ C
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明2 w& M! W. p5 Z' o' f  ?9 N
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% ^9 `* p4 X+ f$ j6 c(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# G8 V5 ?+ b+ {
, Q7 J" E/ V6 a
是不是需要在DSP.CFG中进行配置
+ u% `9 p+ \0 Y7 W" R我现在的配置为
( [5 q4 z) y7 C6 V$ a! V7 W4 L0 G( `% S7 u9 R" {% p3 i3 v# z
/*  r6 Y# z1 C0 Q- J5 k$ r$ |
*  ======== Operating System Configuration ========
7 Y3 E5 s, I$ H1 }. t+ o, Y */9 q6 u8 d0 m0 f4 ]; t% t! X8 \; O

4 V9 |1 N: F" O) ]8 y5 m8 o/* no rts heap */
; X. F8 o! l6 R  ]2 }3 l9 l9 `Program.heap = 0;
/ {9 @* E4 T0 r4 E9 B3 q5 @3 S, iProgram.argSize = 100;  /* minimum size */, v7 F# o* l  x3 b, Z7 ]3 w- t
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 u% G4 Y; Y6 ^

5 ~. [0 }2 H9 V% W; ~! @" K; a/ V/* create a default heap */: f& {: b* H9 X+ @; Q7 |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ t+ e) `4 `0 z2 Z! ivar heapMemParams = new HeapMem.Params();
$ @" d! B& @7 H4 g2 W: NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ _  X. J1 d' }7 ~- O, L
# S: {* b( d8 @! ]# j5 S2 \2 `
var Memory = xdc.useModule('xdc.runtime.Memory');9 h/ ]1 @  W8 ?. `5 _1 V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- A$ [) ]2 L( {0 u" A" M
* y8 x" m- n$ y1 Y: q- z3 v% A& k
/* configure System module */1 q2 a% f- ~5 y( J, A: W. j
var SysMin = xdc.useModule('xdc.runtime.SysMin');$ u( G1 W" z+ J, a
SysMin.bufSize = 0x1000;- |9 U3 j9 l8 e8 V1 t
SysMin.flushAtExit = false;
6 J+ w, i5 T& j: b' Y, u! R: o/ z0 z! \' F/ B  d, ~
var System = xdc.useModule('xdc.runtime.System');: k; Z4 b- T8 x
System.SupportProxy = SysMin;9 Q6 o3 q. t% a) b8 Z7 Z7 ?! E

/ m, C& l- [7 Q( }( R/ w/* configure SysBios to use the lower half of Timer 1 */
: k3 D+ q4 A: }# wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 \* ~2 S- b5 z) y7 |+ H0 ?var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" U& v8 J% C9 t1 f; |+ w7 \Timer.timerSettings[1].master = true;
. [( E" V- p) d' N1 c  n* HTimer.defaultHalf = Timer.Half_LOWER;
4 w. K' t* U1 K7 nClock.timerId = 1;4 X7 g* Y9 |. T5 [0 U

$ i8 `) X) k* G- x
) s  }% Y8 c' j+ P1 _: F/*6 c: p1 t& G) l) o) I; J
*  ======== Miscellaneous Configuration ========6 }9 U: m/ q3 t
*/
3 Z! S5 @5 B8 w& j, c' f6 {9 F# m6 c4 {: f, Q+ m) Q% k
/* set default diags mask */
9 P$ }4 v7 ^) J2 fvar Diags = xdc.useModule('xdc.runtime.Diags');  K, H: |& b! J7 p% v% e+ W9 R' r
var Defaults = xdc.useModule('xdc.runtime.Defaults');! F9 Z& ]5 }+ m% {& k9 n

; T5 T6 Y3 X5 M+ V! `Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) h: g. o# V% |5 [Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. d$ c5 ^5 |, d3 d7 r2 }% J
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! K( b; F( v! vDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */" e. J* p0 {- ~" C0 a
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- v: {1 b7 v" ^+ m
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 y/ p$ g4 r# o+ L1 F$ z9 S2 kDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 K7 i: X# S8 _( h; G4 pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! [$ R5 k/ r5 F
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( F6 ^5 h; G% C1 d: Z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& ^5 x+ ^# {* q; V' J& [' N
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& D" A, \+ W% T' W3 a" h( VDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! Z/ I* q6 H7 F! v" Z' A! S: A, qDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 d& U  E4 s' S' u
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 I$ Z- \  j# C. F8 d% m
% b- u4 g6 O5 r6 e5 o7 ^) U
/* override diags mask for selected modules */, M1 R' \, e% Z4 Y: _5 M; }
xdc.useModule('xdc.runtime.Main');
  o; X4 E" K" V" M  q) |Diags.setMaskMeta(! j. q4 b. _$ B6 W
    "xdc.runtime.Main",! E. X% I7 ]6 J# @9 x) K/ [
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( z/ n) B4 O9 [8 H    Diags.RUNTIME_ON
6 Y  h$ q; J0 h. s2 F3 t2 E);6 ]1 F0 ]! r7 R+ c$ o7 [4 D

5 R0 i! G6 S1 t1 ~. S# `) lvar Registry = xdc.useModule('xdc.runtime.Registry');
8 A5 @' U1 @4 vRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, S  ^, {5 @% z3 t: S
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: o/ \( }2 _" \
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 `# O3 X4 c. ^# Q8 {& HRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;' h: a) u8 k" S, c# H
/ {8 A! e3 a$ L3 T  c$ X
/* create a logger instance */, r" Q! ?' u  J7 x
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' I+ I% H! @  w* G
var loggerBufP = new LoggerBuf.Params();' ^1 A: N7 f, z. g; {9 v0 g
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 m+ P  f9 m3 H8 C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 ?3 c3 ?0 O( j
4 q( Q6 c  \5 T% ^. _+ E  ?
var appLogger = LoggerBuf.create(loggerBufP);
* M! a4 E# {  w1 cappLogger.instance.name = "AppLog_Core1";7 W4 y& K$ Q2 J: Y5 v% W- H( p
Defaults.common$.logger = appLogger;
* G( @+ Y8 \: OMemory.defaultHeapSize = 0x8192;   
$ X+ s2 C. B* T, h: Y, p5 eIdle.idleFxns[0] = "&LEDStatus";
+ d5 ]& o" L- y  D3 KCache.initSize.l2Size = Cache.L2Size_32K;
5 c  B' E6 ~  J' J% X8 L+ \
- Z) h' v8 p- G
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-6 03:16 , Processed in 0.042079 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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