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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

8 M* ]9 F8 a* X8 ~# N* A: ]4 W8 z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. k: M: H- m7 A5 ~1 G; g. k

4 G# w- e: N8 A" H# p3 l其他程序段。。。。。
' o3 M" D# H' i1 D$ p . J  Q/ C9 \. |8 d" C; G7 j
   free(x_d);. ?% g2 P/ @# c0 t3 b

& V* v5 |3 ?5 W( w4 S0 I使用DSP侧单独调试功能,验证动态申请没有问题," C# \! x8 G7 T! ?
! ]& c2 B# v9 O
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ A( f2 w2 O  d" x7 h+ S6 v

+ a" Y0 e  M! t1 X9 c' v/ Q
9 f$ @, O* Y) ~7 G7 u' ]7 W; m/ t  k9 s& L# y  r- w& k

1 K, O/ ]+ m& l8 \
& ^' y( M: d- K: ?) }# c) i5 U
* k* l" r) W/ ?9 S! m
8 \# U  W1 x. b8 F/ a
+ `7 G2 f/ a. _: s- {
$ }: b2 b8 ]  k) [' n. X; I1 m! e; |7 g8 J; S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明! ^# F+ R% M8 R" l/ {$ R4 [
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, _" z- R5 P% X. F" D( b+ t, Q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)4 J- Q7 {7 l; d3 u/ G: l* z" v

& D( P& O3 ?% V0 X是不是需要在DSP.CFG中进行配置" w6 y/ V, M) _/ O9 Y9 e# r( K
我现在的配置为
8 E7 T6 ^' y/ e" i
' S$ }7 V5 C2 l7 O- m* h/*$ B3 O  k, v+ |% ]* C7 w
*  ======== Operating System Configuration ========
! N" Q6 }' p3 \4 F */
$ y$ H7 x+ Q2 h2 V$ f# [# @  R; {3 [$ B8 w9 W
/* no rts heap */
2 P1 M, D# h7 t  mProgram.heap = 0;5 L; j5 F8 k9 j* d) W, O! `
Program.argSize = 100;  /* minimum size */  P! c& `3 k/ }- @6 T
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! ]& L! L8 C& ^7 a7 h- [

% t, M7 t2 G  D9 x/* create a default heap */
' w! L& `% o0 \+ b4 m* u) K* N, Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) w5 B0 X8 o+ r+ W' Evar heapMemParams = new HeapMem.Params();
. [3 }0 w+ @) K( Y# c& P4 \- G, IheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ a% O6 R* q$ k. Y% G; f2 F: O
- {1 f1 E, T, L3 N8 M' v" s
var Memory = xdc.useModule('xdc.runtime.Memory');9 X& K; p& l  [3 G: H: v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' S) o* R$ `' n( W3 \+ \; n% m
0 q; k* P% h' u6 a0 j
/* configure System module */( ]9 z, U4 x& Y
var SysMin = xdc.useModule('xdc.runtime.SysMin');
  F6 ^/ U) r8 [7 ASysMin.bufSize = 0x1000;( G: K* K: S  X4 F5 a
SysMin.flushAtExit = false;
2 d; I; m/ s( t
8 g0 x$ n, f9 |$ mvar System = xdc.useModule('xdc.runtime.System');
% W# e5 I# u3 y- Y: Y! e% B( TSystem.SupportProxy = SysMin;- f: V/ |1 {% F+ h4 D

% z. @# t5 D+ A: z/* configure SysBios to use the lower half of Timer 1 */
; }$ O6 \+ Q: \4 pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 U! d# ~& o* i; N5 J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) x" ~2 a2 @: g4 ~7 n1 H! n
Timer.timerSettings[1].master = true;' I" c# o4 E8 A; J
Timer.defaultHalf = Timer.Half_LOWER;9 r+ i8 ]* ^. {9 S" ^$ J/ K1 |
Clock.timerId = 1;! d; ]2 n3 _  e+ N2 M4 ^* s7 S

2 }/ H* }( o0 D6 a
7 X0 Q$ r+ x" K- U$ n0 W/*1 L" P0 x% m* H
*  ======== Miscellaneous Configuration ========1 _3 N. V, b: Y$ Z) L7 \
*/
, O! P* u! M2 c0 c
& P  ?6 R/ ?7 @+ k& y: X/ G: P/* set default diags mask */
. k0 p) l1 n+ L1 {/ hvar Diags = xdc.useModule('xdc.runtime.Diags');
/ I( p! v* k3 x& w8 k! Avar Defaults = xdc.useModule('xdc.runtime.Defaults');, }% g) G' T7 J, \7 A
$ I+ g7 ]0 o1 v, I! {: S# d
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- ^4 j$ T* f! n) dDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# ]7 ^: J" @- {# I' ADefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* Q2 Z3 g" W1 O( r1 d
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ p% S# o+ `* A+ ~  GDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* g8 l# f' F0 O" S* nDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* }- Z. z4 M( y: e# w2 U4 HDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( x( s: E' d: r9 S9 F( h" yDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  y6 {: Q$ X' {6 J; HDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- j) G1 [; S  v2 g$ J. U5 z% sDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 C7 N$ L; N5 C6 l$ Y; m1 _$ Y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" s5 \" b  M6 u% b4 t
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& J5 V/ T2 w& l+ R$ v3 @6 TDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. {5 N! Y# K/ g1 d3 Q5 T
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 t/ a- q/ ~5 E" w

5 a3 y/ ~# D4 P' _3 V, R/* override diags mask for selected modules */
$ {8 ~/ d( @1 v0 |7 Jxdc.useModule('xdc.runtime.Main');
8 E' s( z- k- g- u# B! WDiags.setMaskMeta(! D1 Z0 _2 J# |! C, x
    "xdc.runtime.Main",% [9 o3 U/ x. A( G# v) [; i
    Diags.ENTRY | Diags.EXIT | Diags.INFO,# a& k" U0 l' Q* O' j2 W- H3 Y
    Diags.RUNTIME_ON
0 ?- `+ I. n* L6 ]);* v( M" O  w/ f& `! n
0 J; f2 o3 i2 z; y; T; a
var Registry = xdc.useModule('xdc.runtime.Registry');
) a4 _! {9 T; \- @+ dRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) d0 a9 V6 r- ~( RRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 |1 _" X7 u9 q; J4 @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: E% r) ]% Y( l: O# s
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 d  b4 a+ @2 W1 _2 d: b4 b
) e& k8 ?" @# ?* [- D
/* create a logger instance */8 ~- A, h) K. m( ?) @$ R' O
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' E$ Q4 S8 E9 @# y
var loggerBufP = new LoggerBuf.Params();
7 g% N/ s) p4 iloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 V- u/ m  U* r9 t2 t: IloggerBufP.bufType = LoggerBuf.BufType_FIXED;6 i$ w' i* `5 X0 k/ y1 M% {- O
4 b* l# F# n5 A6 r: L
var appLogger = LoggerBuf.create(loggerBufP);
0 Z$ n7 @. k: j6 R, }appLogger.instance.name = "AppLog_Core1";. C" a: e! y& ?1 |
Defaults.common$.logger = appLogger;7 \. ~( E9 c( Y5 e- c+ i
Memory.defaultHeapSize = 0x8192;    5 _2 h& A: v/ U. \7 X! T8 f
Idle.idleFxns[0] = "&LEDStatus";1 L# ^; F$ K0 P/ W- L7 h
Cache.initSize.l2Size = Cache.L2Size_32K;/ C6 `+ I, i" J) @1 [  b

- p' Y4 s. y2 v& u
回复 支持 反对

使用道具 举报

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 */
: y+ {4 U# A8 Y+ x7 Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 k& Y- P0 ~# t' vvar heapMemParams = new HeapMem.Params();! d8 }1 k9 w1 R/ h' z6 _" s' Q
heapMemParams.size = 0x4000;
; k4 f9 T0 x1 o# `2 K  U) I
" C. f! |" L, y5 s; [) ^) Bvar Memory = xdc.useModule('xdc.runtime.Memory');1 A" w+ q0 ^; q# X; w7 G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! A# M7 e* k) C& `& V

9 }' J8 @$ h* ?( g( H我大约calloc  每次共计大小为5K*16bits,
9 H7 |( }, V& K- g) m" v2 S而默认配置才0x4000、需要改大。9 a! G& d" ?0 F% x( O$ G
( x, m1 \& f) S
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ N9 Y: M4 p2 r5 y* a% f
Program.heap = 0;
! b" @; K% C$ c2 @8 C7 ?2 A+ aProgram.argSize = 100;  /* minimum size */
# m4 T& C( y4 ]0 w5 v0 VProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-20 23:05 , Processed in 0.047469 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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